php 的安全过滤(基础篇)


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

验证数据类型是否为boolean

举例:

<?php
    $value01 = TRUE;  
    if(filter_var($value01,FILTER_VALIDATE_BOOLEAN)) {  
     echo 'TRUE';  
    } else {  
     echo 'FALSE';  
    }  
    echo '<br /><br />'; 
    $value02 = TRUE;  
    if(filter_var($value02,FILTER_VALIDATE_BOOLEAN)) {  
     echo 'TRUE';  
    } else {  
     echo 'FALSE';  
    }  
?>

FILTER_VALIDATE_EMAIL 验证是否为email

FILTER_VALIDATE_FLOAT:验证是否为浮点型

FILTER_VALIDATE_INT:验证是否为整型

FILTER_VALIDATE_IP:验证是否是合法IP

FILTER_VALIDATE_URL:验证是否是合法URL


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

举例程序:

<?php
    $value = "<script>alert('TROUBLE HERE');</script>";  
    echo filter_var($value, FILTER_SANITIZE_STRING);  
    echo "<br>";
    $value = "<body>alert('boy's book');</body>";
    echo filter_var($value,FILTER_SANITIZE_STRING);
?>

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


alert('TROUBLE HERE');

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,但是他除了简单判断是否是整形以外,还将返回过已滤掉非数字字符的字符传(疑问晕死,还是看个例子吧)

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

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

看看这个例子吧:

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

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

例如我们还可以用:

htmlspecialcharshtmlentitiesmysql_real_escape_string

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



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












 



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值