0

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

在应用程序中观察到错误处理不当。应用程序在 SQL 查询执行期间泄露了数据库详细信息,例如表名和列名。当参数“txtCity”留空并提交表单时,就会发现此漏洞。

数据库详细信息在以下错误中披露:

无法将值 NULL 插入列“column_name”、表“table_name”;列不允许空值。插入失败。该语句已终止。”

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

4

2 回答 2

1

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

这可以通过多种方式完成。例如,使用Burp Proxy 之类的东西监控浏览器和您的站点之间的请求,甚至在浏览器的开发人员工具中进行简单检查,将显示您的表单提交端点在哪里、它采用的参数和使用的提交方法。然后攻击者可以使用他们拥有的任何工具将他们想要的任何数据发送到您的表单端点。

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

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

于 2012-11-19T08:53:33.443 回答
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-script 以及您的代码隐藏输入txtCity之前验证文本框。
原因可能是测试团队禁用了 java-script 。因此,您的 java 脚本验证不起作用。
因此,请验证您正在使用的 C# 或 vb 中的文本。

于 2012-11-19T08:50:37.667 回答