PHP怎么过滤非法函数?
我写个留言板,如果别人留言的时候,在留言框输入<script>........之类的那后果就不堪设想了...
请问有什么办法过滤这些...
这个行不? http://xwuxin.javaeye.com/blog/460919 (如果行,又怎么用)
追问:请问除了<script>还有没有其他函数是怕别人写进去的?
我写个留言板,如果别人留言的时候,在留言框输入<script>........之类的那后果就不堪设想了...
请问有什么办法过滤这些...
这个行不? http://xwuxin.javaeye.com/blog/460919 (如果行,又怎么用)
追问:请问除了<script>还有没有其他函数是怕别人写进去的?
答案:靠,楼上的用的了那么繁琐吗?php内值函数htmlspecialchars搞定<?php
$a = "<b>asf</b><script>alert('asdf')</script>哈哈";
echo htmlspecialchars($a);
?>自己copy代码看效果.
/**
* 危险 HTML代码过滤器
*
* @param string $html 需要过滤的html代码
*
* @return string
*/
function html_filter($html)
{
$filter = array(
"/\s/",
"/<(\/?)(script|i?frame|style|html|body|title|link|object|meta|\?|\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]\s*=([^>]*>)/isU",
);$replace = array(
" ",
"<\\1\\2\\3>",
"\\1\\2",
);$str = preg_replace($filter,$replace,$html);
function htmldecode($str)
return $str;
}
{
if(empty($str)) return;
if($str=="") return $str;
$str=str_replace("&",chr(34),$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
$str=str_replace("&","&",$str);
$str=str_replace(" ",chr(32),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace("'",chr(39),$str);
$str=str_replace("<br />",chr(13),$str);
$str=str_replace("''","'",$str);
$str=str_replace("select","select",$str);
$str=str_replace("join","join",$str);
$str=str_replace("union","union",$str);
$str=str_replace("where","where",$str);
$str=str_replace("insert","insert",$str);
$str=str_replace("delete","delete",$str);
$str=str_replace("update","update",$str);
$str=str_replace("like","like",$str);
$str=str_replace("drop","drop",$str);
$str=str_replace("create","create",$str);
$str=str_replace("modify","modify",$str);
$str=str_replace("rename","rename",$str);
$str=str_replace("alter","alter",$str);
$str=str_replace("cas","cast",$str);
$farr = array(
"/\s+/" , //过滤多余的空白
"/<(\/?)(img|script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU" , //过滤 <script 防止引入恶意内容或恶意代码,如果不需要插入flash等,还可以加入<object的过滤
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU" , //过滤javascript的on事件
);
$tarr = array(
" " ,
"<\\1\\2\\3>" , //如果要直接清除不安全的标签,这里可以留空
"\\1\\2" ,
);
$str = preg_replace ( $farr , $tarr , $str );
return $str;
}
上一个:php里字节数组怎么理解
下一个:ASP 转译 PHP 的问题