5

初めての読者、初めてのポスター (woo!)

そのため、非公式の Web サイト用のログイン スクリプトを実装しています。侵害される可能性は低いですが、念のため、MySQL データベースのログイン情報を PHP コードにプレーンテキストで保存することにセキュリティ上のリスクがあるかどうかを尋ねたいと思います。

私の知る限り、コード自体は Apache によって解析されるため、エンド ユーザーには表示されません (出力のみ)。 .

概要: mysql_connect、mysql_select_db、mysql_query を介してデータベースにアクセスします。ログイン情報は、スクリプトの各反復で定義されたローカル変数に格納され、スクリプトが終了すると (私が思うに) ダンプされます。

セキュリティの脆弱性?

4

6 に答える 6

10

ユーザー名とパスワードの組み合わせを、webroot の外部にある別の構成ファイルに移動することも検討できます。その場所が Web サーバー側から直接アクセスできないことを確認してください。

そうすれば、何らかの理由で Web サーバーが PHP ファイルを実行しないことを決定した場合でも、データベース サーバーへのアカウント情報が失われることはありません。

追加のボーナスとして、webroot で .php ファイルのコピーを作成するもの (エディター、SVN など) を使用する場合、.php の実行を回避するリスクはありません。

于 2009-06-13T20:27:52.740 に答える
7

これは、データベースと対話する Web アプリケーションの非常に標準的な手順です。

Web サーバーと自分以外のユーザーのファイルから読み取り権限を奪うことをお勧めします。ファイルをスパイできる他のユーザーがボックスにいる場合、それらは mysql サーバーにアクセスできます。

また、許可されていないユーザーがトップ ディレクトリに入るのを防ぐため、トップ ディレクトリの実行権限を調整する必要があります。

必要なボックスのみが接続できるように、mysql ユーザーの許可されたホストを強化します。

もちろん、あなたのマシンが危険にさらされ、攻撃者がルート アクセス権を取得した場合、あなたを保護できるものはほとんどありません。

于 2009-06-13T20:20:55.847 に答える
1

MySQL データベースへの接続方法はわかりませんが、PDO を使用すると、PDO コンストラクターが例外をスローする可能性があります。この例外をキャッチしないと、Zend Engine はデフォルトでバックトレースを表示し、接続の詳細を明らかにします!

接続認証情報を php ファイル/変数内に保存するか、その場合は PDO を使用して DSN (データ ソース名) に保存するのが普通です。解析されてプレーンにWebに送信されないため、phpファイル内に配置することをお勧めします...

安全性を高めるための 1 つのステップは、ログインの詳細を www-root の外に置くか、.htaccess ファイルで保護することです (これにより、Web サーバー経由でファイルにアクセスできなくなります)。

ただし、私のサーバーでは、localhost以外から接続することはできません。したがって、誰かが私のログイン情報を読んでも気にしません (もちろん、そうではありません)。

于 2009-06-13T23:47:01.060 に答える
1

すべての php ファイル (もちろん index.php を除く) を別のディレクトリに置き、それらを .htaccess ファイルで保護することにより、セキュリティのレイヤーを追加できます。これは、php パーサーが呼び出されず、apache がクリア テキストでファイルを返す場合をカバーします。役立つかもしれないもう 1 つのこと: <?php defined('some_id_here') or die(); ?>. index.php (some_id_here を定義する場所) を除くすべての php ファイルの先頭にこれを配置できるため、データベース ファイルに直接アクセスすることはできません。

于 2009-06-13T20:35:26.433 に答える
1

Webroot 内に大量のコードを配置しないことは、可能な場合でもありそうにない場合でも、実行できる防御の最初の行にすぎません。

データベースのユーザーとパスワードが公開されていたとしても、少数のソース マシンのみにデータベースへの接続を許可するという簡単な方法で、データベースを保護する必要があります。

多層防御

<?php  // simplest /index.php, as the only .PHP file in the public-accessible webroot
require '../bootstrap.php';
于 2009-06-13T20:39:23.460 に答える
0

その Web サーバーに root 権限でログインできる人なら誰でも (またはそれよりも低い権限でログインできる可能性があります)、あなたのパスワードを見ることができます。彼らはハッキングしてそれを見つけることができました)。このリスクとは別に、安全であるべきです。

編集: サーバーのバックアップを使用して (暗号化されていない場合、またはそれらを解読できる人がいる場合)、.php スクリプトで暗号化されていない場合は、パスワードを回復することもできます。この攻撃の可能性は、パスワードを別の安全な場所に保管し、非常に制限された状況でのみ (安全に) 送信することで、おそらく軽減される可能性があります (非常に不便/コストがかかります)。これはあなたが恐れている種類の攻撃ですか?

于 2009-06-13T20:20:37.810 に答える