下面通过一段代码给大家介绍php参数过滤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
class mysafe{ public $logname ; public $isshwomsg ; function __construct(){ set_error_handler( 'MyError' ,E_ALL); //----- } function MyError( $errno , $errstr , $errfile , $errline ){ echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />" ; exit ; } function wlog( $logs ){ if ( empty ( $logname )){ $this ->logname= $_SERVER [ "DOCUMENT_ROOT" ]. "/log.htm" ; } $Ts = fopen ( $this ->logname, "a+" ); fputs ( $Ts , $logs . "\r\n" ); fclose( $Ts ); } function showmsg( $msg = '' , $flag =false){ $this ->isshwomsg= empty ( $this ->isshwomsg) ? false : true; if ( $this ->isshwomsg) { echo '<br />--------------------------------------<br />' ; echo $msg ; echo '<br />--------------------------------------<br />' ; if ( $flag ) exit ; } } function get_filter(){ $getfilter = "'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)" ; foreach ( $_GET as $key => $value ){ $this ->StopAttack( $key , $value , $getfilter ); } } function post_filter(){ $postfilter = "\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)" ; foreach ( $_POST as $key => $value ){ $this ->StopAttack( $key , $value , $postfilter ); } } function cookie_filter(){ $cookiefilter = "\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)" ; foreach ( $_COOKIE as $key => $value ){ $this ->StopAttack( $key , $value , $cookiefilter ); } } //过滤参数 function StopAttack( $StrFiltKey , $StrFiltValue , $ArrFiltReq ){ if ( is_array ( $StrFiltValue )){ $StrFiltValue =implode( $StrFiltValue ); } if (preg_match( "/" . $ArrFiltReq . "/is" , $StrFiltValue )==1){ $msg = "<br><br>操作IP: " . $_SERVER [ "REMOTE_ADDR" ]. "<br>操作时间: " . strftime ( "%Y-%m-%d %H:%M:%S" ). "<br>操作页面:" . $_SERVER [ "PHP_SELF" ]. "<br>提交方式: " . $_SERVER [ "REQUEST_METHOD" ]. "<br>提交参数: " . $StrFiltKey . "<br>提交数据: " . $StrFiltValue ; $this ->wlog( $msg ); $this ->showmsg( $msg ); exit (); } } function filter_value_for_sql( $str ){ $str = str_replace ( "and" , "" , $str ); $str = str_replace ( "execute" , "" , $str ); $str = str_replace ( "update" , "" , $str ); $str = str_replace ( "count" , "" , $str ); $str = str_replace ( "chr" , "" , $str ); $str = str_replace ( "mid" , "" , $str ); $str = str_replace ( "master" , "" , $str ); $str = str_replace ( "truncate" , "" , $str ); $str = str_replace ( "char" , "" , $str ); $str = str_replace ( "declare" , "" , $str ); $str = str_replace ( "select" , "" , $str ); $str = str_replace ( "create" , "" , $str ); $str = str_replace ( "delete" , "" , $str ); $str = str_replace ( "insert" , "" , $str ); $str = str_replace ( "'" , "" , $str ); $str = str_replace ( '"' ,"", $str ); $str = str_replace ( " " , "" , $str ); $str = str_replace ( "or" , "" , $str ); $str = str_replace ( "=" , "" , $str ); $str = str_replace ( " " , "" , $str ); return $str ; } //class end } |
下面给大家介绍下PHP数据过滤
1、php提交数据过滤的基本原则
1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了。其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择。
2)在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数就很流行了。
3)在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样你也就可以放心的使用系统函数。
4)对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换。比如尖括号"<"就将转化为 "<"这样无害的字符。
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
strip_tags($text,);
5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想这样也就无懈可击了。
2、PHP简单的数据过滤
1)入库: trim($str),addslashes($str)
2)出库: stripslashes($str)
3)显示: htmlspecialchars(nl2br($str))