0

我在 IIS7 和 .NET 4.5.1 上有一个 Web 窗体网站,我希望使用 Microsoft 的请求验证来验证 http 请求。validateRequest 和 requestValidationMode 的 web.config 默认值应该分别为“true”和“4.0”,这应该是我想要的(我尝试指定它们以防万一)。

<pages validateRequest="true">
<httpRuntime requestValidationMode="4.0" />

出于某种原因,当我在表单中输入一个 html 标记(尝试过 <script> 和 <a>)然后提交它时,我得到了预期的潜在危险请求错误,但该标记被保存在数据库中。为什么会通过?我只是按原样获取文本框的文本值并将其发送到我的数据库,但我希望错误能够阻止这种情况的发生。

当我尝试设置时:

<httpRuntime requestValidationMode="2.0" />

错误是一样的,但是这一次,标签没有最终出现在数据库中,这正是我想要的。

我想了解为什么在我的情况下,安全性较低的验证模式“2.0”是唯一真正阻止请求通过的验证模式,这似乎没有多大意义。一定有我遗漏的东西,如果我应该提供其他信息,请告诉我。

4

1 回答 1

1

我找到了解决我自己问题的方法。微软关于 requestValidationMode 的文档似乎表明所有高于“4.0”的值都被解释为“4.0”,但事实并非如此。阅读这个有趣的页面,我发现有一个“4.5”值是有效的,并且完全符合我的要求。

于 2014-10-20T17:18:26.787 回答