这个输入清理正则表达式安全吗?

Is this input sanitization regex safe?

我有一个输入字段,我希望用户在其中输入地名 (city/town/village/whatever)。我有这个功能,用于清理输入字段的内容。

sanitizeInput: function (input) {
        return input.replaceAll(/[&/\#,+()$~%.^'":*?<>{}]/g, "");
    }

我想删除我不希望出现在地名中的所有特殊字符。我认为黑名单正则表达式比白名单正则表达式更好,因为仍然有很多字符可能出现在地名中。

我的问题是:

  1. 这个正则表达式安全吗?
  2. 可以改进吗?
  3. 你看到使用这个正则表达式攻击程序的方法了吗?

编辑:这是一个仅限前端的小型项目。没有后端。

请务必记住,前端清理主要是为了改善用户体验并防止意外数据输入错误。有一些方法可以通过前端控制。出于这个原因,出于安全目的依赖后端清理数据非常重要。这可能不是您问题的答案,但根据您用于后端的内容,您可能需要清理某些东西,或者它可能内置控件,您可能不需要担心进一步清理。

ps。 请原谅我缺乏参考资料。不过还是值得自己研究一下。

您的正则表达式非常适合删除任何特殊字符。 答案是:

1.the regex 是安全的,但正如您提到的,它是一个 vuejs 项目,因此 js 函数将 运行 在浏览器上。浏览器基本上不能安全地进行用户输入清理。您也应该在后端服务器中执行此操作,以确保 100% 安全

  1. 在此示例中,您无法改进正则表达式本身。但是除了 regex 之外,您还可以对每个特殊字符使用 indexOf (这将是最快的过程,但更冗长且代码太多) 像 : str.indexOf('&') !== -1 str.indexOf('#') !== -1 等等

3.same 作为答案 1,正则表达式是安全的,但由于它在浏览器 js 中使用,代码将被禁用,因此请同时进行服务器端验证。

如果您对此答案有任何疑问,请通过评论或回复告诉我。