最近不是在折腾论坛嘛,各种类各种函数,原创一些,从别人那儿qiang过来一些,在此分享出来,希望有朋友能用的到~
注意:部分函数可能不够完善,由此造成的漏洞风险自担~
提交过滤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
function filter( $text ) { //完全过滤注释 $text = preg_replace( '/<!--?.*-->/' , '' , $text ); //完全过滤js $text = preg_replace( '/<script?.*\/script>/' , '' , $text ); //过滤危险的属性,如:过滤on事件lang js while (preg_match( '/(<[^><]+)( lang|action|background|codebase|dynsrc|lowsrc)[^><]+/i' , $text , $mat )) { $text = str_replace ( $mat [0], $mat [1], $text ); } while (preg_match( '/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i' , $text , $mat )) { $text = str_replace ( $mat [0], $mat [1] . $mat [3], $text ); } //过滤多余html $text = preg_replace( '/<\/?(html|head|meta|link|base|basefont|body|bgsound|script|form|iframe|frame|frameset|applet|id|ilayer|layer|name|script|xml)[^><]*>/i' , '' , $text ); //反转换 $text = str_replace ( '[' , '<' , $text ); $text = str_replace ( ']' , '>' , $text ); $text = str_replace ( '|' , '"' , $text ); return $text ; } |
提交过滤2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function stripslashes_array(& $array ) { while (list( $key , $var ) = each( $array )) { if ( $key != 'argc' && $key != 'argv' && ( strtoupper ( $key ) != $key || '' . intval ( $key ) == "$key" )) { if ( is_string ( $var )) { $array [ $key ] = stripslashes ( $var ); } if ( is_array ( $var )) { $array [ $key ] = stripslashes_array( $var ); } } } return $array ; } |
字符串截取(这个是emlog里提出来的,其实也就是substr的增强版)
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
|
function subString( $strings , $start , $length ) { if (function_exists( 'mb_substr' ) && function_exists( 'mb_strlen' )) { $sub_str = mb_substr( $strings , $start , $length , 'utf8' ); return mb_strlen( $sub_str , 'utf8' ) < mb_strlen( $strings , 'utf8' ) ? $sub_str . '...' : $sub_str ; } $str = substr ( $strings , $start , $length ); $char = 0; for ( $i = 0; $i < strlen ( $str ); $i ++) { if (ord( $str [ $i ]) >= 128) $char ++; } $str2 = substr ( $strings , $start , $length + 1); $str3 = substr ( $strings , $start , $length + 2); if ( $char % 3 == 1) { if ( $length <= strlen ( $strings )) { $str3 = $str3 .= '...' ; } return $str3 ; } if ( $char % 3 == 2) { if ( $length <= strlen ( $strings )) { $str2 = $str2 .= '...' ; } return $str2 ; } if ( $char % 3 == 0) { if ( $length <= strlen ( $strings )) { $str = $str .= '...' ; } return $str ; } } |
IP地址匿名化(最后一位替换为星号)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function AnonymousIP() { $ip = GetIP(); if ( $ip == "Unknown" ) { $removed_ip = "未知用户" ; } if ( strpos ( $ip , ":" )) { $removed_ip = "IPv6用户" ; } else { $reg1 = '/((?:\d+\.){3})\d+/' ; $reg2 = '~(\d+)\.(\d+)\.(\d+)\.(\d+)~' ; $removed_ip = preg_replace( $reg1 , "\\1*" , $ip ); } return $removed_ip ; } |
获取客户端IP地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function GetIP() { if (@ $_SERVER [ "HTTP_X_FORWARDED_FOR" ]) $ip = $_SERVER [ "HTTP_X_FORWARDED_FOR" ]; else if (@ $_SERVER [ "HTTP_CLIENT_IP" ]) $ip = $_SERVER [ "HTTP_CLIENT_IP" ]; else if (@ $_SERVER [ "REMOTE_ADDR" ]) $ip = $_SERVER [ "REMOTE_ADDR" ]; else if (@ getenv ( "HTTP_X_FORWARDED_FOR" )) $ip = getenv ( "HTTP_X_FORWARDED_FOR" ); else if (@ getenv ( "HTTP_CLIENT_IP" )) $ip = getenv ( "HTTP_CLIENT_IP" ); else if (@ getenv ( "REMOTE_ADDR" )) $ip = getenv ( "REMOTE_ADDR" ); else $ip = "Unknown" ; return $ip ; } |
字符串加密(支持中文)
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
|
function dencrypt( $string , $isEncrypt = true, $key = "youdian" ) { if (!isset( $string {0}) || !isset( $key {0})) { return false; } $dynKey = $isEncrypt ? hash( 'sha1' , microtime(true)) : substr ( $string , 0, 40); $fixedKey = hash( 'sha1' , $key ); $dynKeyPart1 = substr ( $dynKey , 0, 20); $dynKeyPart2 = substr ( $dynKey , 20); $fixedKeyPart1 = substr ( $fixedKey , 0, 20); $fixedKeyPart2 = substr ( $fixedKey , 20); $key = hash( 'sha1' , $dynKeyPart1 . $fixedKeyPart1 . $dynKeyPart2 . $fixedKeyPart2 ); $string = $isEncrypt ? $fixedKeyPart1 . $string . $dynKeyPart2 : (isset( $string {339}) ? gzuncompress( base64_decode ( substr ( $string , 40))) : base64_decode ( substr ( $string , 40))); $n = 0; $result = '' ; $len = strlen ( $string ); for ( $n = 0; $n < $len ; $n ++) { $result .= chr (ord( $string { $n }) ^ ord( $key { $n % 40})); } return $isEncrypt ? $dynKey . str_replace ( '=' , '' , base64_encode ( $n > 299 ? gzcompress( $result ) : $result )) : substr ( $result , 20, -20); } |
检查字符串是否包含中文
1
2
3
4
5
6
7
8
|
function CheckChinese( $string ) { if (preg_match( "/[\x7f-\xff]/" , $string )) { return true; } else { return false; } } |
隐藏文件真实路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function FileHeaderJump( $file ) { header( 'Content-Description: File Transfer' ); header( 'Content-Type: application/octet-stream' ); header( 'Content-Disposition: attachment; filename=' . basename ( $file )); header( 'Content-Transfer-Encoding: binary' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header( 'Pragma: public' ); header( 'Content-Length: ' . filesize ( $file )); ob_clean(); flush (); readfile( $file ); exit ; } |
生成随机字符串,自定义长度
1
2
3
4
5
6
7
8
9
|
function CreateRandomString( $length ) { $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ; $password = "" ; for ( $i = 0; $i < $length ; $i ++) { $password .= $chars [mt_rand(0, strlen ( $chars ) - 1)]; } return $password ; } |