经典PHP注入检测, 防范PHP注入漏洞通用方式及注入原理

最近抽了点时间写了PHP的WebUtility类库,封装了一些常用的函数,关于注入检测。PHP注入原理和ASP一样的,当时05年左右国内黑客技术的热潮我基本掌握了原理,到目前为止注入漏洞原理基本没有什么变化,入侵网站也无法从这一点入手。不建议使用GET、POST自动检测注入字符串,我还是建议程序员在哪边给SQL语句传参数那就在哪边调用检测函数检测恶意字符。

在我的WebUtility类中,简单写了两个函数,用于检测注入漏洞,函数如下:

// 注入过滤 - 辅助
 function stringExist($strFiltrate){
  $arrFiltrate=array("'",";","union");
  
  foreach ($arrFiltrate as $key=>$value){
   if (eregi($value,$strFiltrate)){
    return true;
   }
  }
  return false;
 }

 
 // 注入过滤
 function paramCheck($strFiltrate) {
  if($this->stringExist($strFiltrate)) {
   echo "<script language='javascript'>alert('提示,非法字符');</script>";
   return false;
  } else {
   return true;
  }
 }

调用的例子如下:

// get article by id
function getArticleById($id) {
  $mocfunc = new WebUtility();
  if ($mocfunc->paramCheck($id)==false) return;
  $this->opendb();
  $_tb_article = mysql_query("select * from article where id=".$id);
  while($_rw_article[] = mysql_fetch_array($_tb_article));
  $this->closedb();
  return $_rw_article;
 }

这里我是先初始化了WebUtility类,再调用其paramcheck函数用于检测将要传递给SQL的参数是否存在注入字符,目前注入漏洞无非涉及到三个字符,单引号'、分号;、union,这三个都是用来划分出黑客构造的新的SQL语句,使其在原有的SQL语句基础上执行黑客所构造的SQL语句,从而间接地操作数据库,如果当前连接数据的账户拥有与当前操作系统交互的权限,则黑客通过构造SQL语句对操作系统进行间接操作。例如以前当我拿到MsSQL的SQL注入之后,会通过xp_cmdshell指令运行DOS命令给系统添加后门程序和系统后门账户。

引用通告地址: 点击获取引用地址
标签: PHP
评论: 0 | 引用: 0 | 阅读: 1182 | 打印 | 打包 | 转发
发表评论
昵 称: 密 码:
网 址: 邮 箱:
验证码: 验证码图片 选 项:
头 像:
内 容:
  • 粗体
  • 斜体
  • 下划线
  • 插入图像
  • 超链接
  • 电子邮件
  • 插入引用