ホームページ  >  記事  >  バックエンド開発  >  PHP はイメージ型トロイの木馬を検出します

PHP はイメージ型トロイの木馬を検出します

WBOY
WBOYオリジナル
2016-07-23 08:54:501340ブラウズ
画像型トロイの木馬の PHP 検出の練習
  1. /**
  2. +------------------------------------------------ -----------------------------
  3. * アップロードファイルアップロードクラス
  4. +----------- ---------- -------------------------------------- ---------- ----------------
  5. * @package Upload
  6. * @author nicegy
  7. * @version $Id: Upload.class.php 2014- 4-11 19:00:23 ナイスジー $
  8. +-------------------------------------- ---------- -------------------------------
  9. */
  10. class Upload {
  11. private static $image = null
  12. private static $suffix = 0; null ;
  13. プライベート static $imageType = array('.jpg', '.bmp','.gif','.png');
  14. '0' => 'エラーは発生しませんでした, ファイルは正常にアップロードされました。',
  15. '1' => 'アップロードされたファイルは php.ini の Upload_max_filesize オプションの値を超えました',
  16. '2' => 'アップロードされたファイルのサイズは、php.ini の MAX_FILE_SIZE オプションを超えました。指定された値。 '、
  17. '3' => 'ファイルの一部のみがアップロードされました'、
  18. '4' => 'ファイルはアップロードされませんでした'、
  19. '5' => 'ファイルは失敗しました。 . '、
  20. '6' => '一時フォルダーが見つかりません。'、
  21. '7' => 'ファイルの書き込みに失敗しました。'、
  22. '8' => 'ファイルの種類がサポートされていません'、
  23. '9' => 'アップロードされた一時ファイルが失われています。 ',
  24. );
  25. //@ ファイルのアップロードを開始します
  26. public static function start($feild = 'file') {
  27. if (!empty($_FILES) )) {
  28. self:: $status = $_FILES[$feild]['error'];
  29. if (self::$status > 0)
  30. return array('status' => self::$status, 'msg' => self ::$message[self::$status]);
  31. self::$image = $_FILES[$feild]['tmp_name'];
  32. self::$suffix = strto lower( $_FILES[$feild][ 'name'], '.'));
  33. return array('status' => self::_upload(), 'path' => self::$image, 'msg' => self::$ message[self::$status]);
  34. } else {
  35. return array('status' => self::$status, 'msg' => self::$message[self ::$status]);
  36. }
  37. }
  38. //@ プライベートアップロード開始
  39. private static function _upload($path = './upload/') {
  40. date_default_timezone_set('PRC')
  41. $newFile = $path date('Y/m . /d/His') . rand(100, 999) . self::$suffix;
  42. if (is_uploaded_file(self::$image) && move_uploaded_file(self:: $image, $newFile)) {
  43. self::$image = $newFile;
  44. if (in_array(self::$suffix, self::$imageType))
  45. return self::checkHex( ); ::$status = 0;
  46. } else {
  47. return self::$status = 9; }
  48. }
  49. //@ プライベート 16 進数検出ハッカー
  50. プライベート静的関数 checkHex() {
  51. if (file_exists(self:: $image)) {
  52. $resource = fopen(self::$image, 'rb');
  53. $fileSize = filesize(self::$image);
  54. if ($fileSize > ; 512) { // 先頭と末尾を取得します
  55. $hexCode = bin2hex(fread($resource, 512))
  56. fseek($resource, $fileSize - 512); 512));
  57. } else { // すべてを取得
  58. $hexCode = bin2hex(fread($resource, $fileSize));
  59. fclose($resource) /* ベースの 16 に一致します
  60. /* */ 16 進数
  61. /* は 16 進数の
  62. と一致します コードをコピーします
  63. php

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。