昨日、データベースに接続する最初の php スクリプトを作成しましたが、SO の助けを借りて、今では動作します! このスクリプトは私のローカルホストで実行されています。ライブ サイトにスクリプトを追加したいのですが、セキュリティが心配です。問題のサイトは PHP ベースの CMS です。この CMS 内には、特定のページのコンテンツを生成するために使用される「detail.php」というスクリプトがあります。昨日作成したスクリプトがこのコンテンツ内に表示されるので、mysqli (「get_vote_date.php」と呼ばれる) スクリプトを detail.php と同じディレクトリに追加しただけです。
<?php
include("get_vote_date.php")
?>
スクリプトは次のようになります。
<?php # script get_vote_date
// This file contains the db info
// This file establishes a mysql connection, connects to the db and then gets the most recent vote date for a particular page (incident_id).
DEFINE ('DB_USER','myname');
DEFINE ('DB_PASSWORD','pass123');
DEFINE ('DB_HOST','localhost');
DEFINE ('DB_NAME','local_sitename');
// make the db connection
$dbc = @mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME)
OR die ('Could not connect to mysql: ' . mysqli_connect_error());
// Set the encoding
mysqli_set_charset($dbc, 'utf8');
// set the query variable
$query = "SELECT MAX(rating_date)
AS last_date
FROM rating
WHERE incident_id = $incident_id;";
//connect and run the query
$result = mysqli_query($dbc, $query);
echo $result->fetch_object()->last_date;
?>
ご覧のとおり、ここには機密情報、つまりデータベース接続データがあります。スクリプトをそのまま追加するだけで十分ですか?ここでは、合理的な予防措置を超えようとしているわけではありません。私の目標は、妥当なセキュリティのみを備えたスクリプトを追加することです。
構成ファイルには、接続データも保持しているように見える database.php ファイルがあることに気付きました。
$config['default'] = array(
'benchmark' => TRUE,
'persistent' => FALSE,
'connection' => array(
'type' => 'mysqli',
'user' => 'myname',
'pass' => 'somepass123',
'host' => 'localhost',
'port' => FALSE,
'socket' => FALSE,
'database' => 'local_sitename',
),
'character_set' => 'utf8',
'table_prefix' => '',
'object' => TRUE,
'cache' => FALSE,
'escape' => TRUE
);
私の直感では、これらの変数をスクリプトに含めるよりも呼び出す方が安全であることがわかります。そうですか?私はPHPが初めてで、ここで配列内の変数を選択する方法を調査する必要さえあります. たとえば、上記の「pass」を呼び出す構文は何でしょうか? これが最善の方法でさえあるとしたら?
スクリプトをそのままにしておくべきですか、それとも config/database.php ファイルに含まれる接続の詳細を呼び出すべきですか? セキュリティ上の重要な考慮事項が他にありませんか?