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