【问题标题】:Is this input sanitization regex safe?这个输入清理正则表达式安全吗?
【发布时间】:2020-11-21 15:42:16
【问题描述】:

我有一个输入字段,我希望用户在其中输入一个地方的名称(城市/城镇/村庄/其他)。我有这个功能用于清理输入字段的内容。

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

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

我的问题是:

  1. 这个正则表达式安全吗?
  2. 可以改进吗?
  3. 您是否发现了使用此正则表达式攻击程序的方法?

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

【问题讨论】:

    标签: javascript regex input sanitization


    【解决方案1】:

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

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

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

    3.与答案1相同,正则表达式是安全的,但由于它在浏览器js中使用,代码被禁用,所以也请进行服务器端验证。

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

    【讨论】:

      【解决方案2】:

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

      ps。 请原谅我缺乏参考资料。但值得你自己研究。

      【讨论】:

      • 嗯,我的项目没有我自己的后端。这是一个非常小的纯前端项目。
      • 那么我会同意 subhadip pahari。如果您只是担心脚本攻击,我会说您已经充分保护自己免受攻击!这是我过去发现有助于测试正则表达式的工具:regex101.com
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2011-04-05
      • 2010-10-31
      • 2011-02-20
      相关资源
      最近更新 更多