提交前对 Asp.Net 文本框进行消毒以防止 SQL 注入

Sterilize Asp.Net Textbox Before Submitting to prevent SQL Injection

我的任务是防止 SQL 在 ASP.Net Web 应用程序中注入。有一个评论文本框,测试人员已将其标记为 SQL 注入的可能位置。将文本插入数据库的提交按钮事件已经使用了 Oracle 参数化 SQL 命令。但是在测试时我能够插入 "select 'duff' from dual;" 作为评论。所以我很好奇当我能找到的只是人们说使用参数时如何防止 sql 注入。所有建议表示赞赏。谢谢你。下面是调用存储过程的行。

dbCommand = db.GetStoredProcCommand("ABC.Insert_My_Comment");
db.AddInParameter(dbCommand, "in_comments", DbType.String, obj.Comments);
db.ExecuteNonQuery(dbCommand);

只要你把注释放在参数中,它就不能用于注入。

当您生成动态查询字符串时会出现问题; "INSERT INTO COMMENTS Comment = '" + userComment + "'"

SQL 注射

只要您使用参数和存储过程,您的系统就会受到合理的保护,免受 SQL 注入。

如果您的渗透测试人员仍然为难您,请告诉他们您实施了与 OWASP guidance, specifically option 2. If they keep giving you a hard time, ask them which specific injection test failed, what is the specific failure mode or criticality 一致的缓解措施, and/or 如果他们能够触发任何恶意或不需要的系统行为。如果他们无法提供与实际行为不同的预期行为的特定案例,则它不是可操作的缺陷,您应该将其关闭为 FAD

其他注射类型

仅仅因为您可以免受 SQL 注射并不意味着您不能免受所有类型的注射,例如有人可以将 HTML 注入该字段以可能支持 reflected XSS attack。如果您网站中的任何页面将该评论字段吐回到页面上,请确保您对内容进行 HTML- 正确编码,并确保没有人可以强迫您的网站呈现 Script 标签页面中间。