顯示結果
|
描述
|
實體名稱
|
|
空格
|
|
<
|
小於號
|
<
|
>
|
大於號
|
>
|
&
|
和號
|
&
|
"
|
引號
|
"
|
'
|
撇號
|
' (IE不支持)
|
strip_tags($str, [容許標籤])
|
從字符串中去除 HTML 和 PHP 標記
|
htmlentities($str)
|
轉義html實體
|
html_entity_decode($str)
|
反轉義html實體
|
addcslashes($str, ‘字符’)
|
給某些字符加上反斜槓
|
stripcslashes($str)
|
去掉反斜槓
|
addslashes ($str )
|
單引號、雙引號、反斜線與 NULL加反斜槓
|
stripslashes($str)
|
去掉反斜槓
|
htmlspecialchars()
|
特殊字符轉換爲HTML實體
|
htmlspecialchars_decode()
|
將特殊的 HTML 實體轉換回普通字符
|
<?php class XSS { /** * @desc 過濾數據 * * @param $data string|array 輸入數據 * @param $low bool 是否採用更爲嚴格的過濾 * * @return 返回過濾的數據 */
public function clean_xss($data, $low = False) { #字符串過濾 if (! is_array ( $data )) { $data = trim ( $data ); #字符兩邊的處理 $data = strip_tags ( $data ); #從字符串中去除 HTML 和 PHP 標記 $data = htmlspecialchars ( $data ); #特殊字符轉換爲HTML實體 if ($low) { return $data; } #匹配換空格 $data = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $data ); $no = '/%0[0-8bcef]/'; $data = preg_replace ( $no, '', $data ); $no = '/%1[0-9a-f]/'; $data = preg_replace ( $no, '', $data ); $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; $data = preg_replace ( $no, '', $data ); return $data; } #數組過濾 $arr=array(); foreach ($data as $k => $v) { $temp=$this->clean_xss($v); $arr[$k]=$temp; } return $arr; } } #測試測試 session_start(); $_SESSION['xss']='xssss'; $xss=new XSS(); #測試字符串 $str = "<script>alert(document.cookie)</script>"; echo $str; $str2=$xss->clean_xss($str); echo $str2; echo "<hr/>"; #測試數組 $arr=array("<script>alert(document.cookie)</script>","<script>alert(document.cookie)</script>","<script>alert(document.cookie)</script>"); echo "<pre>"; print_r($arr); echo "</pre>"; $arr2=$xss->clean_xss($arr); echo "<pre>"; print_r($arr2); echo "</pre>";die; ?>