php 图片木马检测

thinkphp 自带一些基本检测,在网上查了一下 又添加了16进制检测 代码如下
我是在tp的upload 文件里添加调用的

if($this->checkHex($file['tmp_name'])!='0'){
$this->error = '上传非法图片';
return false;
};

private static function checkHex($image) {
if (file_exists($image)) {
$resource = fopen($image, 'rb');
$fileSize = filesize($image);
fseek($resource, 0);//把文件指针移到文件的开头
if ($fileSize > 512) { // 若文件大于521B文件取头和尾
$hexCode = bin2hex(fread($resource, 512));
fseek($resource, $fileSize - 512);//把文件指针移到文件尾部
$hexCode .= bin2hex(fread($resource, 512));
} else { // 取全部
$hexCode = bin2hex(fread($resource, $fileSize));
}
fclose($resource);
/* 匹配16进制中的 <% ( ) %> /
/
匹配16进制中的 <? ( ) ?> /
/
匹配16进制中的 <script | /script> 大小写亦可/
/
核心 整个类检测木马脚本的核心在这里 通过匹配十六进制代码检测是否存在木马脚本*/

        if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is", $hexCode))
            $status = 5;
        else
            $status = 0;
        return $status;
    } else {
        return $status = 9;
    }
}

猜你喜欢

转载自www.cnblogs.com/santuwang/p/9354597.html