下面通过一段代码给大家介绍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))