首页 > 代码库 > php关于输入过滤小结

php关于输入过滤小结

    Web的攻击,大部分是来自于外部,如Url上添加一些字段注入($_GET输入),表单的提交注入(一般为$_POST),所以在接收数据时对数据进行过滤,是很有必要的。

  一.  一般php自带的过滤方法有:

    1.空过滤

     trim过滤字符串首尾空格

$name = trim($_POST[‘name‘]);

    2.标签过滤 : 

     strip_tags会将字符串中的php标签(<?php ?>)Html标签(<h1></h1><script></script>....等)移除。一定程序上阻止了恶意注入。

//for example:
$_POST[‘name‘] = "<script>alert(‘hehe‘);</script>";
var_dump($_POST[‘name‘]);//弹出信息框 ‘hehe‘
$name = strip_tags($_POST[‘name‘]);
var_dump($name);  //string(14) "alert(‘hehe‘);"

  3.转数据类型

   若知道要接收的数据是整形或浮点形,可以直接转数据类型。

//转整形 
$number = intval($_POST[‘number‘]);
$price  = floatval($_POST[‘price‘]);

   4.移除xss攻击(跨站脚本攻击)

    xss攻击有时会把标签转换成其他数据,strip_tags防止不了,

    ThinkPHP中有个remove_xss方法,可以将大部分xss攻击阻止。这方法在 ./ThinkPHP/Extend/Function/extend.php中,为了方便使用,可以放到项目的common.php里。

    方法如下

    

/**
 * @from extend.php
 * 过滤xss攻击
 * @param str $val
 * @return mixed
 */
function remove_xss($val) {
	// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
	// this prevents some character re-spacing such as <java\0script>
	// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
	$val = preg_replace(‘/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/‘, ‘‘, $val);

	// straight replacements, the user should never need these since they‘re normal characters
	// this prevents like <IMG SRC=http://www.mamicode.com/@avascript:alert(‘XSS‘)>> 

   调用时如下

$name = remove_xss($_POST[‘name‘]);

   基本我使用的就这几种方法。如果有其他不错的方法,请一起来分享。


php关于输入过滤小结