ホームページ  >  記事  >  バックエンド開発  >  画像型トロイの木馬を検出するための PHP マルチシステム プログラミングの実践_PHP チュートリアル

画像型トロイの木馬を検出するための PHP マルチシステム プログラミングの実践_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:12:35818ブラウズ

少し前、私はオープンソース組織への参加を申請しました。そこで、イメージ内にトロイの木馬スクリプトが存在するかどうかを検出する関数を作成するように頼まれました。
実は、最初は何も知りませんでしたが、後でインターネットで情報を調べてみると、画像型トロイの木馬の作成に関するチュートリアルしか見つかりませんでしたが、検出プログラムはありませんでした。

少し考えた結果、私はこのトロイの木馬プログラムをその生成原理の観点から分析することにしました。このトロイの木馬プログラムは 16 進エンコードで書かれています。私は思いつき、次のアップロード クラスを書きました。ついに組織テストに合格しました。笑

さあ、取り出してみんなと共有してください。何か間違っていることがあれば修正してください。 anyon@139.com;

コードをコピーします コードは次のとおりです:

/**
+------------------------------------------------ -----------------------------
* ファイルアップロードクラス
+----------- -------------------------------------------------- - ----------------
* @package アップロード
* @author Anyon
* @version $Id: Upload.class.php 2013-3 - 20 21:47:23 アニヨン$
+-------------------------------------- --------------------------------------
*/
class Upload {
private static $image = null;静的 $status = 0;
プライベート静的 $suffix = null;
プライベート静的 $imageType = array('.jpg', '.gif','.png'); (
' 0' => 'エラーは発生しませんでした。ファイルは正常にアップロードされました',
'1' => 'アップロードされたファイルは php.ini の Upload_max_filesize オプションの値を超えました',
'2' => ; 'アップロードされました。ファイルのサイズが HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています。',
'3' => 'ファイルの一部のみがアップロードされました',
'4' => => 'ファイルのセキュリティチェックに失敗しました'、
'6' => 'ファイルの書き込みに失敗しました'、
'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']; strto lower(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' ); = $path . date('Y/m/d/His') . rand(100, 999) .self::umkdir(dirname($newFile)); :$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;
}
}
//@ プライベート static 関数 checkHex() {
if (file_exists(self::$image)) {
$resource = fopen(self::$image, 'rb')
$fileSize = filesize(self::$image); );
if ($fileSize > 512) { // 先頭と末尾を取得します
$hexCode = bin2hex($resource, $fileSize - 512 ); = bin2hex(fread($resource, 512));
} else { // すべてを取得
$hex(fread($resource, $fileSize))
}
fclose($resource) ; ;% ( ) %> */
/* は に一致します */
if (preg_match("/( 3c25。*?28。*?*?253e)|(3c3f。 $hexCode))
self::$status = 5;
else ::$status = 0;
return self::$status ;
} else {
return self::$status = 9;
//@ プライベートに作成されたディレクトリ
private static function umkdir($dir) {
if (!file_exists($dir) && !is_dir($ dir)) {
self::umkdir(dirname($dir));
@ mkdir($dir);
}
}
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326652.html技術記事少し前、私はオープンソース組織への参加を申請しました。そこで、イメージ内にトロイの木馬スクリプトが存在するかどうかを検出する関数を作成するように頼まれました。 実は私も最初は何もわからずネットで調べただけでした…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。