Php 插入到数据库之前的htmlentities

Php 插入到数据库之前的htmlentities,php,security,xss,Php,Security,Xss,我想让我的网站免受XSS攻击 我有一个模块,允许用户将文本(带有特殊字符)插入数据库。此文本显示在起始页上 现在我的问题是:在将userinput插入数据库之前,我应该使用htmlentities($\u POST[“userinput”],ENT\u引号,'UTF-8') 或者我可以直接将userinput插入数据库,并用htmlentities显示它吗?一些人认为应该针对输入和输出中的XSS进行清理。我觉得这真的不是很有价值。首先,只有在输出时才真正重要,因为这就是您试图缓解的漏洞所在。在我

我想让我的网站免受XSS攻击

我有一个模块,允许用户将文本(带有特殊字符)插入数据库。此文本显示在起始页上

现在我的问题是:在将userinput插入数据库之前,我应该使用
htmlentities($\u POST[“userinput”],ENT\u引号,'UTF-8')


或者我可以直接将userinput插入数据库,并用
htmlentities
显示它吗?

一些人认为应该针对输入和输出中的XSS进行清理。我觉得这真的不是很有价值。首先,只有在输出时才真正重要,因为这就是您试图缓解的漏洞所在。在我看来,任何依赖于将来自数据库的内容视为可信输入的解决方案都是失败的

问题是,在接下来的某个时候,您(或您之后的人)可能会决定需要以不同的方式插入数据—一些外部API—谁知道呢。关键是,现在页面中存在安全漏洞,因为您决定信任数据库中的数据

反对在《我的出路》和《我的出路》中这样做的理由分为两部分:

  • 你没有增加任何额外的安全性,所以你实际上只是让人们觉得它是安全的两倍——这不是我们想要创造的感觉。我们想证明某些东西是安全的,而不仅仅是让它感觉双重安全

  • 您还可能编写一个错误,使原始数据出错。如果在渲染时发生这种情况,那也没什么大不了的,因为您可以修复它并正确地显示它。如果在存储数据时发生,则该数据是不可恢复的


  • 有些人认为,应该针对输入和输出上的XSS进行清理。我觉得这真的不是很有价值。首先,只有在输出时才真正重要,因为这就是您试图缓解的漏洞所在。在我看来,任何依赖于将来自数据库的内容视为可信输入的解决方案都是失败的

    问题是,在接下来的某个时候,您(或您之后的人)可能会决定需要以不同的方式插入数据—一些外部API—谁知道呢。关键是,现在页面中存在安全漏洞,因为您决定信任数据库中的数据

    反对在《我的出路》和《我的出路》中这样做的理由分为两部分:

  • 你没有增加任何额外的安全性,所以你实际上只是让人们觉得它是安全的两倍——这不是我们想要创造的感觉。我们想证明某些东西是安全的,而不仅仅是让它感觉双重安全

  • 您还可能编写一个错误,使原始数据出错。如果在渲染时发生这种情况,那也没什么大不了的,因为您可以修复它并正确地显示它。如果在存储数据时发生,则该数据是不可恢复的


  • 你不应该操纵原始数据。最好在处理数据时进行操作,例如在屏幕上显示数据或进行计算时。脚本只是将用户输入插入数据库。在另一个站点上,将显示此用户输入->不在其上工作。那么,输出的htmlentities是安全的吗?我不知道您的具体计划,但无论是什么数据,您都应该始终希望跟踪原始数据。因此,我建议您在显示它时使用
    htmlentities
    。还要确保这里的所有内容都是UTF-8,以及数据库中的存储,因为其他特殊字符可能不清楚。这可以通过使用
    utf8\u encode
    和/或
    utf8\u decode
    来解决,但显然最好确保设置正确。您不应该操纵原始数据。最好在处理数据时进行操作,例如在屏幕上显示数据或进行计算时。脚本只是将用户输入插入数据库。在另一个站点上,将显示此用户输入->不在其上工作。那么,输出的htmlentities是安全的吗?我不知道您的具体计划,但无论是什么数据,您都应该始终希望跟踪原始数据。因此,我建议您在显示它时使用
    htmlentities
    。还要确保这里的所有内容都是UTF-8,以及数据库中的存储,因为其他特殊字符可能不清楚。这可以通过使用
    utf8\u encode
    和/或
    utf8\u decode
    来解决,但显然最好确保设置正确。我有UTF-8的问题。当我将htmlentities数据插入数据库时,我会得到数据库中特殊字符的代码。如果我尝试输出它们,我会再次得到这些代码。我不想用特殊字符替换每个代码,但我想如果我想“安全性加倍”,我想你可以在插入时不编码数据,而只在显示数据时才这样做。这是我想传达的想法,至少我有UTF-8的问题。当我将htmlentities数据插入数据库时,我会得到数据库中特殊字符的代码。如果我尝试输出它们,我会再次得到这些代码。我不想用特殊字符替换每个代码,但我想如果我想“安全性加倍”,我想你可以在插入时不编码数据,而只在显示数据时才这样做。这就是我想表达的想法。