URL から動的に決定されたファイルをユーザーがダウンロードできるようにする必要がある状況にあります。ダウンロードを開始する前に認証を行う必要があるため、最初にスクリプトを実行してダウンロードする必要があります。手動でのダウンロードを防ぐために、すべてのファイルは Web ルートの外に保存されます。
たとえば、次のいずれかがダウンロード リンクである可能性があります。
- http://example.com/downloads/companyxyz/overview.pdf
- http://example.com/downloads/companyxyz/images/logo.png
- http://example.com/downloads/companyxyz/present/ppt/presentation.ppt
基本的に、フォルダの深さはさまざまです。
ディレクトリのトラバーサルを防ぐには、次のようにします: http://example.com/downloads/../../../../etc/passwd 明らかに URI をチェックする必要があります。(注: この情報をデータベースに保存するオプションはありません。URI を使用する必要があります)
次の正規表現は、ユーザーが怪しいものを入力しないようにする上で防弾となりますか?
preg_match('/^\/([-_\w]+\/)*[-_\w]+\.(zip|gif|jpg|png|pdf|ppt|png)$/iD', $path)
URIが正常であることを確認する他のオプションはありますか? おそらくPHPでリアルパスを使用していますか?