Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中验证和清理用户输入_Php_Input Sanitization_Input Filtering - Fatal编程技术网

在PHP中验证和清理用户输入

在PHP中验证和清理用户输入,php,input-sanitization,input-filtering,Php,Input Sanitization,Input Filtering,使用PHP提供的filter\u var()和sanitize\u var()过滤和净化变量被认为是最佳实践,还是有更好的选择 谢谢你。 < P>我总是会考虑下面的咒语… “从不信任用户输入” ctype_alpha、ctype_alnum在验证方面也表现出色,请记住也要验证客户端(javascript验证),这将有助于减少服务器负载,我想在任何HTML过滤/清理中提到这一点 对于通用验证(数字、日期和其他值),有很多库,也有内置函数,您可以选择最合适的,但我仍然想提及您是否已经使用Zend F

使用PHP提供的
filter\u var()
sanitize\u var()
过滤和净化变量被认为是最佳实践,还是有更好的选择


谢谢你。

< P>我总是会考虑下面的咒语… “从不信任用户输入” ctype_alpha、ctype_alnum在验证方面也表现出色,请记住也要验证客户端(javascript验证),这将有助于减少服务器负载,我想在任何HTML过滤/清理中提到这一点


对于通用验证(数字、日期和其他值),有很多库,也有内置函数,您可以选择最合适的,但我仍然想提及您是否已经使用Zend Framework。

让我们尝试验证表单中的输入

我们需要做的第一件事是确认我们正在寻找的输入数据是否存在

然后我们使用filter_input()函数过滤输入数据


在下面的示例中,输入变量“email”被发送到PHP页面:

我认为最好使用HTML5进行客户端验证,然后使用服务器端验证。PHP具有过滤字符串的函数,如FILTER\u SANITIZE\u STRING(尽管您不需要验证),您可以使用FILTER\u validate\u EMAIL而不是使用regex手动验证电子邮件。还可以使用限制,例如字符数等

概念上的例子

if form is submitted 
  if 'name' is not empty
    create a variable that equals filter_var($_POST['name'], FILTER_SANITIZE_STRING)
    if 'name' is empty then set echo an error message

  if 'email is not empty
    create a variable that equals filter_var($_POST['email'], FILTER_SANITIZE_STRING)
    // then you can validate email
    if (!filter_var($email, FILTER_VALIDATE_EMAIL))
      error message
  // do this for other variables

  if there's not error
    send email and or a thank you message

 //FORM here

这取决于具体情况,我会根据具体情况使用多种不同的方法。如果可能的话,最好使用内置版本,而不是自己滚动。奥利:一般来说。如果有必要对输入进行清理,这会是怎么做的呢?一般来说,没有(db、txt文件、表单、屏幕输出、xml等的不同方法),仅仅解释输入有多困难context@Francisc如果我们理解上下文,我们可以提供更具体的答案。老实说,我很高兴你问这个问题,因为太多的php开发人员甚至没有考虑这个问题。但现实是,我们需要知道你在“为”什么“消毒”。与SQL数据库甚至CLI相比,您对待进入LDAP的字符串有点不同。然而,我的假设是,我们正在讨论准备插入SQL数据库的数据,在这种情况下,您可能想看看使用PDO。客户端验证不能替代服务器端验证。您至少需要在服务器上进行验证,客户端验证对于可用性和减少服务器上的负载都很好,正如前面提到的,但是它很容易被绕过,所以请小心。您是说:“使用ctype_alpha而不是filter_string,因为这是一种更好的做法”还是说我还可以使用其他选项,这不是我要问的。谢谢。看起来你忘了复制这个例子了。