You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止向Select2输入框写入特殊字符以防范SQL注入

解决Select2输入框拦截特殊字符的问题

因为Select2的输入框是动态生成的DOM元素,并非原生<select>控件,你之前绑定在原生select上的事件不会生效。需要针对Select2生成的输入框绑定事件,或者利用它的钩子处理输入内容。

方案一:通过Select2的select2:open事件绑定输入拦截

当Select2下拉框打开时,获取它的输入框元素,再绑定特殊字符拦截逻辑:

$(document).ready(function () {
  $('#indivCitizen').select2({
    ajax: {
      url: "/countrylist",
      dataType: 'json',
      delay: 250,
      data: function (params) {
        var query = {
          search: params.term
        }
        console.log(params)
        return query;
      },
      processResults: function (data) {
        return {
          results: data.items
        };
      }
    },
    placeholder: 'Write country name',
    minimumInputLength: 3,
    maximumResultsForSearch: 1,
    tags: true,
    maximumSelectionLength: 1,
    language: {
      inputTooShort: function () {
        return 'Search will start after 3 symbols';
      },
      maximumSelected: function (e) {
        var t = "You can choose only one";
        return t
      },
    },
  });

  // 监听Select2打开事件,绑定输入拦截
  $('#indivCitizen').on('select2:open', function() {
    // 获取Select2的输入框
    const select2Input = $('.select2-search__field')[0];
    if (!select2Input) return;

    // 阻止特殊字符按键输入
    select2Input.addEventListener('keydown', function(e) {
      if (e.key.match(/[()`'"!@#$%^&*=_+,.*;:/|\<>?~]/)) {
        e.preventDefault();
      }
    });

    // 清除已输入的特殊字符
    select2Input.addEventListener('input', function(e) {
      this.value = this.value.replace(/[()`'"!@#$%^&*=_+,.*;:/|\<>?~]/g, "");
    });
  });
});

方案二:在AJAX请求前过滤参数

除了前端输入拦截,还可以在发送请求前直接过滤搜索参数,确保传给后端的内容已清除特殊字符:

data: function (params) {
  // 先过滤特殊字符再组装查询参数
  const cleanedTerm = params.term ? params.term.replace(/[()`'"!@#$%^&*=_+,.*;:/|\<>?~]/g, "") : "";
  var query = {
    search: cleanedTerm
  }
  console.log(query)
  return query;
},

关键提醒:SQL注入的核心防范

前端拦截只是辅助手段,绝对不能依赖前端过滤阻止SQL注入。后端必须使用**参数化查询(Prepared Statements)**处理数据库请求,比如在MSSQL中用SqlCommand配合参数占位符,而非直接拼接SQL语句,这才是防范注入的根本方法。

内容的提问来源于stack exchange,提问作者ad0rfin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:03