1

私は最近、小規模な Web サイトのサブドメインを開いて、信頼できるユーザーがローカル ディスクからファイルをバックアップとしてアップロードおよび保存できるようにする任務を負っています。通常、この新しいサブドメインは、主に静的な Office タイプのドキュメント (Microsoft/OpenOffice ドキュメント、PDF、プレーン テキスト ファイルなど) を格納するために使用されます。

ナイーブなユーザーが致命的な可能性のあるファイル (たとえば厄介な PHP スクリプトなど) をうっかりアップロードしてしまう可能性がないようにしたいと考えています。理想的には、PHP と、セキュリティ上のリスクとなる可能性のあるその他のもの (CGI プロセス、サーバーサイド インクルードなど) を閉じたいと考えています。

スタック オーバーフローコミュニティが次の質問に答えるのに役立つかどうか疑問に思っていました:動的/実行可能コードを処理するすべてのファイル タイプ/プロセスをシャットダウンする最善の方法は何ですか。基本的な静的ファイル サーバー?

さまざまなキーワード/フレーズを使用して Google を調べましたが、共有サーバーのレベルの権限を持つ誰かから実行できるサブドメインを「安全」にするための適切なリファレンスが見つからないようです。

Web サイトは、典型的な LAMP アーキテクチャの Apache 2.2 で実行され、サードパーティの共有サーバーでホストされています。

私は以下にアクセスできます:

  • .htaccess(一般的な権限/制限のあるディレクトリ レベル)
  • php.iniおよび.user.ini(一般的な権限/制限のあるディレクトリ レベル)
  • いくつかのかなり寛大なオプションと機能を備えたコントロールパネルソフトウェア ( cPanel X )
  • 優れた技術サポート サービスを備えたかなり柔軟な Web ホスト

アクセスできません:

  • root アクセス (もちろん!)
  • httpd.conf
  • php.ini(アプリケーションサーバーレベル)
  • mysql.cnf

私には、ファイル サーバーに投資したり、サード パーティのサービスに外部委託したりするだけのリソースがないことを覚えておいてください。また、このサーバーは CDN の意味で使用される予定はないため、パフォーマンスは実際には問題になりません。

(また、JavaScript/VBScript などのクライアント側スクリプトについて何ができるかわかりませんが、提案は大歓迎です。)

前もって感謝します!

4

1 に答える 1

1

単純。ファイルへの直接アクセスを提供しないでください。としてコンテンツを提供するPHPスクリプトを介してすべてを実行しますapplication/octet-stream。例えば

<?php

$id = $_GET['id'];
$data = get_file_details_from_database($id);
if (user_is_allowed_to_access($id)) {
   header('Content-type: application/octet-stream');
   readfile($data['path_to_file_on_server']);
}

これにより、アップロードするファイルの種類はまったく問題になりません。直接http://example.com/nastyfile.phpタイプの URL を介して直接アクセスすることはできません。また、ユーザーが指定したファイル名ではなく、内部 ID 番号のみを使用してファイルをドライブに保存すると、さらにセキュリティが強化されます。ウェブサーバーは を実行しようとするかもしれませんが、それがドライブ上にあるnastyscript.phpだけの場合12345、サーバーはそれをどう処理すればよいかわかりません。

于 2013-07-30T14:15:30.073 に答える