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

标签 php html mysql markdown htmlpurifier

我正在开发一个迷你博客,它允许用户使用 WYSIWYG 编辑器向网站添加帖子,因此我会将这篇帖子存储在我的数据库中。

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

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

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

最佳答案

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

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

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

关于php - 在 mysql 数据库中存储 HTML 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139041/

相关文章:

php - 如何在一次执行中进行多个sql查询

php - 对 array_values 的误解

javascript - 如何在用户执行 "scroll"或 "touch"或 "Click"事件时关闭移动 View 中的侧边栏

html - 我可以使用 CSS 内容和计数器向我的网格添加自定义标签吗?

jquery - 我如何使用 jQuery 创建一个书签哈希?

mysql - 以复杂的方式组合两个表

Python mysql.connector - cursor.execute("WHERE ....) 返回 NoneType

php - 使用 php cron 脚本花费时间进行电子商务门户的数据库更新

php - 我可以在 Guzzle 的路由文件中指定 Accept 和 Content-Type header 吗?

mysql - 从 Mysql 查询中过滤整数结果