29

私のウェブサイトには、人々がzipファイルをアップロードできるアップロードフォームがphpで作成されています。次に、zip ファイルが抽出され、すべてのファイルの場所がデータベースに追加されます。アップロードフォームは、人々が写真のみをアップロードするためのものであり、ファイルがzipフォルダー内にあるため、ファイルが抽出されるまで、どのファイルがアップロードされているかを確認できません. 画像形式 (.png、.jpeg など) ではないすべてのファイルを削除するコードが必要です。人々が悪意のある php ファイルをアップロードできるのではないかと本当に心配しています。これは大きなセキュリティ リスクです。また、このセキュリティ機能を回避しようとして、php ファイルの拡張子を変更する人々にも注意する必要があります。

これは私が使用した元のスクリプトですhttp://net.tutsplus.com/videos/screencasts/how-to-open-zip-files-with-php/

これは、実際に .zip ファイルを抽出するコードです。

function openZip($file_to_open) {
    global $target;

    $zip = new ZipArchive();
    $x = $zip->open($file_to_open);
    if($x === true) {
        $zip->extractTo($target);
        $zip->close();

        unlink($file_to_open);
    } else {
        die("There was a problem. Please try again!");
    }
}

ありがとう、ベン。

4

10 に答える 10

15

まず、適切な画像ファイル拡張子を持たないすべてのファイルを禁止する必要があります。その後、getimagesize関数を使用して、ファイルが通常の画像ファイルかどうかを確認できます。

ただし、一部の画像形式ではコメントやその他のメタ情報が許可されていることに注意してください。これは、一部のブラウザーが特定の状況下で実行する JavaScript などの悪意のあるコードに使用される可能性があります ( Internet Explorer での危険な MIME スニッフィング を参照してください)。

于 2009-03-02T14:46:38.797 に答える
9

したがって、ファイル名の拡張子だけに頼るべきではありません。各ファイルをイメージ ライブラリに渡して、それが実際にイメージであることも検証してみてください。

于 2009-03-02T14:39:49.423 に答える
2

次のライブラリを使用してmimeタイプの検出を行うことも検討してください。

http://ca.php.net/manual/en/ref.fileinfo.php

于 2009-03-02T20:55:20.377 に答える
2

DB 内の php ファイルの名前を変更することにリスクがあるとは思いません...それらを PHP ファイルとして評価しない限り (またはまったく評価しない限り)、あまり害を及ぼすことはありません。 .php 拡張子がないため、php エンジンはそれらに触れません。

ファイルを検索することもできると思います<?php...

また、マシンにアップロードされたファイルについて最悪の事態を想定してください。それらを保存するフォルダーの名前を「ウイルス」に変更し、それに応じて処理します。公開しない、ファイルの起動許可を与えない (特に php ユーザー) など。

于 2009-03-02T14:40:23.587 に答える
1

これで、抽出のためにハードドライブのスペースに依存しています。ファイルヘッダーをチェックして、ファイルの種類を判断できます。おそらくそのためのライブラリがあります。

オフトピック: zip ファイルをアップロードする代わりに、ユーザーがいくつかの画像を選択できるようにした方がよいのではないでしょうか。zipが何であるかを知らない人にとってはより良いです(はい、それらは存在します)

于 2009-03-02T14:43:40.550 に答える
0

getimagesize 関数を使用します。完全な手順:- 1.) 画像/アップロードされたファイルの拡張子を抽出し、拡張子を許可された拡張子と比較します。2.) アップロードされたファイルの名前を変更するためのランダムな文字列を作成します。最良のアイデアはmd5(session_id().microtime()).複製することはできず、サーバーが非常に高速で、インクリメントされた変数を使用して文字列で追加するよりも1マイクロ秒未満で処理できる場合です。そのファイルを移動します。

ヒント アップロードディレクトリでPHPファイル処理を無効にします。これにより、サーバー側の攻撃が常に防止されます。可能であれば、ルートディレクトリまたはhttpd構成ファイルにhtaccessを追加し、そこからhtaccessファイルを無効にすると、最大の問題が解決します

于 2014-07-12T09:29:36.833 に答える