7

I'm trying to make sure my webforms ASP.NET application is as secure as possible, it receives and stores user input data to a SQL database (the usual stuff) only for users with a login, so not available to the general public.

By disabling ValidateRequest for input pages, I appreciate there's a risk of XSS attacks - All the SQL queries are parameterised, so are safe from SQL Injection (correct?).

Rather than using the Anti-XSS libary, can I just use HTMLencode on the input text? Do I then store the HTMLencoded string?

Or am I looking at it the wrong way? Should I store the users input verbatim, and then HTMLencode or XSS-HTMLencode anytime it is output to a browser?

4

2 回答 2

3

好的,阅读它似乎普遍的智慧是逐字存储输入,不做任何调整,简单地参数化以防止 SQL 注入。

这里有一些好的评论:在 PHP 站点中避免 xss 攻击的最佳实践是什么

然后要么 HTML 编码(似乎很脆弱),要么使用 XSS-Library 对输出进行编码 - 如上面的链接所述,数据的目标在以后的某个时间点可能不是浏览器。

然后在这里使用 XSS 攻击的示例:https ://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet将其中的一些输入到数据库中,然后读回浏览器。使用正确的编码,您应该会看到文本,而不是执行脚本。

于 2013-05-17T09:07:33.830 回答
1

考虑到注入和 XSS 攻击在OWASP 前 10 名中占据两个首位,您需要非常小心,然后在 asp.net 中禁用请求验证。

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

其次,始终对所有输入字段进行白名单验证,这仅允许通过可接受的章程。

在某些情况下,您需要放开诸如“<”或“>”之类的字符,这具有潜在的危险。

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

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

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

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

于 2013-05-27T07:06:46.990 回答