HTML 清理程序 API
阅读评论
对(草案阶段)清理程序 API 的进展欢呼三声! 众所周知,你不能信任用户输入。 事实上,我参与过的每个应用程序都处理过试图在不应该执行的地方执行恶意代码的恶意行为者。
网页开发人员的工作是在用户输入再次用于页面(或存储或用于服务器端)之前清理它。 这通常使用我们自己的代码或帮助下载的库来完成。 我们可能会编写一个正则表达式来删除任何看起来像 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 来改进用户空间库,并且以更有可能随着浏览器自己的解析器实现的变化而维护和更新的方式来做到这一点。
这种事情是网络标准的最佳体现。 发现很多人都必须做的事情令人讨厌(而且/或者危险),并且介入以使其更安全、更快、更好。