在 mysql 数据库中存储 HTML 的最佳实践

Best practice for storing HTML in mysql DB

我正在开发一个迷你博客,它允许用户使用所见即所得的编辑器向站点添加 post,因此我将把这个 post 存储在我的数据库中。

研究了 markdown 我得出的结论是它不适合我的目的,因为我需要上传本地视频,这就是为什么我现在计划将所见即所得编辑器中的 HTML 存储到我的数据库中。

然而,我确实对 SQL 注入和 XSS 攻击有些担忧,但是我研究了一种解决方案,即 HTML 净化器。

如果我使用 HTML 净化器去除不需要的 HTML 标签,那么这是将 HTML 存储在我的数据库中的安全解决方案吗?

您可以将 html 存储在 sql 中...但请先转义它们。

请参阅此处示例...

http://php.net/manual/en/function.html-entity-decode.php

在数据库中存储 HTML 本质上并不安全,就像存储纯文本本质上不安全一样。 SQL 注入的风险可以通过使用准备好的语句和适当的占位符来减轻。转义既不是必需的,也不是防止 SQL 注入的最佳实践。准备好的语句是。

相反,XSS 和其他 HTML 相关的漏洞与数据库无关,而与向来自不受信任来源的查看器呈现 HTML 有关。如果 HTML 只是存储在文件中,根本没有数据库,那么同样的漏洞也会存在,因此没有必要保护数据库免受恶意 HTML 的侵害。数据库对存储的 HTML 内容中包含的内容一无所知或易受攻击,因为它不会再次呈现或解释 HTML...,只要您的数据库交互使用准备好的语句。没有可接受的理由来避免这些。

把这一点夸大到极端,将包含病毒的文件作为 blob 存储在数据库中是绝对安全的,因为数据库不会将存储在其中的数据作为代码执行。该漏洞将针对下载这些病毒的用户。