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

Php 在mysql数据库中存储HTML的最佳实践,php,html,mysql,markdown,htmlpurifier,Php,Html,Mysql,Markdown,Htmlpurifier,我正在写一个迷你博客,它允许用户使用所见即所得编辑器向网站添加帖子,因此我将把这篇帖子存储在我的数据库中 通过研究降价,我得出结论,这不适合我的目的,因为我需要上传本地视频,这就是为什么我现在计划将所见即所得编辑器中的HTML存储到我的数据库中 然而,我确实对SQL注入和XSS攻击有一些担心,但是我研究了一种解决方案,即HTML净化器 如果我使用HTML净化器删除不需要的HTML标记,那么这是在我的数据库中存储HTML的安全解决方案吗?您可以在sql中存储HTML。。。但首先要逃离他们 请看这里

我正在写一个迷你博客,它允许用户使用所见即所得编辑器向网站添加帖子,因此我将把这篇帖子存储在我的数据库中

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

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


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

您可以在sql中存储HTML。。。但首先要逃离他们

请看这里的示例


您可以在sql中存储html。。。但首先要逃离他们

请看这里的示例


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

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


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

在数据库中存储HTML并非本质上不安全,正如存储纯文本本质上不安全一样。通过使用准备好的语句和适当的占位符,SQL注入的风险可以大大降低。转义既不是必要的,也不是防止SQL注入的最佳实践。准备好的声明是

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


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

只要您安全地插入数据(即带有参数绑定的准备语句),我想说它可能足够安全,但这只是我对这个主观问题的看法。您可以使用有限版本的WYSIWYG编辑器,还可以使用strip_tags PHP函数只允许一些HTML标记。为了防止SQL注入,您必须以适当的方式替换值,或准备语句。我明白这显然是一个主观问题,但在这种情况下(Markdown不支持本地视频嵌入),将HTML存储在数据库中并正确净化它是否被视为最佳做法?我不会存储HTML,这只是自找麻烦。你如何确定你已经过滤了所有潜在的危险标签?我会坚持为文本内容存储降价,并找到另一种附加视频的方法。例如,发明你自己的标记语法来嵌入视频,然后当你的应用程序呈现内容时,替换原始html标记(以安全的方式)来嵌入视频。标记也允许原始html。谢谢你的意见。由于WYSIWYG编辑器输出HTML,如果我去除标记并净化,然后将其转换为标记(添加我自己的自定义视频标记语法),这将是实现我想要的更安全和“更好的实践”方式。感谢所有的评论,我只是想弄清楚pros将如何处理这种情况。只要您安全地插入数据(即带有参数绑定的准备语句),我想说它可能足够安全,但这只是我对这个主观问题的看法。您可以使用有限版本的WYSIWYG编辑器,还可以使用strip_tags PHP函数只允许一些HTML标记。为了防止SQL注入,您必须以适当的方式替换值,或准备语句。我明白这显然是一个主观问题,但在这种情况下(Markdown不支持本地视频嵌入),将HTML存储在数据库中并正确净化它是否被视为最佳做法?我不会存储HTML,这只是自找麻烦。你如何确定你已经过滤了所有潜在的危险标签?我会坚持为文本内容存储降价,并找到另一种附加视频的方法。例如,发明你自己的标记语法来嵌入视频,然后当你的应用程序呈现内容时,替换原始html标记(以安全的方式)来嵌入视频。标记也允许原始html。谢谢你的意见。由于WYSIWYG编辑器输出HTML,如果我去除标记并净化,然后将其转换为标记(添加我自己的自定义视频标记语法),这将是实现我想要的更安全和“更好的实践”方式。谢谢你的评论,我是朱