我在 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”是唯一真正阻止请求通过的验证模式,这似乎没有多大意义。一定有我遗漏的东西,如果我应该提供其他信息,请告诉我。