在输出之前过滤 TinyMCE javascript
Filtering TinyMCE javascript before outputting
我在文本区域上使用 TinyMCE,该文本区域在服务器端提交并存储在数据库中。我在数据库中的一个示例可能是:
<p><script>console.log("mce");</script></p>
所以,javascript 已经转义了。我的问题是,如果恶意用户绕过 TinyMCE 并仅在 textarea 中提交未转义 javascript 的原始数据怎么办?
当其他用户需要显示时,我如何安全输出?我不能使用 htmlspecialchars,因为我想要 html 内容本身。我可以手动检查服务器端 (Laravel) 是否有任何 <script></script
标记并重写这些,但是内联 javascript?
呢?
您永远不能假设提供给您客户端的数据是 "clean" 或 "safe"。正如您正确推测的那样,不法分子可以绕过您的前端及其所有验证。
您应该始终适当地配置您的前端。验证数据,将 TinyMCE 配置为仅允许您要创建的那些类型的标签等。
但是,无论前端设计如何,您始终必须重新检查服务器上提交的内容以确保安全。根本无法满足这种需求。
您可以使用许多不同的库来在服务器端执行此类 validation/cleansing,包括对原始 post 的评论中提到的 HTML Purifier。
我在文本区域上使用 TinyMCE,该文本区域在服务器端提交并存储在数据库中。我在数据库中的一个示例可能是:
<p><script>console.log("mce");</script></p>
所以,javascript 已经转义了。我的问题是,如果恶意用户绕过 TinyMCE 并仅在 textarea 中提交未转义 javascript 的原始数据怎么办?
当其他用户需要显示时,我如何安全输出?我不能使用 htmlspecialchars,因为我想要 html 内容本身。我可以手动检查服务器端 (Laravel) 是否有任何 <script></script
标记并重写这些,但是内联 javascript?
您永远不能假设提供给您客户端的数据是 "clean" 或 "safe"。正如您正确推测的那样,不法分子可以绕过您的前端及其所有验证。
您应该始终适当地配置您的前端。验证数据,将 TinyMCE 配置为仅允许您要创建的那些类型的标签等。
但是,无论前端设计如何,您始终必须重新检查服务器上提交的内容以确保安全。根本无法满足这种需求。
您可以使用许多不同的库来在服务器端执行此类 validation/cleansing,包括对原始 post 的评论中提到的 HTML Purifier。