无法将NULL值插入主键列错误

时间:2012-11-19 08:38:05

标签: asp.net sql database insert

我们开发了一个ASP.NET应用程序,并且笔测试报告了以下错误

  

在应用程序中观察到不正确的错误处理。应用程序   在此期间公开了数据库详细信息,例如表名和列名   SQL查询执行。当此漏洞被识别出来时   参数“txtCity”留空,表格已提交。

数据库详细信息在以下错误中公开:

  

无法将值NULL插入列'column_name',表中   “TABLE_NAME”;列不允许空值。 INSERT失败。该声明   已被终止。“

sql语句作为存储过程执行。我们无法在网页上复制错误,但我们尝试提交表单。请帮助我们解决问题。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

渗透测试人员只会查看您的表单是如何提交的,然后手动重新提交,忽略您在前端的任何验证。

这可以通过多种方式完成。例如,使用诸如Burp代理之类的内容监控浏览器和您的站点之间的请求,或者甚至在浏览器的开发人员工具中进行简单检查,将显示您的表单提交端点所在的位置,所需的参数以及提交方法用过的。然后攻击者可以使用他们拥有的任何工具将他们想要的任何数据发送到表单端点。

重点是,网页提供的所有前端安全性可以很容易地被绕过,以便向表单提交页面发送任何参数值。所以你必须考虑你的后端安全性。不要依赖网页前端代码中的“安全性”;前端验证代码就是为合法用户提供帮助。

您可以通过停止向前端显示的SQL错误来解决您的一般情况,或者在这种特殊情况下,您可以在服务器代码中确保所有表单参数都有效,然后再尝试在数据库上执行SQL查询关于那些参数。

答案 1 :(得分:0)

Web配置文件的用户自定义错误如下

 <system.web>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
         ...
         ...
    </customErrors>
 <system.web>

然后不会显示任何自定义错误。 您还可以使用Gloabal文件来跟踪应用程序中发生的错误。

void Application_Error(object sender, EventArgs e)
{
}

在从java脚本输入 txtCity 之前验证文本框以及代码隐藏。
原因可能是测试团队禁用了java脚本。所以你的java脚本验证不起作用 因此,验证您正在使用的C#或vb中的文本。