php檢測圖片木馬

來源:互聯網
上載者:User
實踐php檢測圖片木馬
  1. /**
  2. +------------------------------------------------------------------------------
  3. * Upload 檔案上傳類
  4. +------------------------------------------------------------------------------
  5. * @package Upload
  6. * @author nicegy
  7. * @version $Id: Upload.class.php 2014-4-11 19:00:23 nicegy $
  8. +------------------------------------------------------------------------------
  9. */
  10. class Upload {
  11. private static $image = null;
  12. private static $status = 0;
  13. private static $suffix = null;
  14. private static $imageType = array('.jpg', '.bmp','.gif','.png');
  15. private static $message = array(
  16. '0' => '沒有錯誤發生,檔案上傳成功。',
  17. '1' => '上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。',
  18. '2' => '上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。',
  19. '3' => '檔案只有部分被上傳。',
  20. '4' => '沒有檔案上傳。',
  21. '5' => '未能通過安全檢查的檔案。',
  22. '6' => '找不到臨時檔案夾。',
  23. '7' => '檔案寫入失敗。',
  24. '8' => '檔案類型不支援',
  25. '9' => '上傳的臨時檔案丟失。',
  26. );
  27. //@ 開始執行檔案上傳
  28. public static function start($feild = 'file') {
  29. if (!empty($_FILES)) {
  30. self::$status = $_FILES[$feild]['error'];
  31. if (self::$status > 0)
  32. return array('status' => self::$status, 'msg' => self::$message[self::$status]);
  33. self::$image = $_FILES[$feild]['tmp_name'];
  34. self::$suffix = strtolower(strrchr($_FILES[$feild]['name'], '.'));
  35. return array('status' => self::_upload(), 'path' => self::$image, 'msg' => self::$message[self::$status]);
  36. } else {
  37. return array('status' => self::$status, 'msg' => self::$message[self::$status]);
  38. }
  39. }
  40. //@ 私人 上傳開始
  41. private static function _upload($path = './upload/') {
  42. date_default_timezone_set('PRC');
  43. $newFile = $path . date('Y/m/d/His') . rand(100, 999) . self::$suffix;
  44. self::umkdir(dirname($newFile));
  45. if (is_uploaded_file(self::$image) && move_uploaded_file(self::$image, $newFile)) {
  46. self::$image = $newFile;
  47. if (in_array(self::$suffix, self::$imageType))
  48. return self::checkHex();
  49. else
  50. return self::$status = 0;
  51. } else {
  52. return self::$status = 9;
  53. }
  54. }
  55. //@ 私人 16進位檢測 駭客
  56. private static function checkHex() {
  57. if (file_exists(self::$image)) {
  58. $resource = fopen(self::$image, 'rb');
  59. $fileSize = filesize(self::$image);
  60. fseek($resource, 0);
  61. if ($fileSize > 512) { // 取頭和尾
  62. $hexCode = bin2hex(fread($resource, 512));
  63. fseek($resource, $fileSize - 512);
  64. $hexCode .= bin2hex(fread($resource, 512));
  65. } else { // 取全部
  66. $hexCode = bin2hex(fread($resource, $fileSize));
  67. }
  68. fclose($resource);
  69. /* 匹配16進位中的 */
  70. /* 匹配16進位中的 */
  71. /* 匹配16進位中的
複製代碼
php
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.