2
<asp:CheckBox ID="chkIsHidden" runat="server" Enabled="false" 
    Checked='<%# Convert.IsDBNull(Eval("Is_Hidden")) ? false : Convert.ToBoolean(Eval("Is_Hidden")) %>' 
/>

上面的代码,安全程序扫描并警告“Blind SQL Injection”,我很困惑

  1. 为什么它有SQL注入?
  2. 如何修复以避免sql注入?
4

1 回答 1

1

如您所见,即使您的 Web 应用程序不返回错误消息,它仍然可能容易受到 SQL 盲注攻击。但是,您可以使用以下最佳实践保护组织的应用程序免受攻击:

  1. 创建强制执行安全编码实践的策略,以确保在任何应用程序开发或部署期间执行漏洞检测和评估。

  2. 让您的开发人员确定数据进入或退出应用程序的位置,并确保在 HTTP 请求的每个部分都进行验证,然后再让其靠近脚本、数据访问例程和 SQL 查询。这将防止用户提供的数据能够修改 SQL 语句的语法。

  3. 使用存储过程将您的 Web 应用程序与 SQL 完全隔离,应用程序应使用安全接口(例如 JDBC 的 CallableStatement 或 ADO 的命令对象)来执行这些过程。如果必须动态生成 SQL 语句,请使用 PreparedStatements,因为 PreparedStatements 和存储过程都会在添加用户输入之前编译 SQL 语句,使用户输入无法修改实际的 SQL 语句。

  4. 考虑使用漏洞评估工具来自动发现 SQL 注入和其他安全漏洞。

  5. 制定事件响应计划。制定详细且经过充分演练的计划将帮助您以有序和有效的方式处理发生的任何攻击,并将对您的组织的影响降至最低。

于 2012-12-10T09:02:04.977 回答