php 的安全过滤(基础篇)

PHP 5.2 以上提供了一个非常简单好用的自带函数 filter_var ,下面是对这个函数使用的详细介绍。

验证数据类型是否为boolean

举例:

 

  1. <?php  
  2.     $value01 = TRUE;    
  3.     if(filter_var($value01,FILTER_VALIDATE_BOOLEAN)) {    
  4.      echo 'TRUE';    
  5.     } else {    
  6.      echo 'FALSE';    
  7.     }    
  8.     echo '<br /><br />';   
  9.     $value02 = TRUE;    
  10.     if(filter_var($value02,FILTER_VALIDATE_BOOLEAN)) {    
  11.      echo 'TRUE';    
  12.     } else {    
  13.      echo 'FALSE';    
  14.     }    
  15. ?>  

 

FILTER_VALIDATE_EMAIL 验证是否为email

FILTER_VALIDATE_FLOAT:验证是否为浮点型

FILTER_VALIDATE_INT:验证是否为整型

FILTER_VALIDATE_IP:验证是否是合法IP

FILTER_VALIDATE_URL:验证是否是合法URL

 

FILTER_SANITIZE_STRING:对字符串进行消毒过滤,这个参数会过滤并把不合法的用户输入自动去掉,例如:HTML标签等。

举例程序:

 

  1. <?php  
  2.     $value = "<script>alert('TROUBLE HERE');</script>";    
  3.     echo filter_var($value, FILTER_SANITIZE_STRING);    
  4.     echo "<br>";  
  5.     $value = "<body>alert('boy's book');</body>";  
  6.     echo filter_var($value,FILTER_SANITIZE_STRING);  
  7. ?>  


你将会得到如下一串异常合法的输出:

 

 

  1. alert('TROUBLE HERE');   
  2. alert('boy's book');  


FILTER_SANITIZE_ENCODED:对输入的编码进行url编码,功能类似于urlencode。

FILTER_SANITIZE_SPECIAL_CHARS:过滤掉所有html标签

FILTER_SANITIZE_EMAIL:去掉在email地址中无效的符号,例如括号

FILTER_SANITIZE_URL:类似于FILTER_SANITIZE_EMAIL,去掉在url中无效的符号。

FILTER_SANITIZE_NUMBER_INT:类似于FILTER_VALIDATE_INT,但是他除了简单判断是否是整形以外,还将返回过已滤掉非数字字符的字符传(疑问晕死,还是看个例子吧)

 

  1. $value01 = '1你好吗23abc45%#6def';    
  2. echo filter_var($value01, FILTER_SANITIZE_NUMBER_INT);   


FILTER_SANITIZE_NUMBER_FLOAT:功能目前我发现的就是同上,但是为啥既然是一样的他们两个还都同时存在呢,一个最主要的原因就是当  FILTER_SANITIZE_NUMER_FLOAT后面加了FILTER_FLAG_ALLOW_FRACTION这个参数以后就会体现不同了。(那为啥不直接就定义个可以只过滤个浮点数的参数嘞,偶也不知道偷笑

 

看看这个例子吧:

 

  1. $value = '1.23';    
  2. echo filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);    


当然,避免注入还有很多其他简单又基本的方法:

 

例如我们还可以用:

htmlspecialcharshtmlentitiesmysql_real_escape_string

或者你甚至还可以自己定义些自己需要的方法。

 

 

好啦,就写到这里吧。本文很大一部分参考了Getting Clean With PHP这篇文章,在此非常感谢之:)

posted @ 2013-01-10 15:35  simpman  阅读(370)  评论(0)    收藏  举报