【发布时间】:2014-01-31 10:01:41
【问题描述】:
在阅读了 ASP.NET request validation causes: is there a list? 关于导致 ASP.NET 抱怨危险输入的原因的帖子后,我决定编写自己的正则表达式以在 RegularExpressionValidator 中使用。
我根据 Travis 接受的答案为测试点 2 和 3 创建了一个正则表达式...
- 2 - 如果
&字符在&#序列中(例如, 表示不间断空格),则它是一个“危险字符串”。- 3 - 如果
<字符是<x(其中“x”是任何字母字符az)、<!、</或<?的一部分,则它是一个“危险字符串”。
^(.)()+|()$
使用regexlib.com 上的测试仪似乎效果很好,因为它符合您所期望的所有内容,并且没有您不想要的内容。
但是当我在 ASP.NET RegularExpressionValidator 上使用表达式时,验证器会触发任何文本!无论 EnableClientScript 是真还是假,它在 Firefox 或 IE 上都是如此。我正在使用 .NET 4.5.1,但我不希望这有什么不同。 任何想法为什么以及如何修复它或为什么它不起作用?
【问题讨论】:
-
我不确定你的意图,无论你是写这个只是作为一个练习还是你想在你的应用程序中使用它,但我建议允许输入 HTML 并集中你的根据需要努力正确编码输出。 “危险的 HTML”只有在输出不正确时才危险。请参阅OWASP XSS Cheat Sheet 了解更多信息。
-
我想知道我是否看错了,因为我试图允许“安全”输入,但验证器匹配“不安全”输入,所以即使匹配有效,它也会精确与我想要的相反?
-
在 ASP.NET 中,如果用户尝试提交带有潜在危险输入的表单,则会引发 HttpRequestValidationException。您可以通过关闭请求验证来阻止这种情况发生,但我不想绕过请求验证(因为这是安全性的重要部分),所以我想要一种优雅的方式来处理请求验证失败的最常见方式,以便用户可以更正输入而不是其他任何内容。我可以编写一个自定义验证器来执行此操作,但我认为正则表达式会更好。
-
我明白了。我更喜欢把它关掉,但你必须确信你输出的东西是正确的。请参阅my other answer here 的 XSS 部分,了解有关 ASP.NET 请求验证及其易受攻击位置的一些信息。
标签: html asp.net regex validation