在MVC3 / C#中过滤(或清理用户输入)?

时间:2012-08-14 18:35:13

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

最好/最安全的方法是确保用户输入任何html或javascript(甚至是SQL)到一个表格中以清除所有内容并且只显示纯文本(或以纯文本格式显示其html)或者给用户一个错误?显然,我正在尝试阻止XSS和任何类型的注入,以及我不希望用户尝试用他们自己的HTML来干扰我的页面显示。理想情况下,我宁愿不将HTML写入数据库。

编辑:我不确定是谁作为答案标记,因为你们从不同的角度解决了这个问题

3 个答案:

答案 0 :(得分:1)

为什么在存储到数据库之前进行过滤?输出时过滤。例如,在Web应用程序中,您可以进行HTML编码。 Razor @函数已经这样做了:

@Model.SomePropertyThatCouldContainHTML

现在你很安全。在数据库中,您可以存储可以在其他应用程序中重用的实际字符串。例如,在桌面应用程序中,您没有担心XSS,因此删除这些标记是没有意义的。

但是如果您需要显示未编码的用户输入,您可以使用AntiXSS库从中删除所有可能导致XSS的危险javascript代码。

就SQL而言,总是使用参数化查询,这样您就不必担心任何SQL注入。

答案 1 :(得分:0)

默认情况下,您的网站会启用“请求验证”。基本上,这将检查每个请求到服务器,如果它检测到一个潜在的危险请求,它将抛出异常。理论上它很棒但是现实是,至少在我的经验中,你几乎总是在你正在使用某种RTE(或者一般的用户输入)的页面上关闭它,因为仅仅存在HTML会导致验证失败。

有许多方法可以阻止XSS,但这里有一些基础知识:

  • 限制您的输入。这意味着如果你有一个只应该有数字的字段(例如电话号码),那么就要阻止用户在该字段中键入除数字之外的任何内容。
  • 对输入进行解码/编码
  • 由于XSS请求可以编码,因此只需找到要剥离的正则表达式就不是银弹,因此请求中不存在物理标记。

以下是一些资源:

最后,如果有疑问Google

答案 2 :(得分:0)