【发布时间】:2014-08-06 13:02:15
【问题描述】:
我有一个重要问题要问。
我正在构建我的网站,并且进展顺利,但是有许多表单被写入我的数据库,并且在稍后阶段,数据会显示在网站内的其他位置,因此问题是脚本注入攻击。您使用什么方式以及哪种方式最好?
我有几种方法可以解决这个问题,经过测试和工作,但是哪种方式
1st) 使用 ValidateRequest="false" 然后 server.htmldecode() 来解码类似的东西
<script>alert("Hello")</script> to
<alert>("Hello");<alert>
这一切都很好。它进入编码的数据库,但是当我将它输出回屏幕时,浏览器会重新呈现它,然后它会显示不是我想要的警报。即使我使用 server.htmldecode()
2nd)我写了一个类,但它很粗糙,还需要进一步开发,但是我可以通过该类解析一个字符串,它会从字符串中删除 html 标签并返回修改后的字符串。
3rd) 删除 ValidateRequest="false" (所以它是真的)并在 web.config 中添加一个错误控件,该控件将在捕获“潜在危险的 Request.Form 值时重定向到另一个页面(带有参数)从客户端检测到”事件(或任何错误)。
我已经尝试过 Microsoft Anti-Cross Site Scripting 库,但无法使用它。我也以多种方式和形式尝试过 RegEx,但没有任何成功。
那么你是如何在你的网站上做到这一点的呢?
提前致谢。
【问题讨论】:
-
我已经在将它输出到屏幕之前对其进行了htmlencoded。这似乎保留了所有的“<alert>("Hello");<alert>”,但仍然请你的想法。
-
你试过 Sanitizer.GetSafeHtmlFragment(YourString) 吗? codeproject.com/Articles/617043/…
-
Deepu,我再试一次告诉你。
-
Deepu,成功了,谢谢。网上似乎没有关于这个库的文档。您可以将某些标签列入白名单或黑名单吗?
-
嗯,你可以在 MSDN 或 stackoverflow.com 中找到
标签: asp.net regex code-injection