HTML 清理器 API

Avatar of Chris Coyier
Chris Coyier on

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

为 (草案阶段) 清理器 API 的进展欢呼三声! 这是大家都知道的,你不能信任用户输入。 事实上,我曾经参与的每个应用程序都处理过恶意用户试图在不应出现的地方插入和执行恶意代码的情况。

清理用户输入(在页面上再次使用之前,或存储,或在服务器端使用)是 Web 开发人员的工作。 这通常使用我们自己的代码或从外部引入的库来完成。 我们可以编写一个正则表达式来删除任何看起来像 HTML(或类似)的东西,这存在着错误的风险,而且恶意用户可能会找到绕过我们代码的方法。

我们可以让浏览器来做,而不是使用用户空间库或我们自己处理它。

// some function that turns a string into real nodes
const untrusted_input = to_node("<em onclick='alert(1);'>Hello!</em>");

const sanitizer = new Sanitizer();
sanitizer.sanitize(untrusted_input);  // <em>Hello!</em>

然后让它随着时间的推移继续成为浏览器的责任。 正如 草案报告 中所说

浏览器非常了解何时要执行代码。 通过教会浏览器如何以安全的方式从任意字符串渲染 HTML,并且以一种更有可能随着浏览器自身的解析器实现的变化而维护和更新的方式进行,我们可以改进用户空间库。

这种事情是 Web 标准的最佳体现。 发现人们不得不做的事情(令人讨厌和/或危险),然后介入使它更安全、更快、更好。

直接链接 →