当前位置:首页 > PHP教程 > php应用 > 列表

PHP网页防范SQL注入方法配置

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-22 17:21:39 浏览: 评论:0 

前提条件是我们需要有服务器的管理权限,就是可以修改php.ini文件了,下面我来介绍修改php配置文件来防范SQL注入方法有需要学习的朋友可参考.

为了安全起见,可以打开“php.ini”文件的安全模式,设置“safe_mode=On”;显示 PHP 执行错误信息的 “display_erros”选项如果打开的话,将会返回很多可利用的信息给入侵者,因此要将其设置为“display_erros=off”;这样,PHP 函数执行错误后的信息将不会在客户端的浏览器中进行显示.

此外,在文件还有一个很重要的配置选项,如果将其中的“magic_quotes_gpc”项设置为“On”,PHP 程序会自动将用户提交的变量是含有的“'”、“"”、“”自动转为含有反斜线的转义字符,这个选项类似 ASP 程序中的参数过滤,可以对大部分字符型注入攻击起到防范的作用.

一段程序非常不错,如果你没有服务器管理权限,可以使用如下代码:

  1. <?php 
  2. class sqlsafe { 
  3.  private $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)"
  4.  private $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)"
  5.  private $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)"
  6.  /** 
  7.   * 构造函数 
  8.   */ 
  9.  public function __construct() { 
  10.   foreach($_GET as $key=>$value){$this->stopattack($key,$value,$this->getfilter);} 
  11.   foreach($_POST as $key=>$value){$this->stopattack($key,$value,$this->postfilter);} 
  12.   foreach($_COOKIE as $key=>$value){$this->stopattack($key,$value,$this->cookiefilter);} 
  13.  } 
  14.  /** 
  15.   * 参数检查并写日志 
  16.   */ 
  17.  public function stopattack($StrFiltKey$StrFiltValue$ArrFiltReq){ 
  18.   if(is_array($StrFiltValue))$StrFiltValue = implode($StrFiltValue); 
  19.   if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue) == 1){    
  20.    $this->writeslog($_SERVER["REMOTE_ADDR"]."    ".strftime("%Y-%m-%d %H:%M:%S")."    ".$_SERVER["PHP_SELF"]."    ".$_SERVER["REQUEST_METHOD"]."    ".$StrFiltKey."    ".$StrFiltValue); 
  21.    showmsg('您提交的参数非法,系统已记录您的本次操作!','',0,1); 
  22.   } 
  23.  } 
  24.  /** 
  25.   * SQL注入日志 
  26.   */ 
  27.  public function writeslog($log){ 
  28.   $log_path = CACHE_PATH.'logs'.DIRECTORY_SEPARATOR.'sql_log.txt';//开源代码phpfensi.com 
  29.   $ts = fopen($log_path,"a+"); 
  30.   fputs($ts,$log."rn"); 
  31.   fclose($ts); 
  32.  } 
  33. ?> 

Tags: PHP防范SQL SQL注入方法

分享到: