问题:在 MySQL 中存储 html 的 100% 安全方式 [关闭]

我正在开发一个项目,允许公众(所以每个人)通过 TinyMCE 为他们自己的项目页面插入 HTML。由于每个人都可以使用此功能,因此我需要一种 100% 安全的方式将 TinyMCE 输出插入到我的数据库中,并在用户插入时将其显示在另一个页面上。

XSS、SQL 注入和所有其他垃圾都不是我想要的新网站!我可以做 htmlentities -> htmlspecialchars,然后再使用 htmlentities_decode,但这 100% 安全吗?这是最好的方法吗?

解答

在大多数情况下,使用准备好的语句很容易避免 SQL 注入。

如果您打算允许用户发布 HTML 标记,则 XSS 会更加困难。您需要删除所有<script>标签、标签中的所有on*属性、所有javascript:url,即使这样也不能完全保证输入 HTML 安全。有诸如HTMLPurifier之类的库可以提供帮助,但只要您允许 HTML,您就有可能让恶意软件通过。

您可以使用实现诸如降价或 wikitext 之类的库。这严重限制了用户可以输入的内容,同时仍然让他们在一定程度上标记内容。它不是万无一失的(人们仍然可以发布指向恶意网站的链接并希望用户点击它们,有些人会天真地实际这样做),如果没有某种类型,您将无法使用诸如 TinyMCE 之类的富编辑器插件,但是清理markdown比清理HTML要简单得多。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐