2009-04-10 18 views
6

私はセキュリティホールが目立つアプリケーションを継承しました。許可されたPHPユーザーへのファイルへのアクセスを制限する

これはセッションベースのセキュリティを備えていますが、ファイルアップロード(ユーザー固有)は何ら保護されず、パブリックファイルツリーに格納されます。

ファイル名は、その通りに推測しにくいものの、機密データであるため、不正なファイルへのアクセスを防ぐためのセキュリティ手段を実装する必要があります。

ファイルの場所を移動することは実際にはオプションではないので、PHPハンドラスクリプトにリクエストを転送するためのhtaccessソリューションを検討しています。

誰もこのタイプのものや良い代替ソリューションを実装した経験がありますか?私がこの分野で苦労しているように、.htaccess構文の特定の例は非常に高く評価されています。

答えて

6

ハンドラへのリクエストをプッシュすると、格納されている場所が問題にならなくなるため、移動することはオプションではないということを実際に理解できません。しかし、あなたは現場の男です。そして、あなたは$_SERVER['PATH_INFO']から残りのファイルのパスと名前を拾う

RewriteEngine on 
RewriteRule path/to/where/these/files/live/(.*) /handlerscript.php/$1 

の.htaccessは次のようになります。

+0

mod_rewriteを忘れました..これはもっと良い解決策です。 – Matt

+0

ありがとう、私はこの解決策を見てみましょう - ファイルの場所を移動したくない理由は、ユーザーがファイルへのリンクを持つ電子メールを受信することです。私はまだそれができると思うが、リダイレクトを処理するためにもう少し作業が必要でしょうか? – BrynJ

+0

上記に加えて、ログインしていなければ(ハンドラを介して)ユーザーをログインプロンプトに戻す必要があります。 – BrynJ

0

私はあなたがイメージを提供するスクリプトを書いた後、htaccessを使ってブラウザからの実際のイメージへのアクセスを完全に制限する必要があるかもしれないと思います。

スクリプトは画像へのウェブパスを取り込み、ユーザがアクセスできるかどうかを判断し、fpassthruのようなものを使用して実際の画像をブラウザに送ります。

ただし、サービングスクリプトを参照するには、画像への参照をすべて変更する必要があります。

ので、代わりの/images/123/5423453245.jpgで画像をアクセスし、 それは

またはそれに似たような/image.php?images/123/5423453245.jpgされるだろう。

+0

私はあなたが言っていることを見ていますが、それは本当に私がしなければならないことです(リンクを変更する)。彼らは途中で画像ではありません:-) – BrynJ

3

さて、あなたは特定のフォルダのapacheの解析の.jpgファイルのあなたの.htaccessに以下を追加

AddHandler php5-cgi .jpg 

を作ることができ、あなたは要求に混乱があなたをrecomendingた方法を解析するためにPHPのファイルを設定することができますそして

を表示したいとu'dそしてちょうど正しい絵と一緒にJPEGヘッダを返す、特定の検証を行うと、ここで

<?php 
if($validUser) 
    { 
    header("Cache-control: No-cache"); 
    header("Pragma: No-cache"); 
    header("Content-Type: image/jpeg"); 
    //correct picture address 
    $img = imagecreatefromjpeg("2326_b_lil.jpg"); 
    imagejpeg($img); 
    } 
    else 
    { 
    //code for error image 
    } 
?> 

PL例ですもっと広範な例が必要な場合は、私に知らせてください。

+0

ファイルは一般的に画像ではありませんが、画像である可能性があります。あなたの例では私は思っていますが、イメージを再作成するのではなく、readfileを使うほうがいいでしょう(コードは圧縮されていない真のカラーファイルに変換された後、jpegに戻ります)。 – BrynJ

+0

この機能を使ってファイルデータを簡単に読み込んでブラウザに送るだけで、すでにjpegヘッダーを送信しているので、この手順を単純なfopenに置き換えて入力をエコーすることができます – perrohunter

関連する問題