2011-02-05 14 views
4

私はPHPの初心者です、そして、PHPのセキュリティの質問があります。誰かが、デフォルト設定のサーバー上で動作するPHPスクリプトファイルのソースコードを取得することは可能ですか?もしそうなら、保護すべき最良の方法は何ですか?私は、サイトからページをリクエストしたときにPHPファイルをダウンロードして、私の懸念を引き起こしたものがあったため、これを尋ねています。私はおそらく、Apacheの設定が間違っていて、単純なファイルのように私にそのファイルを提供したと思うが、私は確信していない。また、データベースやsmtp構成などの「機密性の高い」データを保持するための最良の場所は何ですか?サーバのPHPソースコードセキュリティ

は、サーバがPHPファイルを処理するように設定されていない場合、それは、他の未知のファイルのようにそれらを扱う(そしてtext/plainまたはapplication/octet-streamいずれかとしてそれらを提供します、 アレックス

答えて

2

をいただき、ありがとうございます。

PHPのサポートを

+0

奇妙な例外は、PHPで書かれたPHPのサポートが組み込まれているNanowebです。答えは – mario

0

サーバーが適切にPHPコードを実行するように設定されている場合は、私が知っている限り、常に拡張子または外部プログラム(CGI、FastCGIなど)として提供され、サーバに直接アクセスできない人は、PHP souを見ることができませんrceコード。他に何もする必要はありません。

これは、サーバーがPHPを実行するように構成されておらず、代わりにソースとして表示できるテキストとして提供されたためです。

5

最も重要な情報については、Webルートフォルダの外に置いて、 "require"または "include"に含めることをお勧めします。このようにして、サーバ上でいくつかの設定が失敗する場合でも、訪問者は "include( 'secret_stuff.php');実際のスクリプトではありません。

+1

+1ですが、ファイルをドキュメントルートの外に置くことは、共有ホスティングサービスのオプションではないことがよくあります。 – casablanca

+0

私のサーバの再起動のいくつかの段階で、私はPHPソースを提供することができました。機密データ(例:dbクレデンシャル)をホームディレクトリに置くことは、基本的なセキュリティ違反です。 – Nabab

+0

共有ホスティングで(mediatemple、hostgator、godaddy)の経験がありますが、これはオプションです。一般的に、Webルートと見なされる「html」または「public_html」というフォルダがあります。あなたのディレクトリの下にあるものはインターネットからアクセスできない。私は信頼できるホストの99%が共有ホスティングの顧客にこのファイアウォールを提供すると思います。それは最も基本的なセキュリティ対策の1つです。 – dgig

2

David Dorwardが言ったことはまったく同じですが、誤った設定があるとソースコードを送信しないようにApacheを修正する次のパッチをお勧めします。Facebookの開発チームから

cd apache-1.3.x 
    patch -p1 -i ap_source_defense.patch 

複数のパッチ:http://mirror.facebook.net/facebook/patches/


あなたの多くの必要なソースを保護するための最善の方法は、外にそれらを配置することであるので、同様

http://mirror.facebook.net/facebook/patches/ap_source_defense.patch

パッチパブリックルートディレクトリは、あたかもapacheが動作しているかのように、フォルダから直接ファイルを提供することはできません。例えば

C:/server/apache/ 
C:/server/apache/includes/ 
C:/server/apache/htdocs/ 

、その後

内:

C:/server/apache/ 
C:/server/apache/htdocs/ 
C:/server/apache/htdocs/includes/ 

人々は私が

http://hostname.tld/includes/ 

に行くが、のディレクトリ構造を持つファイルを、特に見ることができます

C:/server/apache/htdocs/index.php 

あなたが持っている

<?php 
    require_once('../includes/config.php'); 
?> 

このすべての主要なファイルは、ビューファイルをバー保護する必要があります(index.php

0

あなたapache.httpd.confファイルに次の行を持っている場合は、

AddType application/x-httpd-php .php 

Apacheはデータを表示するのではなく、データを処理する必要があります。

phpサービスを開始する。

0

「デフォルト設定」とは、PHPがインストールされていない(またはPHPが無効の)Webサーバーです。これらの場合、PHPスクリプトをダウンロードすることは確かに可能です。

(それは生産のPHPサーバの〜100%になりますよう)は、PHPがインストールされていることを確認し、および/または、このような.htaccessファイルを使用して設定ファイルへのアクセスをブロック:あなたがしたい場合は

<FilesMatch "^config.php$"> 
    Order allow,deny 
    Deny from all 
</Files> 

余分な手間がかかります(.htaccessのファイルが無視されるサーバーでも動作します)。.ht.config.phpのように、構成ファイルの先頭に.htを付けます。ほとんどのApache(およびその他のWebサーバー)設定では、.htで始まるファイルの配信が拒否されます。しかし、一般に、Webサーバーがファイルを提供していないことを確認する唯一の方法は、サーバーのドキュメントディレクトリの外にあるディレクトリにファイルを移動することです。ほとんどのホストであなたやあなたのPHPスクリプトはそれらにアクセスすることはできません。

0

2番目の問題は設定ミスです。あなたがアクセシビリティのアクセシビリティを妨げるような書き換えを構築するオプションがあるかもしれないにもかかわらず、できることはあまりありません。

しかし、最良の防止策は、すべてのスクリプトをDOCUMENT_ROOTの外に保つことです。ただ一つのindex.phpをそこに残し、そこからすべての依存関係を含めてください。これは設定データの漏洩を避けるための最善の戦略です(機密データのためにiniファイルを使用せず、常に.phpスクリプトも使用します)。

しかし、もう一つの心配は共有ホスティングサーバーです。サーバ上のすべての同時ユーザは、あなたのスクリプトを読み込むことができます(PHPを経由せずにPerl/bash CGIを使用する場合)。 suexecを介してeverthingを実行することをサポートするプロのhosterに変更しないと、個別のアクセス権が許可されない限り、あなたはそれについて何もできません。

0

「デフォルト設定」は曖昧な言葉ですが、WebサーバーがPHP経由でファイル.phpを解析するように設定されている限り、その角度からは問題ありません。スクリプト自体が他のPHPファイル(例えばテンプレートシステムなど)を解析する場合、PHPスクリプトはサーバー上のファイルに完全にアクセスできるので、そこに抜け穴がないことを確認する必要があります。

これらが処理されていると仮定すると、特定の場所に「機密」データを保存する必要はありません。ファイルを.phpに入れてください。ただし、すべてのスクリプトは.phpで終了してください。 config.inc.php)、それらは常にPHPを介して解析され、プレーンテキストとしては送信されません。

関連する問題