web-dev-qa-db-ja.com

PHP scripts / directories?

私は友人がウェブサイトをあるウェブホテルから別のウェブホテルに移動するのを助けようとしています。古い場所は既に閉鎖されており、その中にあったもののフラットなtarファイルしかありません。

WebサイトにはHTMLドキュメントが含まれており、小さなJavaアプリケーション(携帯電話にロードされる))をダウンロードしてWebサイトにデータを送信できます。

モバイルJavaアプリケーションは文字列を_URL=<Host>/php/register.php_に送信しました。このphpスクリプトには、$link=mysql_connect()を使用してSQL DBに接続する別のphpスクリプト(_../inc/db_login.php_)が含まれていました。 。別のファイル_register.php_は、新しい送信データをDBに入れるためにSQL挿入を行いました。

私の質問は基本的に、この2 PHPファイルを新しいWebサイトに配置し、ディレクトリとファイルにどのような許可を与えるべきですか?

古いWebサーバーには、明らかに_/php_および_/inc_ディレクトリがありました。これらはいずれも新しいWebサーバーには存在しません。それらを作成する必要がありますか?どのような許可が必要ですか?別のPHPファイルにパスワードがある理由は、セキュリティでした。_/php_ディレクトリと_/inc_ディレクトリは、おそらく異なるアクセス権を持っていたと思います。

新しいサーバーにはディレクトリがあります:

  • _/httpdos_
  • _/httpsdos_
  • _/cgi-bin_
  • _/conf_(および他のいくつかはおそらく無関係です)

私の質問

  1. ファイル拡張子(_.php_)はサーバーにとって何か意味がありますか?PHPスクリプトはHTMLコードに「含まれる」(_<?...?>_の間、サーバーはファイルのサフィックスを見るか、それとも無関係ですか?(もちろん、サーバーは_<?...?>_に反応することを理解しています)

  2. パブリックファイル(私の場合は_register.php_)を_httpdocs/_ディレクトリに配置する必要がありますか、それともサーバー(Apacheと思う)は何かに反応して別のディレクトリにフェッチしますか?

  3. PHPスクリプトにパーミッション_R-X_(読み取りと実行)、_--X_(実行)、または_R--_(読み取り)が必要ですか?OSの観点から推測するとApacheはこのファイルを読み取っているだけなので、_R--_である必要がありますが、これはPHPサービスが「停止」されると、クライアントはすべてのPHP彼のブラウザのコード(?)。_--X_のほうがいいのですが、これはバイナリでも_#!_もないので、_--R_でなければならないでしょうか?

  4. Public PHPスクリプトを別のディレクトリに配置できる場合(たとえば、_/php_の代わりに_/httpdocs_)_/php_(およびスクリプト)が許可する必要があるもの?。サーバーは、この_/php_ディレクトリについて知っている必要があると思います(または、通常のデフォルトがありますか?)

  5. PHP含まれるスクリプト(_../inc/db_login.php_、SQLパスワードを含む)は_/httpdocs_の下にあるべきではありません。これは、私の_register.php_が含むファイルを含むことを意味します_/httpdocs_サブツリーの下にありません。これは機能しますか?サーバーは知る必要がありますか?

サーバーの構成を知っておく必要があるかもしれません。回答のデフォルトを仮定してください(変更されている場合は、変更箇所を確認できます)。

22

ディレクトリを使用するには、実行権限が必要です。通常、これは0755です。 PHP mod_phpを介して実行されるスクリプトは実行されず、読み取られます;これには0644で十分です。 SELinuxなどのパーミッションに関する追加の懸念があるかもしれませんが、上記は基本を説明します。

他のユーザーまたは外部クライアントがアクセスしてはならないドキュメントは、0600であり、Webサーバーユーザーが所有し、DocumentRootの外部に配置する必要があります。 mod_phpをセーフモードで実行すると、スクリプトがDocumentRootの外部に何かを含めることができなくなることに注意してください。嘆かわしい欠陥。

PHPファイルを640に設定します

maximum securityの場合、最小許可を設定する必要があります640 .

  • owner 6は、ファイルをアップロードするものです。
  • グループ4は、ファイルを提供するものです。 Apacheをグループメンバーにします。
  • nobodyは、他のユーザーがこのファイルを読み取れないことを意味します。 PHPスクリプトにはパスワードやその他の機密データが含まれることがあるため、重要です。

すべての人がphpスクリプトを読み取れないようにしてください。

便利なコマンド:

chmod 640 file.php
chown user:group file.php
usermod -a -G group Apache

これらのコマンドの機能:

  1. File.phpの所有権を変更して、ユーザーが読み取りと書き込み、グループ読み取りを行えるようにします。
  2. File.phpの所有権を、選択したユーザー名とグループ名に変更します。
  3. Apacheをファイルに提供できるように、Apacheをグループに追加します。そうしないと、640は機能しません。
13
kintsukuroi

1).php拡張子で終わるファイルは、ApacheによってPHPコンパイラーに渡されます。適切な構成がセットアップされていない場合、PHPファイルはサーバーによってテキストファイルとして提供されます。 httpd.confファイルのApache構成行「AddHandler php5-script php」は、これを設定するPHP5の方法です。

2)register.phpは、 http://www.example.com/php/register.php でアクセス可能である必要があります。Javaアプリがそれを探しているため、 Apache htdocsフォルダーには、register.phpファイルを含む「php」フォルダーが必要です。

3)PHPファイルには、Apacheサービスを実行しているユーザーによる読み取りアクセスが必要です。 PHPをApacheモジュールとして使用することは、PHPの場合とは別の「サービス」を意味しません。代わりに、Apacheサービスは、PHPファイルの要求を取得すると、PHPバイナリへのシェル呼び出しを行い、ファイルを解析して結果をApacheサービスに渡します。クライアントに。コマンドラインからPHP(CLIセットアップ)を使用している場合のみ、スクリプトは実行許可を必要とし、#!/path/to/php-bin行で開始します。

4)Apacheによって提供されるためには、要求されたファイル(register.php)がhtdocsにある必要があります。 「セーフモード」を無効にしてPHPを実行している場合、register.phpにhtdocsフォルダー外にあるファイルを含めることができます。

5)パス「../inc/db_login.php」は、最初にフェッチされたPHPスクリプト(register.php)に対する相対パスです。したがって、register.phpはhtdocs/php/register.phpにあるため、 htdocs/inc/db_login.phpのdb_login.php。

1

PHP/SuPHPと同様の両方のアクセス許可の問題に対処する関数をコーディングしました。

function realChmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('Apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}

たぶんそれはあなたにとって役に立つでしょう。

0
Alix Axel

すべてのPHP URLを介して直接アドレス指定することを目的としたファイルは、静的コンテンツと同じディレクトリに常駐できます(これは通常の方法です)。

インクルードファイルを保持するために、Webサーバーから見えるディレクトリ以外に少なくとも1つのディレクトリを作成することをお勧めしますが、PHPインクルードパスには '。'を含める必要があります。

ルートファイルシステムに多くの非標準ディレクトリを置かないことをお勧めします-デフォルトのウェブルートはディストリビューションによって異なりますが、通常は次のようなものを使用します:

/ var/www/htdocs-ドキュメントルート/ usr/local/phpとして-インクルードファイル用

もちろん、Webサーバーのchrrotを実行する場合は、これらを適切にマッピングする必要があります。

すべてのファイルは、Webサーバーが実行されているuidで読み取り可能である必要がありますが、このuidで書き込み可能なものをできるだけ制限できる場合は、潜在的な攻撃ベクトルを閉じます。

通常、webdevチームとしてグループ所有権を持つwebdevグループのメンバーが所有するdrwxrwSr-xとしてdirsをセットアップします(httpd uidはwebdevグループにありません)。したがって、ファイルは-rw-rw-rです。 -したがって、webdexグループの誰でもファイルを変更でき、httpd uidはファイルの読み取りのみが可能です。

1)ファイル拡張子(.php)はサーバーにとって何かを意味しますか?

はい-PHPインストールガイドを読んでください。

C.

0
symcbean