1

わかりました。非常に多くの人がこの質問をしています。DBへの接続を安全にする方法については多くのアプローチがあります。

今、私はいくつかのグーグルを行いました。多くの人が、DBコードへの接続をhtml_publicの外部のファイルに入れ、接続が必要になったときにそこから呼び出すことを提案しました。

正直なところ、私が持っているものに満足していますが、それがどれほど安全かはわかりませんが、

これが私がDBに接続する方法です:

まず、すべての入力が完全にエスケープされ、検証されていることを確認します...

後、同じページで、接続を行います。たとえば、次のようになります。

mysql_connect("localhost","Admin","Password") or 
die ("DB Connection Error");
mysql_select_db("Users") or die ("DB Error");

その後の残りのコードでは、mysql接続を閉じます。

さて、DBユーザー情報がページに書かれているのは正しくないと思いますが、誰か(「ハッカー」)がこの情報を取得するにはどうすればよいでしょうか。

つまり、すべての入力が完全にエスケープされて検証され、私が使用するユーザーには、選択や更新などの非常に限られた特権しかありません...のみです。

これは安全ですか?そうでない場合は、より安全な方法を提案できますか?

よろしくお願いします:)

日陰

4

3 に答える 3

4

このファイルをWebルートの外に置くことを検討する必要がある理由は、一部のホスティングプロバイダーがPHPの解釈を一時的に停止しているためです(構成の障害が原因で、多くの場合、更新後に)。その後、コードはクリアテキストで送信され、パスワードは公開されます。

次のディレクトリ構造について考えてみます。ここpublic_htmlで、はWebルートです。

/include1.php
/public_html/index.php
/public_html/includes/include0.php

ここで、このindex.phpについて考えてみましょう。

<?php
include('includes/include0.php');
do_db_work_and_serve_page_to_visitor();
?>

Webサーバーがオープンでこのファイルの提供を開始した場合、誰かがinclude0.phpをダウンロードしようとするまでにそれほど時間はかかりません。ただし、include1.phpはWebルートの外部にあり、Webサーバーによって処理されないため、誰もダウンロードできません。

于 2012-06-24T22:27:17.253 に答える
1

ホスティングプロバイダーがPHPを解釈せず、phpソースコードが公開されるという話は個人的に聞いたことがありません。PHPがインストールされていないRHEL5ベースのサーバーでこれを簡単にテストしたところ、phpドキュメントにアクセスしようとすると空白のページが返されました。

mysql_ *関数はphpの最新リリースで非推奨になり、全体としてより効率的で安全なソリューションとしてmysqliに移行しています。それを調べることをお勧めします。http://php.net/manual/en/book.mysqli.php-PHP5.4には、プレーンなmysql_関数を使用するための非推奨エラーなどはまだありませんが、最新の状態を維持したい場合は、mysqliを調べてください。

上記の質問に対する簡単な答えは、正直なところ、その方法はかなり安全だと思います。エスケープ文字などが設定されていることを確認してください。問題が発生することはないと思います。

編集:非常にまれなケースで、一部のプロバイダーがこの方法でphpソースコードをリークする可能性があると投稿した人もいます。この場合、私の最初のアドバイスはプロバイダーを切り替えることです。しかし、include_onceを使用して別のphpファイル/libからdb情報をロードすることはこれに対する迅速な回避策です。しかし、繰り返しになりますが、プロバイダーの設定でこのようなリークが許容される場合、私はプロバイダーのセキュリティについてあなたよりも懸念します。

(fopenを使用して)パブリックWebスペースの外部に保存されているテキストファイルからphpにDBパスワードを取得させることはできますが、個人的には、これを行う本当の理由はわかりません。

頑張ってください!

  • エオガン
于 2012-06-24T22:38:30.580 に答える
0

最良の方法は、古いmysqlAPIの代わりにPHPPDOを使用することです。

見てください:http://php.net/manual/en/ref.pdo-mysql.connection.php

また、興味深い記事があります:http: //net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

于 2012-06-24T23:03:56.497 に答える