1

というメディアディレクトリにフォルダーがあるとします/images/year/month/day。これらの画像の画像名とパスを取得し、ディレクトリ内のすべての画像をページで提供したいと考えています。

次に、/filesアプリケーション ファイルを含む別のフォルダーを作成します。構造などは同じです。

ファイルのすべてのアップロードは、データベースの一部として記録されます。画像はデータベース経由で保存されないため、画像の下のすべてのサブディレクトリからすべてのファイルを読み取り、年月日情報を含む可能性があります。

そのようなことをするのは安全ですか、どうすればそうすることができますか? そうするときに何を探す必要があるでしょうか。

ありがとう

4

1 に答える 1

0

はい、適切なエスケープを行う限り、そうしても安全です。アプリケーション ファイルが提供されないように、そのルート レベルのメディア ディレクトリ以外のディレクトリ トラバーサルを許可しないようにする必要があります。

これは、単純なバリア チェックで実行できます。

dir_to_serve = os.path.abspath(dir_to_serve) # get full path
if not dir_to_serve.startswith(media_dir): # maybe settings.MEDIA_DIR here?
    return # don't ever serve this

# code to serve from path

Django では、単に結果リストをos.walkからテンプレートに渡し、それをループすることができます。表示したくないテンプレート内の特定のファイル タイプまたはディレクトリ名を除外したい場合があります。

于 2013-07-02T16:12:07.110 に答える