经典PHP注入检测, 防范PHP注入漏洞通用方式及注入原理
作者: 李嘉 日期: 2009-09-12 08:05
最近抽了点时间写了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如何设置全局数据变量、如何设置配置项,Global关键字和常量方式 (2010-11-07 07:54)
李嘉 收藏代码 ① - ASP.NET中实现Javascript信息提示框(版本2) (2010-06-11 00:57)
[收藏推荐]PHP如何产生生成随机文件名,可以自定义位数 (2010-04-16 14:28)
PHP中如何格式化Excel中的时间 (2010-03-25 07:36)
常见的PHP编辑器有哪些? (2010-03-16 15:54)
PHP+Apache如何显示错误信息, PHP默认安装后display_errors=Off (2010-01-19 22:51)
Apache设置虚拟目录最佳方法-已验证有效 (2009-10-07 23:42)
PHP发送匿名电子邮件(Send Anonymous Email)的源码 (2009-09-05 18:55)
千万不要使用 PHP 5.30 版本来运行 Joomla!——PHP 5.30 与 Joomla 有冲突 (2009-08-21 23:16)