2011-07-10 15 views
4

私が取得ビデオのアップロードや画像のアップロード:安全なファイルのアップロードおよび検証を行うこと

私の環境:LAMP

EDIT:私ができるようになりますリモートアップロードとPOSTビデオのアップロード

EDIT2:私が取得するファイルは、元のファイル名を保存することはありません。

  1. 最初に私は$_FILESのMIMEタイプをチェックします。

  2. finfo_file(機能が存在する場合)もう一度 (PHP 5.3)またはシェルコマンドファイルを使用してチェックします。

  3. 上記のチェックをパスすると、ファイルはpublic dirに移動します。

この設定は安全ですか?または何か改善することはできますか?

+0

ステップ1はスキップする必要があります – dqhendricks

答えて

1

:-)私は、これは十分に私のために思える昨日穴当日読み、誰もが知っている:)

それがコーディング来るとき、私は初心者だとセキュリティ私はまた、以下のことをお勧めすることができます:

  1. is_uploaded_file filenameで指定されたファイルがHTTP POST経由でアップロードされた場合はTRUEを返します。これは、悪意のあるユーザーが/etc/passwdのように、スクリプトが動作してはならないファイルを処理するようにスクリプトを騙そうとしていないことを確認するのに役立ちます。この種のチェックは、アップロードされたファイルを使って行われたことは、その内容をユーザーに、または同じシステム上の他のユーザーにも明らかにする可能性があります。

  2. basename()などのファイル名は、basename(c:/fakepath/something.avi); // will return something.aviなどのファイル名のみを取得する機能があります。一部の人がディレクトリに似たファイル名を指定してコンピュータを欺こうとするためです。

    basename()について

より:

ファイルをアップロードすると、あなたは/uploads/フォルダの下に、たとえば、あなたがしたいディレクトリにファイルを移動したいとが、悪意のあるユーザーがこのようなファイルに名前を付けることができますsomething/hello.jpgとし、move_uploaded_file($source,$destionation)でファイルを移動すると、$destination/uploads/something/hello.jpgになり、問題が発生します。適切なファイル名だけが得られるようにするには、hello.jpgなどを返すbasename()関数を使用する必要があります。ここbasename訪問の使用方法については

$file_name = basename($_FILES["upload_ctrl"]["name"]); 
if(!move_uploaded_file($_FILES["upload_ctrl"]["tmp_name"],"uploads/".$file_name)) 
    echo "Opps I cannot upload the file"; 

http://php.net/manual/en/function.basename.php

+0

ああ私はいくつかのユーザーグループからのリモートファイルのアップロードを許可すると忘れました。 basenameについて私はあなたが私がphp.netを見たということを理解していませんが、私はまだそれを理解していません:) – Klob

+0

basename()は、追加のパスなしでファイルの名前を抽出します。 – ComFreek

+0

$ _FILES [tmp_name]をチェックすると、ファイル名が既に [tmp_name] => /var/www/vhosts/domain.com/tmp/p2A32.tmpに変更されています。 はこの悪用可能ですか?原因は、PHPはすでにファイルの名前を変更する、私はそれがbasenameが私を助ける方法を取得しないでください。 – Klob

1

限り、あなたはあなた自身のファイル名と拡張子の名前を変更しないと、何のアプリのコード内のタイプの脆弱性(すなわち含まれているとして:は、($ _ GETを[ 'whatever']);)、これはかなり良いです。サーバースタック上のすべてのものが最新バージョン(特にイメージ/ビデオを処理するもの)であることを確認したい場合もあります。

パブリックフォルダにファイルを保存し、src属性でファイルを直接参照する代わりに、ファイルを出力するファイル提供スクリプトを含めることをお勧めします。ウイルススキャンのすべてを推奨するものもあります。

+1

ここに、 http://stackoverflow.com/questions/6391916/is-it-important-to-verify-that-the-uploaded-file-is-an-actual-image-file – dqhendricks

関連する問題