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

2026-03-15 04:10:12

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进制中的

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢