首页 > 开发 > PHP > 正文

php 参数过滤、数据过滤详解

2024-05-04 23:39:48
字体:
来源:转载
供稿:网友

这篇文章给大家介绍php参数过滤及php数据过滤,包括php提交数据过滤的基本原则,php简单的数据过滤,感兴趣的朋友一起学习吧

下面通过一段代码给大家介绍php参数过滤

 

 
  1. class mysafe{ 
  2. public $logname
  3. public $isshwomsg
  4. function __construct(){  
  5. set_error_handler('MyError',E_ALL);  
  6. //----- 
  7. function MyError($errno$errstr$errfile$errline){  
  8. echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />"
  9. exit
  10. function wlog($logs){ 
  11. if(emptyempty($logname)){ 
  12. $this->logname=$_SERVER["DOCUMENT_ROOT"]."/log.htm"
  13. }  
  14. $Ts=fopen($this->logname,"a+"); 
  15. fputs($Ts,$logs."/r/n"); 
  16. fclose($Ts); 
  17. function showmsg($msg='',$flag=false){ 
  18. $this->isshwomsg=emptyempty($this->isshwomsg) ? false : true; 
  19. if ($this->isshwomsg) { 
  20. echo '<br />--------------------------------------<br />'
  21. echo $msg
  22. echo '<br />--------------------------------------<br />'
  23. if ($flagexit
  24. }  
  25. function get_filter(){ 
  26. $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)"
  27. foreach($_GET as $key=>$value){ 
  28. $this->StopAttack($key,$value,$getfilter); 
  29. function post_filter(){ 
  30. $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)"
  31. foreach($_POST as $key=>$value){ 
  32. $this->StopAttack($key,$value,$postfilter); 
  33. function cookie_filter(){ 
  34. $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)"
  35. foreach($_COOKIE as $key=>$value){ 
  36. $this->StopAttack($key,$value,$cookiefilter); 
  37. //过滤参数  
  38. function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){ 
  39. if(is_array($StrFiltValue)){ 
  40. $StrFiltValue=implode($StrFiltValue); 
  41. }  
  42. if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){ 
  43. $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;  
  44. $this->wlog($msg);  
  45. $this->showmsg($msg);  
  46. exit(); 
  47. }  
  48. function filter_value_for_sql($str){ 
  49. $str = str_replace("and","",$str); 
  50. $str = str_replace("execute","",$str); 
  51. $str = str_replace("update","",$str); 
  52. $str = str_replace("count","",$str); 
  53. $str = str_replace("chr","",$str); 
  54. $str = str_replace("mid","",$str); 
  55. $str = str_replace("master","",$str); 
  56. $str = str_replace("truncate","",$str); 
  57. $str = str_replace("char","",$str); 
  58. $str = str_replace("declare","",$str); 
  59. $str = str_replace("select","",$str); 
  60. $str = str_replace("create","",$str); 
  61. $str = str_replace("delete","",$str); 
  62. $str = str_replace("insert","",$str); 
  63. $str = str_replace("'","",$str); 
  64. $str = str_replace('"',"",$str); 
  65. $str = str_replace(" ","",$str); 
  66. $str = str_replace("or","",$str); 
  67. $str = str_replace("=","",$str); 
  68. $str = str_replace(" ","",$str);  
  69. return $str
  70. //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("Test", ENT_QUOTES);

strip_tags($text,);

5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想这样也就无懈可击了。

2、PHP简单的数据过滤

1)入库: trim($str),addslashes($str)

2)出库: stripslashes($str)

3)显示: htmlspecialchars(nl2br($str))

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表