【问题标题】:How to fail validation if the user attempts to submit HTML?如果用户尝试提交 HTML,如何验证失败?
【发布时间】:2016-01-17 08:41:58
【问题描述】:

我有一个可以使用的RequiredFieldValidator,除非我尝试提交包含以下字符的字符串:

&#

我们的网络服务器拒绝该请求,声明我们不允许提交 HTML。

如何执行客户端验证以防止字符串包含这些字符或其他可解释为 HTML 的字符?

【问题讨论】:

  • 替换字符怎么样?
  • 你不应该在客户端编码html然后在服务器端(Web服务器)解码为什么限制用户?
  • 服务器是否拒绝特定字符集或所有非字母数字字符。在这种情况下,您只需在 javascript 中使用正则表达式并针对 [a-zA-Z0-9]* 测试输入

标签: c# html asp.net validation


【解决方案1】:

一种方法是限制用户仅输入某些字符或不允许键入某些字符。例如,您可以在文本控件中启用或禁用某些键,例如

// check for only upper, lower char with [space]
function onlyAlpha(e, t) {
   if (navigator.appName == "Microsoft Internet Explorer") {
      var n = event.keyCode;
      if (n > 64 && n < 91 || n > 96 && n < 123 || n == 32) {
         return true
      } else {}
   } else {
      var n = t.charCode;
      if (n > 64 && n < 91 || n > 96 && n < 123 || n == 32 || n == 0) {
         return true
      } else {}
   }
   return false
}

只允许字母数字

// check for upper, lower, [space], [,], [.] and numerals
function onlyAlphaNumeric(e, t) {
   if (navigator.appName == "Microsoft Internet Explorer") {
      var n = event.keyCode;
      if (n > 64 && n < 91 || n > 96 && n < 123 || n == 32 || n == 46 || n == 39 || n >= 48 && n <= 57) {
         return true
      } else {}
   } else {
      var n = t.charCode;
      if (n > 64 && n < 91 || n > 96 && n < 123 || n == 0 || n == 32 || n == 46 || n == 39 || n >= 48 && n <= 57) {
         return true
      } else {}
   }
   return false
}

你可以把它们当作

<asp:TextBox ID="txtText1" runat="server" onkeypress="return onlyAlpha(this,event);" MaxLength="30" />
<asp:TextBox ID="txtText2" runat="server" onkeypress="return onlyAlphaNumeric(this,event);" MaxLength="30" />

使用这些功能,您可以允许/禁止用户填写某些字符。您需要在这里处理的一个问题是捕获 ctrl+v。你可以找到很多 SO 帖子来处理这个问题。

如果您方便使用 regexes,您可以从这些 SO 帖子 javascript only allow alphanumeric and hyphen - value in text fieldREGEX (javascript) - Allow alphanumeric characters with special characters not in the first position 中获取提示

为了防止表单提交,更好的方法是使用一些客户端 JavaScript 库/jQuery 插件。有很多可用的。

为了安全起见,最好使用正则表达式或自定义检查对输入应用服务器端验证,例如

If txtText1.Text.Contains("#") OrElse txtText2.Contains("<") Then
    'take action
End If

【讨论】:

    【解决方案2】:

    我对““标签有这样的问题。 我在表单中添加了一个事件处理程序。当我点击提交按钮时,javasript 代码在值发送到服务器之前工作。

    <from ..... onsubmit = "return confSubmit();">
    

    并在我的 javascript 中添加一个函数来更改该字符:

      function confSubmit() {
         document.getElementById("Employee").value = document.getElementById("Employee").value.replace(/</g, "&lt;");
    document.getElementById("Employee").value = document.getElementById("Employee").value.replace(/>/g, "&gt;");
        }
    

    【讨论】:

    • 我认为您首先需要将&amp;amp; 替换为&amp;amp; - 对于原始文本已经包含“<”的情况你不想解码服务器端。
    • 是的,当然,我不带整个代码,只是为了展示我的解决方案:)
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2016-05-23
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多