php 参数过滤、数据过滤详解
下面通过一段代码给大家介绍php参数过滤
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))
上一篇: php数字每三位加逗号的功能函数