在PHP中如何判断一个字符串是否已经通过htmlentities传递?它需要html_entity_decode?
How to tell if a string has been passed through htmlentities in PHP? And it needs html_entity_decode?
我们在通过 htmlentities
方法传递数据后将其保存在我们的数据库中,以避免任何注入攻击
并且在使用它的同时,我们 html_entity_decode
来取回原始值。在我们的代码中的某些情况下,由于我们的保存技术(很难解释),htmlentities
对同一块数据执行了 2-3 次。所以我们基本上想避免多次编码相同的字符串。
是否有可靠的方法来检测字符串是否已经通过 htmlentities
方法传递?
我想一种方法是检查编码字符串中的 "
之类的东西,但还有更可靠的方法吗?任何仅告诉我字符串是否已编码的内置方法?
我们正在使用 Laravel,也许其中的辅助方法可以帮助我们?
IMO 从根本上说这是错误的方法。存储原始数据,因为它来了。虽然它在数据库中,但它不会对您造成任何伤害。
仅当您正要将其放入 HTML 文档时才通过 htmlentities
传递它 - 因为这是它可能存在危险的唯一上下文。
这将保存所有编码和解码 - 您只需根据需要按需编码即可。
正如 ADyson 所提到的,您在整个系统中处理数据的方式不正确。
Laravel 的模板引擎“Blade”会自动通过 htmlspecialchars()
发送您的变量以防止 XSS 攻击。
Blade {{ }}
statements are automatically sent through PHP's htmlspecialchars
function to prevent XSS attacks.
这将保护您的站点免受潜在的 XSS 攻击,而无需在 运行 INSERT
/SELECT
查询数据库时 encode/decode 您的数据。
假设您正在使用 Laravel 的内置 DB Builder / Eloquent,您的 SQL 查询也是 protected automatically:
The Laravel query builder uses PDO parameter binding to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.
我们在通过 htmlentities
方法传递数据后将其保存在我们的数据库中,以避免任何注入攻击
并且在使用它的同时,我们 html_entity_decode
来取回原始值。在我们的代码中的某些情况下,由于我们的保存技术(很难解释),htmlentities
对同一块数据执行了 2-3 次。所以我们基本上想避免多次编码相同的字符串。
是否有可靠的方法来检测字符串是否已经通过 htmlentities
方法传递?
我想一种方法是检查编码字符串中的 "
之类的东西,但还有更可靠的方法吗?任何仅告诉我字符串是否已编码的内置方法?
我们正在使用 Laravel,也许其中的辅助方法可以帮助我们?
IMO 从根本上说这是错误的方法。存储原始数据,因为它来了。虽然它在数据库中,但它不会对您造成任何伤害。
仅当您正要将其放入 HTML 文档时才通过 htmlentities
传递它 - 因为这是它可能存在危险的唯一上下文。
这将保存所有编码和解码 - 您只需根据需要按需编码即可。
正如 ADyson 所提到的,您在整个系统中处理数据的方式不正确。
Laravel 的模板引擎“Blade”会自动通过 htmlspecialchars()
发送您的变量以防止 XSS 攻击。
Blade
{{ }}
statements are automatically sent through PHP'shtmlspecialchars
function to prevent XSS attacks.
这将保护您的站点免受潜在的 XSS 攻击,而无需在 运行 INSERT
/SELECT
查询数据库时 encode/decode 您的数据。
假设您正在使用 Laravel 的内置 DB Builder / Eloquent,您的 SQL 查询也是 protected automatically:
The Laravel query builder uses PDO parameter binding to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.