如何使用正则表达式将反斜杠替换为双反斜杠?

12
我需要使用JavaScript修改值,使其准备好作为SQL插入查询的一部分。目前我有以下代码来处理单引号'字符。
value = value.replace(/'/g, "\\'");

这段代码没有问题。现在我注意到单独的反斜杠会导致错误。

如何移除这些单独的反斜杠?


5
不应该直接在查询中使用来自用户的数据,需要进行服务器端的数据转义处理。否则存在被 SQL 注入攻击入侵的风险,因为 JavaScript 很容易被绕过。 - Christofer Eliasson
2
我非常担心你正在使用JavaScript创建SQL语句。你是否实际上有一个用JavaScript编写的SQL库(我认为这种库不存在),还是将SQL语句发送到Web服务器以在那里执行?如果是后者,那么你有一个严重的安全漏洞!你必须在服务器上创建SQL语句。 - Aasmund Eldhuset
4
我希望这是在服务器端运行的JavaScript,比如Node.js。 - Mattias Wadman
1
不要使用JavaScript来更改进入数据库的内容。显然,这是一个关于防止字符注入的安全问题。我可以关闭JavaScript,或者仅仅使用Firebug删除您的客户端代码,然后注入任何我想要的内容到您的数据库中。 - austincheney
1
@AasmundEldhuset: "你真的有用JavaScript编写的SQL库吗(我认为这种东西不存在)" JavaScript只是一种语言。我经常在服务器端(以及桌面端,非Web)使用它。事实上,它最早的用途之一就是在旧版Netscape应用服务器中用于服务器端。它传统上更多地用于Web浏览器而不是其他任何地方,但它从来没有被限制在那里,而服务器端JavaScript正在兴起。 - T.J. Crowder
显示剩余4条评论
2个回答

25
现在我注意到独立的反斜杠会导致错误。
在您操作的字符串中使用反斜杠将不会对替换 ' 字符产生任何影响。如果您的目标是替换反斜杠字符,请使用以下内容:
value = value.replace(/\\/g, "whatever");

...这会将字符串中的所有反斜杠替换为“whatever”。请注意,我必须写两个反斜杠而不是一个。这是因为在正则表达式字面量中,反斜杠用于引入各种特殊字符和字符类,并且也用作转义符号 - 正则表达式字面量中的两个反斜杠(与字符串中一样)表示字符串中的一个实际反斜杠。

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

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

请注意,为了在替换字符串中获得一个字面上的反斜杠,我们必须转义两个反斜杠 - 这将导致替换字符串中总共有四个反斜杠。
我需要使用JavaScript修改该值,以使其准备好作为SQL插入查询的一部分。
您不希望手动执行此操作。任何允许您进行数据库查询等操作的技术(JDBC、ODBC等)都将提供某种形式的“预处理”或“参数化”语句(link),可以为您处理这些转义问题。自己做几乎肯定会在软件中留下安全漏洞,可能会被利用。您要使用一个团队的工作,他们已经考虑过这个问题,并且随着问题的出现而定期更新生成的代码,而不是独自前行。此外,如果您的JavaScript在客户端运行(大多数情况下是这样,但并非全部情况 - 我一直在服务器端使用JavaScript),那么无论您如何转义字符串,都不能使其安全,因为客户端对服务器的请求可以被欺骗,完全绕过您的客户端代码。

我需要用双反斜杠进行替换。我可以直接使用 value = value.replace(/\/g, "\"); 吗? - user1052933

3

你应该使用数据库库提供的转义函数,自己编写会带来麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接