我正在尝试确保我的webforms ASP.NET应用程序尽可能安全,它只接收具有登录功能的用户接收并将用户输入数据存储到sql数据库(通常的东西),因此一般公众无法使用.
通过对输入页面禁用ValidateRequest,我感谢存在XSS攻击的风险 – 所有SQL查询都是参数化的,因此从sql注入是安全的(正确吗?).
我可以在输入文本上使用HTMLencode,而不是使用Anti-XSS库吗?然后我存储HTMLencoded字符串?
或者我是以错误的方式看待它?我应该逐字存储用户输入,然后在输出到浏览器的任何时候输入HTMLencode或XSS-HTMLencode吗?
解决方法
好吧,阅读它似乎常见的智慧是逐字存储输入,不做任何调整,只需参数化以防止sql注入.
这里有一些好评:What are the best practices for avoiding xss attacks in a PHP site
然后使用HTML Encode(似乎可以使用),或者使用XSS-Library对输出进行编码 – 如上面的链接中所述,数据的目标可能在稍后的某个时间点不是浏览器.
然后在这里使用XSS攻击的例子:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet将其中一些输入到数据库,并回读到浏览器.使用正确的编码,您应该看到文本,而不是执行脚本.