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