可接受的安全性:使用Paramatised SQL和HTML编码字符串禁用ValidateRequest?

时间:2013-05-16 13:12:28

标签: asp.net xss antixsslibrary

我正在尝试确保我的webforms ASP.NET应用程序尽可能安全,它只接收具有登录名的用户将用户输入数据接收并存储到SQL数据库(通常的东西),因此不可用于一般公众。

通过禁用ValidateRequest输入页面,我感谢存在XSS攻击的风险 - 所有SQL查询都是参数化的,因此从SQL注入是安全的(正确吗?)。

我可以在输入文本上使用HTMLencode,而不是使用Anti-XSS库吗?然后我会存储HTMLencode d字符串吗?

或者我是以错误的方式看待它?我应该逐字存储用户输入,然后随时将HTMLencodeXSS-HTMLencode输出到浏览器吗?

2 个答案:

答案 0 :(得分:3)

好的,阅读它似乎常见的知识是逐字存储输入,不做任何调整,只需参数化以防止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将其中一些输入到数据库,并回读浏览器。使用正确的编码,您应该看到文本,而不是执行脚本。

答案 1 :(得分:1)

考虑到注入和XSS攻击在OWASP top 10中有两个第一个位置,您需要非常小心,然后在asp.net中禁用请求验证。

首先不要禁用请求验证,除非确实需要。你必须有理由这样做。请求验证是针对XSS类型攻击的本机机制。

对于所有输入字段,第二个总是white list validation,只允许通过可接受的章程。

然后你需要放过像'<'这样的字符。或'>',这有潜在危险。

因此,如果您在页面上显示输出,则必须始终对输出进行编码。总是。这是为了防止JavaScript(如果插入到输入中)将被执行。

参数化查询必须与上述白名单验证和输出编码一起使用,以防止sql注入攻击。

也不要在sql存储过程中做任何动态查询构造(动态sql)。

确保所有数据库用户和SQL存储过程都具有对数据库资源的适当级别访问权限(尽可能少的访问权限方法)。