PHP防注入函数代码总结
在php中防注入一般会写一个全局文件用来过滤特殊的字符串,本文章来总结了各种各样的php防注入函数代码,同时还可防sql注入大家可参考.
为了安全,我们常用到下面的函数来过滤一些传递过来的非法字符,PHP防注入函数,代码如下:
//要过滤的非法字符 $ArrFiltrate = array ([‘],];],]union],]select],] delete ],]‘],] or ],] and ],]=]); //出错后要跳转的url,不填则默认前一页 $StrGoUrl =]"; //是否存在数组中的值 function FunStringExist( $StrFiltrate , $ArrFiltrate ){ foreach ( $ArrFiltrate as $key => $value ){ if ( eregi ( $value , $StrFiltrate )){ return true; } } return false; } //合并$_POST 和 $_GET if (function_exists( array_merge )){ $ArrPostAndGet = array_merge ( $HTTP_POST_VARS , $HTTP_GET_VARS ); } else { foreach ( $HTTP_POST_VARS as $key => $value ){ $ArrPostAndGet []= $value ; } foreach ( $HTTP_GET_VARS as $key => $value ){ $ArrPostAndGet []= $value ; } } //验证开始 foreach ( $ArrPostAndGet as $key => $value ){ if (FunStringExist( $value , $ArrFiltrate )){ if ( empty empty ( $StrGoUrl )){ echo [<script language=]javascript]>history.go(-1);</script>]; } else { echo [<script language=]javascript]>window.location=]". $StrGoUrl .]];</script>]; } exit ; } }再看一个实例与上面差不多,这个是dz论坛使用的方法,代码如下:
$magic_quotes_gpc = get_magic_quotes_gpc(); @extract(daddslashes( $_COOKIE )); @extract(daddslashes( $_POST )); @extract(daddslashes( $_GET )); if (! $magic_quotes_gpc ) { $_FILES = daddslashes( $_FILES ); } function daddslashes( $string , $force = 0) { if (! $GLOBALS [ 'magic_quotes_gpc' ] || $force ) { if ( is_array ( $string )) { foreach ( $string as $key => $val ) { $string [ $key ] = daddslashes( $val , $force ); } //开源代码phpfensi.com } else { $string = addslashes ( $string ); } } return $string ; }最后发一加强版的,代码如下:
<?php $field = explode ( ',' , $data ); array_walk ( $field , array ( $this , 'add_special_char' )); $data = implode( ',' , $field ); /** * 对字段两边加反引号,以保证数据库安全 * @param $value 数组值 */ public function add_special_char(& $value ) { if ( '*' == $value || false !== strpos ( $value , '(' ) || false !== strpos ( $value , '.' ) || false !== strpos ( $value , '`' )) { //不处理包含* 或者 使用了sql方法。 } else { $value = '`' .trim( $value ). '`' ; } return $value ; } function str_filter( $str ) { $str = htmlspecialchars ( $str ); if (! get_magic_quotes_gpc ()) { $str = addslashes ( $str ); } //过滤危险字符 return preg_replace ( "/[" '=]|( and )|( or )|(create)|(update)|(alter)|( delete )|(insert)|(load_file)|(outfile)|( count )|(%20)|(char)/i ", " ", $str ); } /* 函数名称:str_check() 函数作用:对提交的字符串进行过滤 参 数:$var: 要处理的字符串 返 回 值:返回过滤后的字符串 */ function str_check( $str ) { if (! get_magic_quotes_gpc ()) { // 判断magic_quotes_gpc是否打开 $str = addslashes ( $str ); // 进行过滤 } $str = str_replace ( "_" , "_" , $str ); // 把 '_'过滤掉 $str = str_replace ( "%" , "%" , $str ); // 把 '%'过滤掉 return $str ; } /* 函数名称:post_check() 函数作用:对提交的编辑内容进行处理 参 数:$post: 要提交的内容 返 回 值:$post: 返回过滤后的内容 */ function post_check( $post ) { if (! get_magic_quotes_gpc ()) { // 判断magic_quotes_gpc是否为打开 $post = addslashes ( $post ); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace ( "_" , "_" , $post ); // 把 '_'过滤掉 $post = str_replace ( "%" , "%" , $post ); // 把 '%'过滤掉 $post = nl2br ( $post ); // 回车转换 $post = htmlspecialchars ( $post ); // html标记转换 return $post ; } /* 函数名称:inject_check() 函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全 参 数:$sql_str: 提交的变量 返 回 值:返回检测结果,ture or false */ function inject_check( $sql_str ) { return eregi ( 'select|insert|and|or|update|delete|' | /*|*||./|union|into|load_file|outfile', $sql_str); // 进行过滤 } /* 函数名称:verify_id() 函数作用:校验提交的ID类值是否合法 参 数:$id: 提交的ID值 返 回 值:返回处理后的ID */ function verify_id( $id =null) { if (! $id ) { exit ( '没有提交参数!' ); } // 是否为空判断 elseif (inject_check( $id )) { exit ( '提交的参数非法!' ); } // 注射判断 elseif (! is_numeric ( $id )) { exit ( '提交的参数非法!' ); } // 数字判断 $id = intval ( $id ); // 整型化 return $id ; } // $rptype = 0 表示仅替换 html标记 // $rptype = 1 表示替换 html标记同时去除连续空白字符 // $rptype = 2 表示替换 html标记同时去除所有空白字符 // $rptype = -1 表示仅替换 html危险的标记 function HtmlReplace( $str , $rptype = 0) { $str = stripslashes ( $str ); if ( $rptype == 0) { $str = htmlspecialchars ( $str ); } else if ( $rptype == 1) { $str = htmlspecialchars ( $str ); $str = str_replace ( " " , ' ' , $str ); $str = ereg_replace ( "[rnt ]{1,}" , ' ' , $str ); } else if ( $rptype == 2) { $str = htmlspecialchars ( $str ); $str = str_replace ( " " , '' , $str ); $str = ereg_replace ( "[rnt ]" , '' , $str ); } else { $str = ereg_replace ( "[rnt ]{1,}" , ' ' , $str ); $str = eregi_replace ( 'script' , 'script' , $str ); $str = eregi_replace ( "<[/]{0,1}(link|meta|ifr|fra)[^>]*>" , '' , $str ); } return addslashes ( $str ); } //递归ddslashes function daddslashes( $string , $force = 0, $strip = FALSE) { if (! get_magic_quotes_gpc () || $force ) { if ( is_array ( $string )) { foreach ( $string as $key => $val ) { $string [ $key ] = daddslashes ( $val , $force ); } } else { $string = addslashes ( $strip ? stripslashes ( $string ) : $string ); } } return $string ; } //递归stripslashes function dstripslashes( $string ) { if ( is_array ( $string )) { foreach ( $string as $key => $val ) { $string [ $key ] = $this ->dstripslashes ( $val ); } } else { $string = stripslashes ( $string ); } return $string ; } /** * 安全过滤函数 * @param $string 要过滤的字符串 * @return string 返回处理过的字符串 */ function safe_replace( $string ) { $string = str_replace ( '%20' , '' , $string ); $string = str_replace ( '%27' , '' , $string ); $string = str_replace ( '%2527' , '' , $string ); $string = str_replace ( '*' , '' , $string ); $string = str_replace ( '"' , '"' , $string ); $string = str_replace ( "'" ,'', $string ); $string = str_replace ( '"' , '' , $string ); $string = str_replace ( ';' , '' , $string ); $string = str_replace ( '<' , '<' , $string ); $string = str_replace ( '>' , '>' , $string ); $string = str_replace ( "{" , '' , $string ); $string = str_replace ( '}' , '' , $string ); return $string ; } /** * 使用htmlspecialchars处理字符串或数组 * @param $obj 需要处理的字符串或数组 * @return mixed 返回经htmlspecialchars处理过的字符串或数组 */ function new_htmlspecialchars( $string ) { if (! is_array ( $string )) return htmlspecialchars( $string ); foreach ( $string as $key => $val ) $string [ $key ] = new_htmlspecialchars( $val ); return $string ; } //处理禁用HTML但允许换行的内容 function TrimMsg( $msg ) { $msg = trim ( stripslashes ( $msg ) ); $msg = nl2br ( htmlspecialchars ( $msg ) ); $msg = str_replace ( " " , " " , $msg ); return addslashes ( $msg ); } ?>查看更多关于PHP防注入函数代码总结 - php函数的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30802