在mysql DB中存储HTML的最佳实践

时间:2019-01-11 01:03:49

标签: php html mysql markdown htmlpurifier

我正在制作一个迷你博客,该博客允许用户使用所见即所得(WYSIWYG)编辑器将帖子添加到站点,因此我会将其存储在数据库中。

在研究了Markdown之后,我得出的结论是它不合适,因为我需要上传本地视频,这就是为什么我现在打算将WYSIWYG编辑器中的HTML存储到数据库中的原因。

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

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

2 个答案:

答案 0 :(得分:1)

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

相反,XSS和其他与HTML相关的漏洞与数据库无关,而与从不受信任的来源向查看者呈现HTML无关。如果将HTML仅存储在文件中而根本没有数据库,则将存在相同的漏洞,因此无需保护数据库免受恶意HTML的侵害。数据库不了解存储的HTML内容中包含的内容,也不知道该漏洞是什么,因为只要您的数据库交互使用准备好的语句,它就不会再次呈现或解释HTML...。没有可以避免的合理理由。

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

答案 1 :(得分:0)

您可以将html存储在sql中...但是先将其转义。

在此处查看示例...

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