插入数据库之前的 htmlentities
htmlentities before inserting to database
我想让我的网站免受 XSS 攻击。
我有一个模块允许用户将文本(带有特殊字符)插入数据库。此文本显示在起始页上。
现在我的问题是:我应该在将用户输入插入数据库之前使用 htmlentities($_POST["userinput"], ENT_QUOTES, 'UTF-8')
吗?
或者我可以将用户输入直接插入数据库并用 htmlentities
显示吗?
有些人认为您应该对输入 和 输出进行 XSS 清理。我认为这不是真的很有价值。其一,只有在输出时才真正重要,因为这是您试图缓解的漏洞存在的地方。在我看来,任何依赖于将来自数据库的内容视为可信输入的解决方案都是错误的。
问题是在某个地方,您(或您之后的人)可能会决定他们需要以不同方式插入数据 - 一些外部 API - 谁知道呢。关键是,现在您的页面中存在安全漏洞,因为您决定信任来自数据库的数据。
在中反对在途中这样做的论点和我的出路分为两部分:
你没有增加任何额外的安全性,所以你真的只是让人们感觉它是安全的两倍 - 这不是我们的感觉曾经想创造。我们想证明某些东西是安全的,而不仅仅是让它感觉 double 安全。
您也可以编写一个错误来破坏原始数据。如果在渲染它时发生这种情况,那没什么大不了的,因为您可以修复它并正确显示它。如果在存储时发生这种情况,则该数据将无法恢复。
我想让我的网站免受 XSS 攻击。
我有一个模块允许用户将文本(带有特殊字符)插入数据库。此文本显示在起始页上。
现在我的问题是:我应该在将用户输入插入数据库之前使用 htmlentities($_POST["userinput"], ENT_QUOTES, 'UTF-8')
吗?
或者我可以将用户输入直接插入数据库并用 htmlentities
显示吗?
有些人认为您应该对输入 和 输出进行 XSS 清理。我认为这不是真的很有价值。其一,只有在输出时才真正重要,因为这是您试图缓解的漏洞存在的地方。在我看来,任何依赖于将来自数据库的内容视为可信输入的解决方案都是错误的。
问题是在某个地方,您(或您之后的人)可能会决定他们需要以不同方式插入数据 - 一些外部 API - 谁知道呢。关键是,现在您的页面中存在安全漏洞,因为您决定信任来自数据库的数据。
在中反对在途中这样做的论点和我的出路分为两部分:
你没有增加任何额外的安全性,所以你真的只是让人们感觉它是安全的两倍 - 这不是我们的感觉曾经想创造。我们想证明某些东西是安全的,而不仅仅是让它感觉 double 安全。
您也可以编写一个错误来破坏原始数据。如果在渲染它时发生这种情况,那没什么大不了的,因为您可以修复它并正确显示它。如果在存储时发生这种情况,则该数据将无法恢复。