【问题标题】:How can I replace a backslash with a double backslash using RegExp?如何使用 RegExp 将反斜杠替换为双反斜杠?
【发布时间】:2011-12-30 23:17:54
【问题描述】:

我需要使用 javascript 修改该值,使其准备好作为 SQL 插入查询的一部分。

目前我有以下代码来处理单引号 ' 字符。

value = value.replace(/'/g, "\\'");

此代码可以正常工作。现在我注意到独立的反斜杠会导致错误。

如何删除那些独立的反斜杠?

【问题讨论】:

  • 您永远不应该信任来自用户的数据以直接在查询中使用的方式。转义数据应该在服务器端完成,否则使用 SQL 注入攻击您的风险很大,因为很容易绕过 JavaScript。
  • 我很害怕您正在使用 JavaScript 创建 SQL 语句。您是否真的有一个用 JavaScript 编写的 SQL 库(我认为不存在),或者您是否将 SQL 语句发送到 Web 服务器以在那里执行?如果是后者,您有*主要*安全漏洞!必须在服务器上创建 SQL 语句。
  • 我真的希望这是某种服务器端 JavaScript,比如 nodejs。
  • 不要使用 JavaScript 更改进入数据库的内容。显然,这是一个关于防止字符注入的安全问题。我可以关闭 JavaScript,或者简单地使用 Firebug 删除您的客户端代码,然后将我想要的任何内容注入您的数据库。
  • @AasmundEldhuset:“你真的有一个用 JavaScript 编写的 SQL 库吗(我认为不存在)” JavaScript 只是一种语言。我一直在服务器端(以及桌面,非网络)使用它。事实上,它的一些最初用途是在服务器端,在旧的 Netscape Application Server 中。传统上,它在网络浏览器中的使用比其他任何地方都多,但它从未仅限于此,服务器端 JavaScript 正在兴起。

标签: javascript regex


【解决方案1】:

现在我注意到独立的反斜杠会导致错误。

您正在操作的字符串中的反斜杠不会对替换' 字符产生任何影响。如果您的目标是替换 反斜杠 字符,请使用:

value = value.replace(/\\/g, "whatever");

...它将用“whatever”替换字符串中的所有反斜杠。请注意,我不得不写两个反斜杠,而不仅仅是一个。这是因为在regular expression literal 中,反斜杠用于引入各种特殊字符和字符类,也用作转义符——正则表达式文字(如字符串)中的两个反斜杠一起表示字符串。

要将单个反斜杠更改为两个反斜杠,请使用:

value = value.replace(/\\/g, "\\\\");

请注意,同样,要在替换字符串中获得文字反斜杠,我们必须对两者中的每一个进行转义 - 导致替换字符串中总共有四个。

我需要使用 javascript 修改该值,使其准备好作为 SQL 插入查询的一部分。

您不想手动执行此操作。任何允许您进行数据库查询等的技术(JDBC、ODBC 等)都将提供某种形式的 preparedparameterized 语句 (link),这些语句处理为您解决这些问题。自己动手几乎可以保证在您的软件中留下可能被利用的安全漏洞。您希望使用一个团队的工作,该团队必须仔细考虑这一点,并在问题出现时定期更新生成的代码,而不是独自飞行。此外,如果您的 JavaScript 在客户端上运行(大多数情况下是,但绝不是全部——我一直使用 JavaScript 服务器端),那么 nothing 您可以转义字符串安全,因为客户端对服务器的请求可以被欺骗,完全绕过你的客户端代码。

【讨论】:

  • 我需要用双反斜杠替换。我可以使用 value = value.replace(/\\/g, "\\"); ?
【解决方案2】:

你应该使用某种数据库提供的转义函数,你自己滚动只会造成麻烦。

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2017-07-25
    • 2012-06-16
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多