html- 隐藏器
一个简单的模块,用来逃脱/逃脱常见的问题实体.
随便你!
如果你想处理 任何类型的输入,包括 null 或者说 undefined,甚至 symbol 类型, 请检查 html- sloppy- scapper 软件 出局:这是同一个模块,但是它从不扔出错误 qq
V3 仅限释放
此模块的 第 3 版 完全抛弃了遗留的浏览器和 节点 有破损装载器,例如 v13.0.0 财务报告和审定财务报表 v13.1.0。 。 。 .
由于代码基本相同,只要坚持第二版 如果你对这个有什么意见... ..
怎么样
此软件包可用 npm 所以 npm install html-escaper 这是你要做的, 最终使用全球旗帜.
一旦模块出现
import {escape, unescape} from 'html-escaper';
escape('string');
unescape('escaped string');
为什么
基本上只有一个规则: 永远 如果您正在将字符串转换为另一个字符, 则替换一个又一个字符.
// WARNING: THIS IS WRONG
// if you are that kind of dev that does this
function escape(s) {
return s.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/'/g, "'")
.replace(/"/g, """);
}
// you might be the same dev that does this too
function unescape(s) {
return s.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/'/g, "'")
.replace(/"/g, '"');
}
// guess what we have here ?
unescape('&lt;');
// now guess this XSS too ...
unescape('&lt;script&gt;alert("yo")&lt;/script&gt;');
最后一个例子将产生 <script>alert("yo")</script> 而不是预期 <script>alert("yo")</script>。 。 。 .
如果我们一次抓住所有的花花公子,不管怎样,都不可能发生这种事.
交换之后的幸运情况 & 与 & 没有其他替代品会受到影响, 但这不是可移植和普遍不良的做法.
立刻抓住所有的魅力,别找借口!
更多细节
可能有人认为是 unescape 只有问题,它不是。 作为具有副作用的反战者,双管齐下.
例如,改变替换者逃跑的顺序会产生出乎意料的情况:
function escape(s) {
return s.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/'/g, "'")
.replace(/"/g, """)
.replace(/&/g, "&");
}
escape('<'); // &lt; instead of <
如果我们不想用担心命令不完美或者我们逃出或逃出的命令与使用的另一种方法或功能的顺序不同来编码,如果我们理解这个问题,并且我们同意这是一个可能发生灾难的方法,如果我们在本案中添加事实,每次创建4个RegExp对象,并引用4次的话 .replace 通过 String.prototype 也有可能比创建一个仅持有一个对象的函数,或者也拥有该函数慢,我们应当同意,没有任何绝对合理的理由继续提出逐个执行.
我们有证据可以证明这个方法已经失败了 所以... 我们为什么要冒险? 立即避开并抓取所有字符 或只是使用这个小小的工具.
反键
实习探险家 < 9 有 一些后退问题
为了与普通服务器-侧HTML实体的编码器和解码器兼容,为了拥有最可靠的I/O,这个小功能不会解决这个IE < 9问题.
还必须指出的是,如果我们创建有效的HTML,并且我们通过这个工具在运行时设置属性,字符串中的回击不可能影响属性行为.
var img = new Image();
img.src = html.escape(
'x` `<script>alert(1)</script>"` `'
);
// it won't cause problems even in IE < 9
不过,如果使用 innerHTML 然后瞄准 IE < 9 这个 可能会 是个问题。 。 。 .
因此,如果你需要更多的字符和(或)回击才能逃脱和逃脱,可以自由地使用替代品,例如: 摇篮 或者说 他的电话
再来一点 我的邮箱 和为什么我没有 执行同样的事情 替代品做了。 好消息:这些都是替代办法;-)