我发现这一切的所有地方“永远不会(永远)信任外国投入”。他们要求验证每个用户输入。但我不确定我应该验证什么。如果用户输入任何恶意代码,是否有任何标准来验证用户输入?实际上我想知道这个恶意代码可能是什么以及如何验证?
经过一番研究后,我找到了一个标准的password.php用于密码验证,FILTER_VALIDATE_EMAIL
用于电子邮件,FILTER_VALIDATE_URL
用于网址验证。但对于其他输入形式,如姓名,textarea,电话号码,用户名等,是否有任何标准可以验证?
答案 0 :(得分:3)
您应该根据业务规则验证输入(电子邮件验证就是这种情况)。 您应该根据输出媒体转义输出 - 当您向浏览器发送数据时,您正在转发HTML,当您发送到数据库时 - 您正在转发数据库特定字符等。
答案 1 :(得分:2)
根据您的项目和用例需求,一切都需要验证
在本机PHP中没有完整的完美验证解决方案
您可以使用优秀的 Zend验证器集合(即使没有Zend)http://framework.zend.com/manual/1.12/en/zend.validate.set.html
这是一个不错的选择,因为它们非常强大,包含您现在所需的一切以及将来所需的一切。
答案 2 :(得分:1)
没有。验证用户输入没有标准。
每个单值必须根据其含义和未来用途单独验证。
答案 3 :(得分:0)
不要将验证与清理混淆。以前的答案都非常好,但我只想指出,当您需要用户输入特定格式时,应进行验证。电子邮件是电子邮件,因此您可以将电子邮件发送到有效的电子邮件地址(尽管该地址不一定是活动地址)。数字是数字,因此输入可以毫无问题地插入到数据库的integer
/ float
列中。
某些验证任务还有助于保持数据库/应用程序(如验证整数)的安全。但如何验证自由文本,电话号码,邮政地址等?这种输入你需要在大多数时间消毒。转义特殊字符或确保用户的恶意DELETE *
类型的输入无法执行。
对于那些喜欢验证(不消毒)电话号码,邮政地址等的人来说也是一句话。互联网是全球性的(真的,真的......)。不要太急于根据您所在国家的格式规则使用过于严格的验证规则来限制用户输入。作为一个土生土长的芬兰人,我有很多场合严格的格式化规则非常烦人,有时他们也无法提供正确的信息,因为编码器认为他更加聪明,定义了严格的格式,必须是一个正确的地址格式,每个人都因为这是他的地址的正确格式。