我已经使用 php(以及前端的 js)对所有输入数据实现了输入验证。我尽可能地进行类型转换,根据正则表达式验证诸如电子邮件之类的内容,确保下拉值只是我期望的值,而且在许多情况下我只期望一个字符串我有一个运行的正则表达式只允许字母、数字和空格。任何不符合这些规则的行为都会导致表单验证失败,并且不会运行任何 sql 查询。
话虽如此,如果我的表单通过验证,我会假设输入到我的数据库(我正在通过 pdo 执行)是安全的,然后在输出时进行转义。
那么为什么我需要输入清理?
最佳答案
如果你有非常严格的服务器端验证,你不需要 sanitizer 。例如。根据/^[a-z0-9]{5,25}$/验证字符串不需要任何清理(删除非字母数字字符没有任何意义,因为它们无论如何都不应该通过)。
只需确保您可以验证所有数据,如果这是不可能的(例如,对于 html,它往往有点困难),您可以使用转义策略或 html 净化器之类的东西。
有关 XSS 预防的转义策略的概述: 见https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
了解不同的安全威胁: https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet
关于php - 输入清理 VS 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473586/