0

私のサイトには、次の行を含む dbSettings.php というファイルがあります。

<?php
    $host = "localhost";
    $dbName = "database";
    $user = "user";
    $pwd = "pass";
    $db = new mysqli($host, $user, $pwd, $dbName);
?>

require_once() 関数を使用して、このページをメイン ページに挿入します。サーバー (私のドメイン) を介してこのページにアクセスしている誰かが、これらの変数に格納されている値を取得する方法はありますか? これはデータベース設定を保持するための安全な方法ですか?

4

5 に答える 5

3

これは、php アプリケーションでデータベース資格情報を保持する一般的な方法です。通常、構成ファイルはこれらの設定を保持します。いくつかの良い方法は次のとおりです。

  • 次のようなファイルへの適切なファイル許可
    chmod the file 640 instead of 600. Keep file ownership to your user and change group to webserver. This way, the webserver can only read and not modify it
  • ファイルを webroot の外に移動して、他のユーザーが直接アクセスできないようにします
  • そのデータベース ユーザーに必要なデータベース権限のみを付与する
    If user just needs to access one database only give privileges for that database and data not give Structure or Administration related privileges if not needed
  • 可能であれば、で保護します
    .htaccess
    <files dbSettings.php> order allow,deny deny from all </files>
于 2013-08-06T02:52:27.627 に答える
2

Web サーバーが適切に構成されている場合、Web クライアントは設定を表示できません。.phpWeb サーバーを介してファイルにアクセスすると、スクリプトが実行され、出力されたものがクライアントに返されます。スクリプトのソース コードはクライアントに送信されません。

このようなファイルをウェブルートの外に置くことで、物事をより安全にすることができます。その後、クライアントはそれらに対処することさえできずrequire、別のスクリプトからdされることによってのみアクセスできます。

于 2013-08-06T02:49:07.260 に答える
0

dbSettings.php が URL 経由でアクセスできないことを確認してください。したがって、php はこのファイルを読み取ることができる必要がありますが、このファイルはブラウザーにアドレスを入力して (推測や運などによって) アクセスできないようにする必要があります。ただし、www サーバーを適切に構成していれば、php が処理され、空白のページがユーザーに返されるため、問題はありません。

php ページを処理せずにユーザーに返すように Web サーバーを誤って構成した場合のみ - 他のユーザーがファイルにアクセスしてダウンロードできるようになります。したがって、外部から設定にアクセスできないようにする必要があります。

それに加えて、実稼働サーバーでphpコードからこれらの値をエコーし​​たり、ダンプしたりしないでください。また、mysqlドライバーからのエラーをキャッチして、実稼働サーバーでユーザーに出力されないようにする必要があります。

于 2013-08-06T02:56:51.307 に答える
0

PHP のセキュリティについて私が知っていることから、この情報が漏洩する方法はいくつかあります。

  1. サーバーがページを処理することなく、クライアントが dbSettings.php を何らかの方法でロードできる場合。彼らはファイルを見るだけなので、明らかに詳細がわかります。一般的に言えば、サーバーが正しく構成されていて、バックアップ ファイルが作成されていない場合、これは問題になりません。
  2. dbSettings.php がクライアントによって読み込まれる場合、エラーによって情報が漏洩しないようにする必要があります (たとえば、mysqli の作成が失敗して情報が漏洩することはありません)。アプリが初期化されていないため、通常マスクしているエラーが表示される可能性があります。

情報を安全に保存することに関しては、Barmar が提案したように、構成ファイルを Web サーバーが実際にファイルを提供しない場所に配置するよりもはるかに優れたソリューションがあるとは思いません。通常、PHP はこれらのファイルにアクセスできますが、Web サーバーはそれらをクライアントに提供しません。ホストによっては、これが可能な場合と不可能な場合があります。

于 2013-08-06T02:53:09.020 に答える
0

以前の回答で概説したように、最も重要なセキュリティ対策は、適切な Web サーバーの構成です。

直接アクセスしてはならない構成ファイルを作成しているので、サーバーのルートの外、またはサーバーがファイルを提供しないように構成されているディレクトリに安全に配置できます。ファイルに適切なアクセス許可がinclude()ある限り、Web サーバーの助けを借りずにアクセスできます。

何らかの理由で構成ファイルをアクセス可能な場所に置くことに固執する場合は、define()トリックを使用して不正な実行を防ぐことができます。これは、実際の の前に構成ファイルを含めるようにファイルに定数を定義してから、構成include()ファイル自体に定数が存在するかどうかをチェックすることによって行われます。

example.php:

<?php
  define ('my_const', 1);
  include ('config.php');

  echo $super_secret_data;
?>

config.php:

<?php
  if (!defined ('my_const'))
    die ();

  $super_secret_data = 42;
?>

もちろん、ここでの唯一のセキュリティ上の利点は、ページが直接アクセスされた場合に実行可能コードが定数なしでは実行されないことと、そのデータが const を定義していないファイルからアクセスできないことです (これは、あいまいさによるかなり悪いセキュリティです。おそらくまだgetfilecontents()ファイルを呼び出すことができます)。

于 2013-08-06T03:13:14.207 に答える