我有一项任务是在ASP.Net Web App中阻止SQL注入。有一个注释文本框,测试人员已将其标记为SQL注入的可能位置。将文本插入数据库的Submit按钮事件已使用Oracle参数化SQLCommand。但是在测试时我能够插入"选择' duff'来自双重;"作为评论。因此,我很好奇如何防止sql注入,我所能找到的只是人们说使用参数。所有建议表示赞赏。谢谢。下面是调用存储过程的行。
dbCommand = db.GetStoredProcCommand("ABC.Insert_My_Comment");
db.AddInParameter(dbCommand, "in_comments", DbType.String, obj.Comments);
db.ExecuteNonQuery(dbCommand);
答案 0 :(得分:1)
只要您将评论放在参数中,它就不能用于注射。
生成动态查询字符串时出现问题;
"INSERT INTO COMMENTS Comment = '" + userComment + "'"
答案 1 :(得分:1)
SQL注入
只要您使用参数和存储过程,就可以合理地保护您的系统免受SQL注入。
如果您的渗透测试人员仍然没有给您带来困难,请告诉他们您实施了与OWASP guidance一致的缓解措施,特别是选项2.如果他们一直给您带来困难,请问他们哪个具体{{ 3}}失败,具体是什么injection test, 和/或如果他们能够触发任何恶意或不需要的系统行为。如果他们无法提供与实际行为不同的预期行为的特定情况,则它不是可操作的缺陷,您应该将其关闭为failure mode or criticality。
其他类型的注射
仅仅因为你对SQL注射的安全并不意味着你对所有类型的注射都不安全,例如有人可以将HTML注入该字段,以支持FAD。如果您网站中的任何网页将该评论字段反馈到网页上,请确保您正确对内容进行HTML编码,并确保没有人可以强迫您的网站在您的网站中间呈现Script
标记页。