【发布时间】:2010-08-31 14:51:11
【问题描述】:
我想阻止用户在 TextBox 中输入 url(如 href="")。
我想使用正则表达式验证器,但不知道要写什么?
我该怎么做?
【问题讨论】:
-
如果您出于安全目的这样做,请记住用户可以随时发布不带您的表单。另外,我忘记了在哪里,但是 ASP.NET 提供了一种方法来验证帖子并在检测到已发布涉嫌恶意内容时抛出异常。
标签: asp.net
我想阻止用户在 TextBox 中输入 url(如 href="")。
我想使用正则表达式验证器,但不知道要写什么?
我该怎么做?
【问题讨论】:
标签: asp.net
您的意思是真的要阻止他们在文本框中输入文本href=",还是要阻止 URL? 不管怎样,RegexValidator 是一种解决方案:
实际上,据我所知,使用 OOTB 正则表达式验证器进行否定包含(即“如果匹配则失败”)并不是一种非常简单的方法。更聪明的人可能能够纠正我。但你绝对可以使用自定义验证器:
<asp:TextBox runat="server" id="myTextBox" />
<asp:CustomValidator runat="server" OnServerValidate="ValidateNoUrls" ControlToValidate="myTextBox" ErrorMessage="URLs not allowed" />
代码隐藏:
protected void ValidateNoUrls(object sender, ServerValidateEventArgs e)
{
e.IsValid = !Regex.IsMatch(e.Value, @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?");
}
【讨论】:
javascript + regex 可以做到这一点,但是我没有标准的代码方法可以指点你。
但要记住的重要一点是,无论您做什么,都无法阻止用户向您的服务器提交包含不良内容的请求。这意味着您所做的任何事情使用 javascript 在客户端 Web 浏览器上执行操作只是一种创可贴,它可以帮助您的用户知道线路在哪里。这不是真正的安全码。真正的安全代码必须在您的服务器上。这就是您需要知道如何处理文本框中输入的网址等内容的地方。
【讨论】:
当您提到 ASP.NET 时,您可能想尝试使用 Regex Validator 来检查输入以确保不存在 URL 模式。看看这个MSDN Article。
这个正则表达式应该可以解决问题:@"^(?!.*(mailto\:|(news|(ht|f)tp(s?))\://).*).*$"
【讨论】:
xxxx:// 放弃。你可以扩展否定前瞻来合并“ href" 参考,但这取决于您想要的一般或具体程度。
您可以使用 keypress JS 事件并检查输入的模式是否与您要过滤的模式匹配,您也可以使用 onblur 事件来做同样的事情
【讨论】:
您可能需要考虑在任何情况下在服务器上进行验证(或剥离),因为恶意用户可能会执行直接 HTTP POST 并绕过您的 javascript
【讨论】:
还要确保您不仅仅通过 JS 或类似方式在客户端进行验证。如果我们说的是 Web 应用程序,那么您必须进行服务器端验证。也就是说,因为您永远不会知道如何请求是如何形成的以及它来自哪里。无需查看您的 .
即可轻松形成任何 GET/POST 请求。【讨论】: