是否有任何标准来验证php中的用户输入?


Is there any standard to validate user input in php?

我发现到处都是"永远不要(永远)相信外国输入"。它们要求验证每个用户输入。但我不确定我应该验证什么。如果用户输入任何恶意代码,是否有任何标准来验证用户输入?实际上,我想知道这个恶意代码可能是什么以及如何验证?

在做了一点研究之后,我发现了一个标准的password.php用于密码验证,FILTER_VALIDATE_EMAIL用于电子邮件,FILTER_VALIDATE_URL用于url验证。但对于其他输入表单,如姓名、文本区、电话号码、用户名等,是否有任何标准来验证?

应该根据业务规则验证输入(电子邮件验证就是这种情况)。您应该根据您的输出媒体转义输出-当您向浏览器发送数据时,您正在转义HTML,当您向数据库发送数据时,您正在转义db特定字符,等等

一切都需要根据您的项目和用例需求进行验证。
在原生PHP中没有标准的完美的验证解决方案。您可以使用优秀的Zend验证器集合(即使没有Zend) http://framework.zend.com/manual/1.12/en/zend.validate.set.html
这是一个很好的选择,因为它们真的很强大,并且包含了您现在和将来需要的所有内容。

No。没有验证用户输入的标准。

每个单独的值必须单独验证,基于它的意义和未来的使用。

不要混淆验证和清理。前面的答案都很好,但我想指出的是,验证应该在需要特定格式的用户输入时进行。电子邮件是电子邮件,所以你可以发送电子邮件到一个有效的电子邮件地址(尽管地址不一定是一个有效的地址)。数字是数字,所以输入可以毫无问题地插入数据库的integer/float列。

一些验证任务还有助于保持数据库/应用程序(如验证整数)的安全。但是如何验证免费文本、电话号码、邮政地址等?大多数情况下,您需要对这种输入进行清理。转义特殊字符或确保用户的恶意DELETE *类型的输入不被执行。

也指那些喜欢验证(而不是消毒)电话号码、邮政地址等的人。互联网是全球性的(废话,真的…)不要急于根据您所在国家的格式规则使用过于严格的验证规则来限制用户输入。作为一个土生土长的芬兰人,我在很多场合遇到过严格的格式规则非常烦人的情况,有时它们也导致无法提供正确的信息,因为编码员认为他已经非常聪明地定义了严格的格式,必须是正确的地址格式,因为这是他的地址的正确格式。