2009-03-16 2 views
3

私はMacサーバーを持っており、ユーザーがイメージ、ドキュメント、およびビデオファイルをアップロードできるようにPHPコードを作成しています。これを研究することは間違いなく緊張しています。アップロードしたコンテンツをウイルスフリーにしたいのです。gif/jpg/png/pdf/doc、wmvファイル、実現可能なPHPアップローダーをビルドするか、何か買うべきですか?

自分自身が大きなチャレンジになることを自分で構築していますか?あなたはそれをやりますか、あるいはいくつかのOSやOTS製品を見つけるでしょうか? (あなたがお勧めできるものはどれか知っていますか?)

答えて

22

概念的には、あなたが話していることはかなり簡単です。アップロードを受け入れて処理するのは簡単ですが、あらかじめ構築されたソリューションを購入することについて心配する必要はありません。

一般に、画像や動画のようなものは、「ビューアアプリケーションが本当に貧弱で、何らかの形でコードを実行させることができない限り(「Internet Explorer」とも呼ばれます)とにかくそれらをスキャンしてください。サーバー上で実行できるコマンドラインスキャナ(Clam AVのようなもの)を見つけて、ファイルがアップロードされるたびにスキャナを介して実行し、スキャンに失敗した場合はアップロードを拒否してイベントをログに記録します。ここで

+3

私のIEの発言+1は、私を笑わせました - ) –

0

は、あなたのアイデアを得るだけので、アップロードされたファイルを処理するコードです:

foreach ($_FILES as $file) { 
    if (!$file['error']) { 
    move_uploaded_file ($file['tmp_name'], 'uploads/'. $file['name']); 
    } elseif (4 != $file['error']) { 
    $error_is = $file['error']; 
    // do something with the error :-) 
    } 
} 

header ('Location: ...'); // go to the updated page, like, with the new files 
die; 
5

あなたは非常に大きなファイルをアップロードする場合は、ユーザーが見ることができるように、あなたはまた、フラッシュのアップロード/ステータスバーを検討するかもしれませんアップロードされるファイルの量。 SWFUploadはそのための良い選択です。

あなたは、PHPでこのような何かを行うことによってClamAVの持つファイルをスキャンすることができます


$out = ''; 
$int = -1; 
exec('/usr/local/bin/clamscan --stdout /path/to/file.ext', $out, $int); 

if ($int == 0) 
{ 
    print('No virus!'); 
} 

/* 
Return codes from clamscan: 
0 : No virus found. 

     1 : Virus(es) found. 

     40: Unknown option passed. 

     50: Database initialization error. 

     52: Not supported file type. 

     53: Can't open directory. 

     54: Can't open file. (ofm) 

     55: Error reading file. (ofm) 

     56: Can't stat input file/directory. 

     57: Can't get absolute path name of current working directory. 

     58: I/O error, please check your file system. 

     59: Can't get information about current user from /etc/passwd. 

     60: Can't get information about user '' from /etc/passwd. 

     61: Can't fork. 

     62: Can't initialize logger. 

     63: Can't create temporary files/directories (check permissions). 

     64: Can't write to temporary directory (please specify another one). 

     70: Can't allocate memory (calloc). 

     71: Can't allocate memory (malloc). 

*/ 

+1

これは本当に素晴らしいです、ありがとう! – lynn

+1

+1これは非常に役に立ちました。乾杯:) – da5id

4

短い答えを:何かを購入しないでください。自分でコーディングすることで得られる経験と達成感は、はるかに価値があります。

長い答え:ユーザー入力の任意の形式を信頼することは、一般的には悪い考えです。しかし、あなたがユーザーデータを使って何をするかについては、常に最善の方法です。あなたが愚かなことをしないならば*、あなたは大丈夫でしょう、そしてあなたはその経験から驚くほど得られます。



(私はめったにことができます知っている*私はそれが少し曖昧だけど、あなたがそれを作った前にちょっと、間違いを特定してみてください;。。)

1

私は同じのようなものを構築しています今すぐMantoolsのためにdigitaraldからFancyUploadを使用してください。1.2.1

この例を確認してください:http://localhost/fancyupload/showcase/photoqueue/どのようにクールですか。

GET/POSTパラメータを使用してセッションをFlashに渡す方法をお読みになり、セッションクッキーは機能しません。ファイルの種類を確認してください。

個人的には、私はユーザーにビデオのアップロードを許可しません。ちょうどYouTubeを使用し、そのものを埋め込みます。

ああ、アップロードしたもののサムネイルを表示したい場合は、ImageMagickをGhostscriptとともにサーバーにインストールしてください。 ImagemagickはPDFからサムネイルを生成することさえできます!

0

サードパーティのウイルススキャナを使用して、ウイルスに感染していないことを確認してください。 (ウイルスをチェックするための独自のコードを書くのは難しい作業のようです)

例: Gmail私はYahoo!メールを使っていると思いますが、Yahoo!MailはMcAfeeを使用していると思います。

0

Keith Palmerは小さなスクリプトを提案します。

clamscanの代わりにclamdscanを使用してください。 clamdscanはsetup clamd(clamavデーモン)と通信しますが、clamscanはスタンドアロンアプリケーションであるため、ウイルスシグネチャがロードされるたびにロードされます。これはサーバーに大きな負荷をかける可能性があります。

さらに、clamukoを試してみることもできます(これにより、オンアクセス検索が可能になります)ので、clamukoが観測したディレクトリにファイルをドロップできます。

カーネルにモジュールを挿入できない場合は、FUSEベースのClamFSもあります。

1

「私自身は大きな課題になるだろうか?はい、そうです。それをサードパーティーのソリューションに委託するほど巨大ではありませんが、ここでコードしたいのは、おそらくPHPウェブスクリプトでコード化できる最も危険なことです。ユーザーがサーバーにファイルをアップロードできるようにします。受け入れようとしているファイルをフィルタリングして、ユーザがあなたのサーバにPHPスクリプトをアップロードするのを防ぐために、極度に注意する必要があります。フィルタリング中に人々がするよくある間違いは:

  1. まったくフィルタリングされません。
  2. 誤った正規表現に基づくフィルタは簡単にバイパス可能です。
  3. is_uploaded_file関数とmove_uploaded_file関数を使用しないと、LFIの脆弱性が発生する可能性があります。
  4. $ _FILES配列を使用せず(代わりにグローバル変数を使用)、RFI vulnsにアクセスできます。
  5. $ _FILES配列の型に基づいてフィルタリングします。ブラウザのようにfakeableです。サーバ側に基づいて
  6. フィルタ(すなわちこのコンテンツGIF8を持つファイルは、画像/ GIFファイルとして識別が、完全にPHPスクリプトとして実行される)
  7. 使用すると、ブラックリスト魔法ファイルが含まれているものをシミュレートすることにより、だまさMIMEタイプをチェック明示的に許可されているもののホワイトリスト作成とは対照的に、危険なファイルや拡張機能の私は行くことができる
  8. PHP実行ファイルの拡張子を再定義.htaccessファイル(つまり、TXT)をアップロードすることができ
  9. 不正なApacheの設定は...

、私はあなたが:)

を尋ねる前に、すでにおびえていたと思います

ウィルスのことによると、ええ、単にAVを実行します。

関連する問題