我在文本区域上使用TinyMCE,该区域在服务器端提交并存储在数据库中。我在数据库中拥有的示例可能是:
<p><script>console.log("mce");</script></p>
因此,javascript已被转义。我的问题是,如果恶意用户绕过TinyMCE,而只是使用未转义的javascript在textarea中提交原始数据,该怎么办?
当另一个用户需要显示此内容时,如何安全输出?我不能使用htmlspecialchars,因为我想要html内容本身。我可以手动检查服务器端(Laravel)是否有任何<script></script
标记并重写它们,但是内联javascript呢?
答案 0 :(得分:2)
您永远不能假定提供给您客户端的数据是“干净的”或“安全的”。正如您正确地推测的那样,邪恶的人可以绕过您的前端及其所有验证。
您应该始终正确配置前端。验证数据,将TinyMCE配置为仅允许您要创建的那些类型的标签,等等。
但是,无论前端设计如何,为了安全起见,始终必须在服务器上重新检查提交的内容。根本无法解决这种需求。
服务器端可以使用许多不同的库来进行这种验证/清除,包括原始帖子的注释中提到的HTML Purifier。