2

昨日、データベースに接続する最初の 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 ファイルに含まれる接続の詳細を呼び出すべきですか? セキュリティ上の重要な考慮事項が他にありませんか?

4

2 に答える 2

1

セキュリティに関しては、この情報が保存されている場所に違いはありません。PHP が正常に動作している限り (プレーン テキストとして表示されるのではなく、実際に実行されていることを意味します)、情報は安全であるはずです (もちろん、別のユーザーがサーバー自体にアクセスできる場合を除きます)。

基本的に、適切に構成されたサーバーでは、誰も PHP ソース コードにアクセスできないため、そのソース コードからデータベースの資格情報を取得することはできません。悪意のあるユーザーが何らかの形で Web サーバーにアクセスしたとしても、このデータが保存されている場所に違いはありません。

ここでの問題は、セキュリティよりもむしろ効率の問題だと思います。個人的には、データベースの資格情報を常に 1 つのファイルに保存し、そのファイルを MySQL データベースと対話する他のすべてのファイルに含めています (通常は と呼びますdb.php)。db.phpデータベースの資格情報が変更された場合、ファイルをすべて調べてリストに表示されるたびに資格情報を変更するのではなく、単に編集するだけで非常に簡単になります。最終結果はまだ同じです。

したがって、あなたの質問に答えるために、ファイルを含めて、アレイdatabase.phpからのデータベース資格情報を使用します。$configお使いの CMS は、上記と同じ方法を使用している可能性が高いため、データベース資格情報を に 1 回だけ入力したのは (私が推測しているように) database.php、このファイルは、データベースと対話する他のすべての CMS ファイルに含まれています。

于 2013-08-20T16:09:22.797 に答える