【问题标题】:jQuery AlphaNumericPlugin - Copy Paste IssuejQuery AlphaNumericPlugin - 复制粘贴问题
【发布时间】:2010-10-12 18:47:53
【问题描述】:

我正在为 jQuery 使用 .alphanumeric 插件,当用户直接在文本框中输入内容时,它确实符合我的预期。但是,如果用户将一个值复制并粘贴到文本框中,那么所有的赌注都将被取消。

$("#<%= txtNumber.ClientID %>").alphanumeric({allow:"-"});

我当然可以:

$(document).ready(function() {
    $("#<%= txtNumber.ClientID %>").blur(function() {
        $("#<%= txtNumber.ClientID %>").val(
            RemoveInvalidCharacters(
                $("#<%= txtNumber.ClientID %>").val()
            )
        );
    });
});

//FUNCTION REMOVES ANY ; IN TEXT TO PREVENT SQL INJECTION
function RemoveInvalidCharacters(text) {
     return text.replace(';', '');
}

但是...我宁愿不必用 .blur() 函数进一步整理我的代码。有没有其他方法可以解决这个问题?

【问题讨论】:

  • 您不应依赖客户端脚本来做任何事情,而应为用户提供更好的体验。服务器端验证和参数化查询是确保数据干净且数据库受到保护所需要的。
  • 我在后端使用 LINQ to SQL,它已经为我解决了这个问题......只是试图让前端与后端正在做的事情相匹配......

标签: asp.net jquery linq-to-sql sql-injection validation


【解决方案1】:

处理粘贴事件相当简单。我在masked input plugin 中使用了这种技术,效果很好。随意浏览源代码以查看它的使用情况。

这是为您的上述示例修改的相关位。

var pasteEventName = $.browser.msie ? 'paste' : 'input';
$("#<%= txtNumber.ClientID %>").bind(pasteEventName, function() {
   setTimeout(function() { 
      RemoveInvalidCharacters(
         $("#<%= txtNumber.ClientID %>").val()
      ); 
   }, 0);
});

【讨论】:

    【解决方案2】:

    我在这里找到了这个解决方案: http://www.devcurry.com/2009/10/allow-only-alphanumeric-characters-in.html

    <script type="text/javascript">
    $(function() {
     $('input.alpha').keyup(function() {
      if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
       this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
      }
     });
    });
    </script>
    
    <input type="text" name="test" value="" class="alpha">
    

    【讨论】:

      【解决方案3】:

      我也需要解决粘贴问题的方法,我想出了一些适合我的方法。人们仍然可以在浏览器菜单中使用“编辑”>“粘贴”,但可以处理 Ctrl-V 以及右键单击粘贴。在 FF、IE、Opera、Safari、Chrome 中测试:

      <!DOCTYPE html>
      <html>
      <head>
          <title>Only Allow Certain Characters</title>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
      </head>
      <body>
          <br>
          <form id="myform" action="">
              <input id="element1" name="mytext1" type="text">
              <input id="element2" name="mytext2" type="text">
          </form>
      <script>
          /* removes evil chars while typing */
          (function($){
              $.fn.disableChars = function(a) {
      
                  a = $.extend({
                      allow: ''
                  }, a);
      
                  b = a.allow.split('');
                  for ( i=0; i<b.length; i++) b[i] = "\\" + b[i];
                  a.allow = b.join('');
      
                  var regex = new RegExp('[^a-z0-9' + a.allow + ']', 'ig');
      
                  $(this)
                  .bind('keyup blur', function() {
                      if (this.value.search(regex) != '-1') {
                          this.value = this.value.replace(regex, '');
                      }
                  })
                  .bind('contextmenu',function () {return false});
      
              }
          })(jQuery);
      
          $("#element1").disableChars();
          $("#element2").disableChars({allow:".,:-() "});
      </script>
      </body>
      </html>
      

      【讨论】:

      • 这可能有效,但问题确实说“我宁愿不必用 .blur() 函数进一步整理我的代码”。因此,发帖人正在寻找这种方法的替代方法。
      【解决方案4】:

      复制和粘贴绝对是屏蔽输入的挑战。

      您是否考虑过在提交表单而不是在用户输入值时“编码”特殊字符?我们做同样的事情来允许用户在 TextBoxes 中输入 字符(我们通过 javascript 将它们转换为 < 和 > 然后在后面的代码中返回到 。

      【讨论】:

        【解决方案5】:

        这样您就不会阻止 SQL 注入。我不需要使用您的表格,我可以制作我的表格并将其发布到您的脚本中。更简单:我可以禁用 javascript 并删除您的数据库。

        相反,在服务器端检查输入的有效性。

        最简单的方法是转义它或使用参数化查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-18
          • 2018-08-16
          • 1970-01-01
          • 2020-09-12
          相关资源
          最近更新 更多