我正在开发一个项目,其中我使用内容可编辑的div和库,medium.js 但这并不能阻止脚本注入。 什么是防止将任何类型的脚本注入我的div的最佳方法?
答案 0 :(得分:1)
我假设您将编辑过的信息发送到服务器,将其存储在数据库中,以便以后在网站中保存和呈现?并且您希望允许用户在其输入中使用某些HTML代码?
在这种情况下,您需要实施一个" HTML清洁剂"服务器端。对于PHP有HTMLPurifier,对于Python有Bleach,Ruby有sanitize module。这些只是一些例子,还有更多,你也可以(小心!)编写自己的洗手液。清洁剂过滤字符串,因此只有纯文本和HTML标签&属性输入数据库,没有任何脚本函数。有关最佳方法可能适用于您的建议,请参阅Wikipedia - HTML Sanitization。
在编辑内容时使用Javascript过滤是不够的,因为攻击者可以通过分析您的网站直接将内容发布到您的服务器,将代码留在您的数据库中。
然而,您可以在数据库中允许它并在提供内容时进行清理(因此它永远不会显示),但最好在提交时将其过滤掉。如果要清理要显示的HTML客户端,可以使用Google Caja库之类的内容。如果您采用该路径,请确保在实施不同的前端时清理数据库中的内容。
其他选项可能是完全禁用HTML输入(仅允许文本,剥离所有标记)。或者实现流行的Markdown语法,如StackExchange网站和Reddit等热门网站。旧的BBcode方法在PHP中始终是一个选项,并且作为论坛上的富文本输入方法,它仍然非常流行。
答案 1 :(得分:0)
更新div上的textContent
属性,而不是innerHTML
。您目前如何让用户编辑div的内容?你能发一些代码吗?