如何在允许格式化的JavaScript编辑器中处理清理

时间:2017-11-05 02:13:12

标签: javascript html security editor sanitize

许多像Medium这样的编辑器现在提供格式化。从我在DOM中看到的,它只是添加HTML。但是,如何在不丢失用户应用格式的情况下清理此类输入?

E.g。点击粗体添加:

<strong class="markup--strong markup--p-strong">text</strong>

但如果用户自己输入,则不想渲染。那有什么不同呢?如果您使用markdown进行样式,但也不允许用户输入自己的markdown但只能通过浏览器访问它,那也会有所不同吗?

我能想到的一种方法是,逃避每个HTML特殊字符,但这看起来很奇怪。据我所知,只有在输出内容时才对内容进行消毒

2 个答案:

答案 0 :(得分:3)

如Vipin所述,您应该使用服务器端消毒剂,因为客户端验证很容易被篡改。 OWASP(开放式Web应用程序安全项目)有一些指南和清洁剂,您可以使用它们像java-html-sanitizer。

有关该概念的通用简介,请阅读Sanitize部分下的https://www.owasp.org/index.php/Data_Validation

答案 1 :(得分:1)

您可以将列出白名单的元素替换为其他字符,例如:

<strong.*> becomes |strong|

然后删除所有其他HTML。注意onmouseover =&#34; alert(1)&#34;所以保持简单。

渲染用户输入时也要小心。不要只是将其添加为代码。而是解析它并使用JavaScript创建元素。永远不要使用innerHTML,但要使用.innerText和document.createElement()。