2009-06-13 18 views
5

初回リーダー、初回投稿者SQLログイン情報をPHPコードに保存する際のセキュリティ上のリスクはありますか?

私は非公式のウェブサイトのログインスクリプトを実装しています。 PHPデータベースにMySQLデータベースログインを平文で保存すると、セキュリティ上のリスクがあるかどうか尋ねたいと思います。

私が知る限り、コード自体はApacheによって解析されるため、エンドユーザーはそれを見ることはできません(出力のみ)。これは保つのが安全であることを意味しますが、第二の意見のように。

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

セキュリティの脆弱性?

答えて

10

Webルートの外部にある別の設定ファイルにユーザー名とパスワードの組み合わせを移動することも考えられます。 Webサーバー側から直接アクセスできないようにしてください。

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

Webルート内の.phpファイル(エディタ、SVNなど)のコピーを作成するものを使用すると、.phpの実行が危険にさらされることはありません。

+6

真実。私が最初にLinuxを使い始めたとき、Geditがfilename.ext〜を作ったことに気付かず、フォルダをアップロードしたときに〜ファイルも一緒に行かれました。それから、私はmysite.com/index.php~に行くことができました。そこには平文のテキストがありました – sqram

+2

@lyrae:私は...良い主人、それを指摘してくれてありがとう。私は考えていませんでした.O.o *が実行され、削除されます。 –

+0

PHPファイルにパスワードが絶対必要な場合は、少なくともsha1またはmd5です。 – Shoan

0

そのWebサーバー(または多分あまりにも低いもの)にroot特権でログインできる人は誰でもあなたのパスワードを見ることができますが、スーパーユーザーからの防御は本質的に不可能です。パスワードを守れば、ハックして見つけることができます)。このリスクとは別に、あなたは安全でなければなりません。

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

7

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

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

また、トップディレクトリの実行可能アクセス権を調整する必要があります。これは、許可されていないユーザーが入力しないようにするためです。

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

もちろん、ボックスが侵害され、攻撃者がルートアクセス権を取得した場合、あなたを守ることはほとんどありません。

+2

+1 - MySqlユーザーにドロップ/許可などの権限がないことを確認することもお勧めします。 – karim79

1

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

+0

適切に設定されたApacheインスタンスがPHPパーサを起動していないことを誰も見たことがありません。 –

+0

OKです。私は実際にこのような仮説的なことは決して実際には起こらないが、それは言及する価値があると思った。したがって、 "echo filetype:php"のようなGoogle検索では何も表示されず、http://tppserver.mit.edu/index.php3のようなものは見つからないので、http://tppserver.mit.edu/tpp_www .inc:o)haha – merkuro

+0

私は最近のフェイスブックに起こったと信じています。 http://www.phpdeveloper.org/news/8433 – Shoan

1

ウェブルート内に大量のコードが存在しない場合、可能性はありますが、それは起こりうるものではありません。

データベースのユーザーとパスワードが公開されていても、少数のソースマシンだけでデータベースに接続できるようにするのが簡単です。深さの

防衛

<?php // simplest /index.php, as the only .PHP file in the public-accessible webroot 
require '../bootstrap.php'; 
+0

あなたのウェブホストが愚かではない場合にのみ動作し、すべてをオープン状態にする必要があります。 – jmucchiello

+2

...あなたが愚かなウェブホスティング会社にあなたのお金を渡す場合にのみ。 –

1

私はあなたのMySQLデータベースに接続する方法を知っていますが、PDOを使用する場合はPDOコンストラクタが例外をスローする可能性があるいけません。 この例外をキャッチしないと、Zend Engineはデフォルトでバックトレースを表示し、接続の詳細を表示します。

DSN(データソース名)でphpファイル/変数内に接続クレジットを格納するか、その場合はPDOを使用するのが普通です。私はそれが解析され、Webにプレーンを送信しないので、PHPファイルの中に入れることをお勧めします...

安全性への一歩は、ログインの詳細をwww-rootの外に置くか保護することですこれは.htaccessファイルを使用します(これにより、Webサーバー経由でファイルにアクセスできなくなります)。

私のサーバーでは、ではなく、をlocalhostから接続することはできません。だから誰かが私のログインの詳細を読んでも気にしません(もちろんそうではありません)。

+0

良い点。ローカル接続のみを受け入れるようにデータベースを設定する必要があります。これは、私が設定した方法とまったく同じです。乾杯! –

関連する問題