潜在危险的请求。从客户端检测到表单值

每次用户发布包含的内容时&lt或&gt在我的web应用程序的一个页面中,我抛出了这个异常

我不想讨论因为有人在文本框中输入了字符而引发异常或使整个web应用程序崩溃是否明智,但我正在寻找一种优雅的方法来处理这个问题

捕获异常并显示

出现错误,请返回并重新键入整个表单,但这次请不要使用&lt

对我来说似乎不够专业

禁用后期验证(validateRequest=“false”)肯定会避免此错误,但会使页面容易受到多种攻击

理想情况下:当回发包含HTML限制字符时,表单集合中的该回发值将自动进行HTML编码。
因此,我的文本框的.Text属性将是something&书信电报;html&燃气轮机

有没有一种方法能让我从一个处理者那里做到这一点

我认为你试图对所有发布的数据进行编码,这是从错误的角度攻击它

请注意,a&quot&lt"也可以来自其他外部源,如数据库字段、配置、文件、提要等

此外,"&lt"这本身并不危险。只有在特定的上下文中才有危险:当编写尚未编码到HTML输出的字符串时(因为XSS)

在其他上下文中,不同的子字符串是危险的,例如,如果将用户提供的URL写入链接,子字符串javascript:"可能很危险。另一方面,在SQL查询中插入字符串时,单引号字符是危险的,但如果它是从表单提交的名称的一部分或从数据库字段读取的名称的一部分,则完全安全

底线是:你不能过滤随机输入的危险字符,因为任何字符在正确的情况下都可能是危险的。您应该在某些特定字符可能变得危险的地方进行编码,因为这些字符会进入另一种具有特殊含义的子语言。将字符串写入HTML时,应使用Server.HtmlEncode对HTML中具有特殊含义的字符进行编码。如果将字符串传递给动态SQL语句,则应该对不同的字符进行编码(或者更好,让框架使用准备好的语句或类似的语句来为您编码)

您确定将字符串传递到HTML的每个地方都进行HTML编码,然后设置ValidateRequest=&quot;假</&lt;%中的code>@第页…%&燃气轮机</.aspx文件中的code>指令

在.NET4中,您可能需要做更多的工作。有时还需要添加&lt;httpRuntime requestValidationMode=&quot;2.0“/&燃气轮机到web.config(参考)

发表评论