输入清理VS验证

时间:2013-07-04 15:08:32

标签: php

我已经使用php(以及前端的js)对我的所有输入数据实现了输入验证。我在哪里打字,验证像正则表达式的电子邮件之类的东西,确保下拉值只是我期待的那些,并且在许多情况下我只期望一个字符串我有一个运行只允许的正则表达式字母,数字和空格。任何不符合这些规则的内容都会导致表单验证失败,并且不会运行任何SQL查询。

如果说我的表单通过验证,我假设输入到我的数据库(我正在通过pdo进行)然后在输出时转义是安全的。

所以说这就是为什么我需要输入消毒?

2 个答案:

答案 0 :(得分:7)

如果您在服务器端验证非常严格,则无需进行整理。例如。验证/ ^ [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

答案 1 :(得分:3)

你需要两者。验证输入数据很容易在客户端进行,但对于那些不会试图攻击您的合法用户来说它非常有用。 在将数据放入数据库之前,清理数据(所有数据,无论是输入数据还是您认为应该能够信任的数据库)。

即使您100%信任您的验证并在服务器端(理论上,人们不应该弄乱数据),它仍然值得使用某种形式的消毒,因为这是一个很好的习惯。