跳到正文

字符串转义

String Escaper

按 JSON、JavaScript、SQL、shell、CSV 和正则各自的规则转义字符串,也能反转义回去。

把一段文本转义成能放进字符串字面量里的形式——JSON、JavaScript、Python、Java、C#、SQL、shell 命令、CSV 字段或正则表达式——再反转义回来。每种目标有自己的规则,它们之间的差异正是注入漏洞藏身的地方。

🔒 完全在你的浏览器里运行escapestringjsonshell
规则
方向

RFC 8259:`\" \\ \/ \b \f \n \r \t`,其余用 `\uXXXX`。没有 `\'`,没有 `\x`,没有 `\0`。

文本

转义后的值

输入

0个字符

输出

0个字符

怎么用

  1. 选目标语言

    选择器下方的说明写着这个目标实际转义什么。JSON 比 JavaScript 严格;模板字面量要多操心两个字符;单引号 shell 和双引号 shell 是两个不同的问题。

  2. 粘贴原始文本

    换行、引号和非 ASCII 字符都会处理。出来的是字面量的*内部*——外面那对引号仍然由你来加。

  3. 看「可以干净地还原」

    输出下方的统计会把结果反转义回来,和你输入的比较。如果它说不能,说明对这个目标来说转义是有损的,你粘出去的字符串不是你原来那个。

常见问题

转义之后我的 SQL 就安全了吗?

没有。转义一个字面量和参数化查询不是一回事,而且这个工具不知道你数据库的引号模式、字符集,也不知道这个值最终会不会落到一个引号不是分隔符的地方。用绑定参数;用这个工具来读一条查询,不要用它来构造生产环境的查询。

为什么 SQL 模式不用反斜杠?

因为标准 SQL 没有反斜杠转义——引号写两遍。反斜杠转义是 MySQL 的扩展,而假定它存在的代码正是相当一部分注入漏洞的来源。如果你需要 MySQL 的行为,那得是你有意为之。

`\uXXXX` 这个目标是做什么的?

它把每个非 ASCII 字符变成 `\uXXXX` 转义,代理对也包括在内。它最有用的方向是反过来:被只认 ASCII 的管道弄坏的 properties 文件或日志行,反转义之后中文就回来了。

单引号 shell 真的对任何字符串都安全吗?

对字符串本身,是的——POSIX 单引号里什么都没有特殊含义,一个引号写成 `'\''`。它防不住的是你调用的程序对这个参数的解释,以及不是 POSIX 的 shell。它是一条引用规则,不是沙箱。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。