web-dev-qa-db-ja.com

PHPファイルが参照可能:これは脆弱性ですか?

PHPで開発されたWebサイトを持っている友人がいます。その上で彼のすべてのファイルを1つずつ参照できます(もちろん、PHPファイル)。

これはセキュリティホールだと思いますか?はいの場合、どの意味ですか?

41
user45139

あなたが説明しているのは通常のディレクトリ一覧です

enter image description here

それ自体では、ディレクトリの一覧表示はセキュリティ上の問題ではありません。ファイルとディレクトリの構造を理解した後でシステムのセキュリティが危険にさらされている場合は、 obcursityによるセキュリティ に依存していますが、これは悪いことです。 この悪い習慣の例は次のとおりです:

  • 機密ディレクトリ名を使用して機密ファイルにアクセスする。
  • 適切な権限を使用するのではなく、URLにのみアクセスするように実行特権機能を制限します。
  • 開発者のための特別なドア/バックドアを残します。

ただし、適切なセキュリティ対策を実装した後、適切なセキュリティ対策の一環として、システムの動作部分を覆い隠すことは有益です。システムについて表示する情報が少ないほど、攻撃者が入手できる情報が少なくなるため、攻撃者の仕事が難しくなります。

「それで、どうすればいいの?」あなたが尋ねる。シンプル:Webサーバー構成のディレクトリ一覧を無効にします。 Apacheでは、httpd.confと書かれている行を見つけます

Options Includes Indexes

行からIndexesを削除して、Apacheを再起動します。

59
Adi

@adnanおよび@ william-calvinの回答に追加するには:

それは「かもしれない」問題です;)

  1. たとえば、認証されたユーザーのみがアクセスできるファイルの名前が明らかになります(ログインしたユーザーの場合は「change_settings.php」と考えてください)。これ自体は問題ではありません。彼のWebサイトが適切に作成されている場合、各ファイルをロードする前に適切な承認チェックを実行します。別の観点から見ると、優れたクローラー/スパイダーは、アクセス可能なすべてのファイルを「マップ」します。

  2. 彼がバックアップファイルに煩わしい場合(secret.bakまたはblah.php.oldと考えてください)、他のユーザーはこれらのファイルを読み取ることができます。これは、クイックphpinfo()およびdb_dump.sqlファイルの場合にも当てはまります。

  3. Apacheの設定によっては、ファイルをインクルードし、これらにdb.incなどの非php拡張子が付いている場合があります。攻撃者はこれらを読み取ることができる場合があります。

だから、他の人が説明するように-それは悪い習慣です。それはそれからより多くの情報を与えます。

15
ndrix

はい、これは間違いなく問題です。

私があなたの構造を知っていれば、私はあなたのシステムをよりよく理解することができ、私はあなたのシステムを攻撃しやすくします。

ディレクトリのリストをオフにすることをお勧めします(CPanelを使用している場合は、これを参照してください チュートリアル )。

ハッカーの知識が少ないほど、考える必要が難しくなります。

5
William Calvin

Adnanの答えに追加するには、いくつかのPHP PyroCMSのようなフレームワークで、.htaccessファイルの組み合わせを使用し、index.php、すべてのディレクトリにあります。

.htaccessファイルは、php.configのようなファイルのサーバー設定の拡張のようなものですが、サイトフォルダーに直接含めることができます。ただし、許可されない場合や、サーバーファイル。また、たとえばクラウドのどこかにサイトがある場合など、サーバーファイルにアクセスできない場合でも使用できます。それらは、それらが置かれているディレクトリまたは子フォルダ内のファイルへのアクセスを制限するために使用できます。 PyroCMSおよびその他のフレームワークでは、すべてのフォルダーにhtaccessファイルが含まれていることが多く、その多くはフォルダーとそのすべてのサブフォルダーへのアクセスを制限または拒否します。

index.phpは、URLがフォルダーを指すときに表示されるデフォルトページの1つですが、サーバーファイルでこれらのデフォルトページを設定できます。たとえば、ユーザーがexample.com/folderに移動し、これらのデフォルトファイルがこのディレクトリにない場合、ページには友達が見ている可能性が高いものが表示されます。これは、おそらくアドナンが彼の回答で示しているビューです。ただし、そのフォルダーにindex.phpファイルがある場合は、代わりに<site folder>/folder/index.phpの内容がページに表示されます。 PHPフレームワークは多くの場合、すべてまたはほとんどすべてのフォルダとサブフォルダにindex.phpを持っています。これらのファイルの多くは次のようなものです:

<div>Forbidden!!!</div>
    <div>Please don't go here! It's very sensitive!</div>

これらの.htaccessファイルとindex.phpファイルは既にこれらのすべてのフォルダーに配置されているため、自分で行う必要はありませんが、サイトに合わせる必要がある場合、またはサイトに合わせる必要がある場合は、それらを取り出すことができます。これらのフレームワークを最終的に使用しない場合でも、カップルをダウンロードしてそれらの機能を確認すると、サイトの設計に役立ちます。ただし、その多くは数百メガバイトであるため、これに注意してください。

ちなみに、そうです、これらのファイルを閲覧可能にするのは悪い習慣です。この回答の要点は、ボイラープレートコードを何千回も(場合によっては文字通り)繰り返す必要がないようにするために使用できるツールがあることです。この質問のトピックには、これらのツールが役立つボイラープレートコードが含まれていることがよくあります。

2
trysis

はい、上記の回答に関しては、同じ情報を共有したくありませんが、私の組織で起こった実際の出来事。

Webサーバーがありました(フロントエンドのクライアントは、インターネットアカウント情報や充電機能などを確認できます)。

開発者がBigDumpをアップロードしてトリプルAサーバーデータをバックアップしましたが、その間に攻撃者はディレクトリのリスニングを確認し、すべてのスクラッチカードとアカウント情報を含むダンプファイルを見つけました。うまくいけば、彼は私に報告し、この問題を解決しました。

また、前述のように、あいまいさによるセキュリティに依存しており、ディレクトリリスニングを無効にする方がよいため、すべてのWebサーバーでこの機能を無効にするというポリシーを組織に作成しました。

2
Akam