/ webroot/uploads内にフォルダーを持つユーザーをnginxで拒否したい
例えば.
/webroot/uploads/user1
/webroot/uploads/user2
/webroot/uploads/user999
任意のシェル(php、pl、py、binary)を実行します。
シェルは多くの場合、jpgまたはgifファイルに隠されています。 badfile.php.jpgのように
また、悪意のあるバイナリファイルがフォルダにアップロードされているのもわかります。
ここに私の予備的なルールがあります:
location ~ /webroot/uploads/(.+)\.php$ {
deny all;
}
location ~ /webroot/uploads/(.+)\.pl$ {
deny all;
}
しかし、それが十分に堅牢かどうかはわかりません。だから私はあなたの助けに感謝します。
まず、設定ファイル( http://wiki.nginx.org/FullExample#mime_types )でmime.typesが適切に設定されていることを確認します。これにより、foo.php.jpgは引き続き使用されます。画像として扱われます。
また、チルダ(〜)だけでなくチルダアスタリスク(〜*)を使用すると、正規表現の大文字と小文字が区別されなくなります(したがって、blah.pHPやevil.PHpなどのファイルが防止されます)。
location ~* /webroot/uploads/(.+)\.php$ {
deny all;
}
採用できるアプローチの1つは、許可されている拡張機能をホワイトリストに登録し、他の拡張機能を処理することです。 Nginx 構文がありません 式に一致しないため、一致が見つかったときに「何もしない」ことができ、残りを拒否/リダイレクトできます
location ~* /webroot/uploads/(.+)\.(jpg|gif|png|mp3)$ {
# empty block
}
# all other requests come here
location / {
# redirect, deny, ...
}