防止将不同的符号写入 select2 输入

Prevent writing different symbols into select2 input

提问人:ad0rfin 提问时间:8/7/2023 最后编辑:ad0rfin 更新时间:8/7/2023 访问量:61

问:

我有默认选择:

<select id="indivCitizen" multiple="multiple">
     <option value=""></option>
</select>

我用 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
          },
        },
      });
    })

这一切都与MSSQL DB有关,因此我需要保护我免受不同的注入

我试过这个,但它仅适用于默认输入:

document.getElementById("indivCitizen").addEventListener("keydown", function (e) {
      if (e.key.match(/[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/))
        return e.preventDefault();
    });

    document.getElementById("indivCitizen").addEventListener("input", function (e) {
      this.value = this.value.replace(
        /[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/g,
        ""
      );
    });

所以我需要防止将不同的符号写入 select2 输入

javascript jquery-select2 sql 注入

评论

2赞 freedomn-m 8/7/2023
需要针对 SQL 注入(而不是 UI)保护端点。countrylist
0赞 ad0rfin 8/7/2023
无论如何,都需要了解如何防止在 select2 中键入不同的符号
0赞 freedomn-m 8/7/2023
如果您坚持在ajax调用之前删除字符的虚假安全性,则删除它们,这是它确定参数的地方,例如(或左右)data: function(params)searchvar query = { search: params.term.replace(/\-/g, '') }
0赞 ad0rfin 8/7/2023
这不能正常工作:(或者也许我只是弄错了:search: params.term.replace(/[()'"!@#$%^&*=_+,.*;:/|\\<>?~]/g, "")
0赞 freedomn-m 8/7/2023
好吧,如果你使用的是正则表达式,你需要提供一个有效的正则表达式。先尝试一些小的东西,比如 .然后添加其他部件,直到它不起作用。正则表达式具有必须转义的特殊字符,例如 -> 。几乎大多数都是TBH.../,/g-\-

答:

0赞 freedomn-m 8/7/2023 #1

若要在输入时阻止特殊字符(以改进 UX),可以将委托事件侦听器添加到

input.select2-search__field

示例(如标记)

$(document).on("input", "input.select2-search__field", function (e) {
    this.value = this.value.replace(
        /[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/g,
        ""
    ); 
});

笔记:

  • 这将影响页面上的所有 SELECT2 输入
  • 如果光标不在末尾,这将提供可怕的用户体验,即在每次无效的按键/输入时跳转到输入的末尾

但应该让你更接近你的最终目标

评论

0赞 ad0rfin 8/7/2023
:D看起来真的很糟糕,但无论如何都需要找出如何防止将符号写入 select2 输入而不会遇到任何麻烦
0赞 freedomn-m 8/7/2023
这是常见的问题 - 有一种方法可以解决它,方法是获取 selectionState/selectionEnd 并恢复它以重置光标位置。这里的关键是选择器。this.value = this.value.replace($(document).on("input", "input.select2-search__field",