2

.NET 4.0
与 2012
IIS 7

我有一个应用程序可以接收各个页面上的电子邮件地址,我发现用户正在直接复制/粘贴到一些输入中,并且它触发了标题中提到的错误,这是一个示例。

"blah blah" <blah@blah.com>

显然,括号引发了问题。我意识到我可以简单地将验证切换到 2.0,但我不想这样做,所以这是我的问题。

  • 有没有办法让运行时做出更好的反应?当遇到这种情况时,它不会抛出一个超级可怕的页面,而是将其视为输入错误并向用户显示一条消息(在一般情况下)例如,在我所说的场景中,我可以显示一条错误消息关于电子邮件地址中不允许使用 < 和 >。我喜欢这种保护,但我不喜欢每次有人输入有潜在危险的输入时都会显示“oops”页面的想法。

  • 如果我要放松验证:

    • 我可以在每页的基础上做吗?我不相信,但我要求完整性
    • ASP.NET 为我提供了哪些工具来手动保护自己免受此类问题的影响?我真的不想参与编写东西的游戏来查看输入中是否存在潜在危险的东西。
4

1 回答 1

3

您可以通过将 ValidateRequest="false" 放在页面标题中来放松对每页的验证。

然后,您可以使用正则表达式来验证电子邮件地址,如下所示:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="Email" ErrorMessage="Enter a valid e-mail address" 
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />

对于其他控件,您可以使用正则表达式“^[^<>]+$”来检查尖括号。实际上,您无需担心“潜在危险”的用户输入,除非您将其输出到客户端(HTML / JavaScript),或者您将其包含在 SQL 语句中。

或者,您可以尝试在您的页面中编写页面级错误处理程序或在 Global.asax 中编写应用程序级错误处理程序。

页面级错误处理: http: //msdn.microsoft.com/en-us/library/ed577840 (v=vs.100).aspx

应用程序级错误处理: http: //msdn.microsoft.com/en-us/library/24395wz3 (v=vs.100).aspx

此页面提供了一些有关在 ASP.NET 中禁用请求验证的有用信息:http: //msdn.microsoft.com/en-us/library/hh882339 (v=vs.100).aspx

于 2012-12-15T19:13:59.857 回答