PHPを使用してMySQLに接続するためのチュートリアルでは、次のようなものが表示されます。
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'myuser','mypassword');
ローカルホストでこのように機能する接続がありますが、それをライブにするために、パスワードについてどうしますか?phpファイルにそのようなプレーンテキストのままにしますか?または、これを処理するためのより安全な方法はありますか?
ソースを見れば誰もあなたの接続文字列を見ることができません。それはあなたの生のコードを見ることによってのみ見ることができます。また、別のファイルに入れて、そのファイルをページに含めます。これは、接続を使用するすべてのページを編集する必要がないため、パスワードを変更する必要がある場合にも役立ちます。編集する必要があるのは1つのファイルだけです。
または、インクルードファイルに接続文字列を含めて、ドキュメントルートの外に配置することもできます。これにより、ブラウザを使用したり、FTPを攻撃したりした場合に、このファイルにアクセスできなくなります。これはプレーンテキストのパスワードのセキュリティに役立ちますが、誰かがローカルディレクトリにアクセスしたりアクセスしたりした場合でもアクセスできます。これを行うには、PHP構成変数を構成する必要がある場合がありますopen_basedir
。これにより、スクリプトがルート外のファイルと通信できるようになります。これはすべて、もちろんルートの背後にあるフォルダーにアクセスできるかどうか、およびその構成変数を変更できるかどうかによって異なります。
それ以外にできることはあまりありません。
インクルードファイルの例:
というファイルを作成しconn.php
、そこに接続を保存します。
$dbConn = mysql_connect($host, $user, $pass);
mysql_select_db("dbName", $dbConn);
接続が必要なページに、次のようにconn.phpファイルを含めます。
<?php
include("conn.php");
if (!dbConn) {
die('Sorry, our database did not load. Please try again later.');
exit();
}
$result = mysql_query("...");
?>
エンドユーザーは、PHPスクリプト内のテキストを表示することはできません。彼らはコードによって何が出力されるかを見るだけです。次のようなことを決してしない限り、そのようなパスワードを入れることができます。
$mySecretPassIs='TheBoogeyManCometh';
echo $mySecretPassIs;
そうは言っても、接続の詳細をスクリプトに入れて、必要に応じてさまざまなページから追加する方が簡単な場合がよくあります。パスワードなどを変更した場合、1か所で変更するだけで、含まれているファイルを1か所で安全に保管できるというメリットがあります。
それを回避する方法は本当にありません。その行をmysql_connect.phpファイルとinclude()
それに入れるだけなので、ソースページにはありません。
このように、誰かがあなたのソースを見ている場合でも、パスワードはすぐには利用できません。
データベースのアクセス許可でそのユーザーにデータベースに対する特定の権限のみが許可されていることを確認してください。パスワードが侵害された場合でも、ユーザーはその1つのデータベース内のものしか変更できません。