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

8
许多编辑器(例如Medium)现在提供格式化功能。从我在DOM中看到的内容来看,它只是添加HTML。但是,如何在不丢失用户应用的格式化的情况下对这种类型的输入进行清理?例如,点击加粗会添加文本,但您不希望用户自己输入该标记。那么这有什么区别?如果使用Markdown进行样式设置,并且不允许用户输入其自己的Markdown而只能通过浏览器访问它,那么会有什么不同?
我想到的一种方法是转义每个HTML特殊字符,但这似乎很奇怪。据我所知,只有在输出内容时才对其进行清理。

你需要找到源码 - 所以具体来说,你是在指媒介?使用开发工具查找JavaScript中被输出的位置,然后将其转移。 - Coastal-Cam
2个回答

3
您应该使用服务器端的清洗器,正如Vipin所说,客户端验证很容易被篡改。OWASP(Open Web Application Security Project)有一些指南和清洗器供您使用,例如java-html-sanitizer。
有关该概念的通用简介,请阅读此https://www.owasp.org/index.php/Data_Validation下的Sanitize部分。

1
你可以用其他字符替换白名单元素,例如:
<strong.*> becomes |strong|

然后删除所有其他HTML。注意onmouseover="alert(1)",因此保持简单。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接