多语言展示
当前在线:1977今日阅读:22今日分享:22

网站被传图片木马之后的应对和预防

一般站长都比较了解网站挂马,和各种漏洞,但是对于上传的图片含有木马的情况大部分站长都比较头疼,更没有好的办法,对于这个问题本人经过调查和研究,借鉴前任经验和自己的测试得出以下总结,希望对各位站长有所帮助!
工具/原料

工具其实用不上,要真算的话,就是站长对php语言的熟悉程度,因为本人讲述的是利用php来解决上述问题的方法!

方法/步骤
1

其实要做这个问题,首先需要从根源出发,图片格式就那么些个,肯定不能后缀上来判定,因为含有马的图片,后缀格式也没有变化

2

从根源上出发,剖析发现图片马一般是16位的,这样说的话,可以针对这里做判断,

3

弄完这里,发现对这个的预防肯定得从上传哪里做限制不是,就又弄了私有上传限制

4

对于这些判断什么时候执行,既要达到我们预期的效果,又要不影响用户体验,所以这里还需要再一次的限定

5

这几步都做好之后,大体上可以实现我们的需求了,为了简单直接,最好是直接这些都写入一个类里,直接调用就方便了不是下面上传代码,以便大家参考,如果有更好的方法的大神,还望指正补充,只为更多人都成长!

6

class Upload {          private static $image = null;       private static $status = 0;       private static $suffix = null;       private static $imageType = array('.jpg', '.bmp','.gif','.png');       private static $message = array(             '0' => '没有错误发生,文件上传成功。',             '1' => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。',             '2' => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。',             '3' => '文件只有部分被上传。',             '4' => '没有文件上传。',             '5' => '未能通过安全检查的文件。',             '6' => '找不到临时文件夹。',             '7' => '文件写入失败。',             '8' => '文件类型不支持',             '9' => '上传的临时文件丢失。',       );          //@ 开始执行文件上传       public static function start($feild = 'file') {             if (!empty($_FILES)) {                 self::$status = $_FILES[$feild]['error'];                if (self::$status > 0)                       return array('status' => self::$status, 'msg' => self::$message[self::$status]);                   self::$image = $_FILES[$feild]['tmp_name'];                   self::$suffix = strtolower(strrchr($_FILES[$feild]['name'], '.'));                  return array('status' => self::_upload(), 'path' => self::$image, 'msg' => self::$message[self::$status]);            } else {                   return array('status' => self::$status, 'msg' => self::$message[self::$status]);            }  }        //@ 私有 上传开始     private static function _upload($path = './upload/') {         date_default_timezone_set('PRC');         $newFile = $path . date('Y/m/d/His') . rand(100, 999) . self::$suffix;         self::umkdir(dirname($newFile));         if (is_uploaded_file(self::$image) && move_uploaded_file(self::$image, $newFile)) {             self::$image = $newFile;             if (in_array(self::$suffix, self::$imageType))                 return self::checkHex();             else                 return self::$status = 0;         } else {             return self::$status = 9;         }     }        //@ 私有 16进制检测 黑客     private static function checkHex() {         if (file_exists(self::$image)) {             $resource = fopen(self::$image, 'rb');             $fileSize = filesize(self::$image);             fseek($resource, 0);             if ($fileSize > 512) { // 取头和尾                 $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进制中的

推荐信息