0

DBに接続するためのクラスを作成する必要があります。次のようなDB情報のハードコーディングが悪いことを知っています。

$user = "xxx";
$password = "yyy";
$server = "zzz";
$dbname = "name";

mysql_connect($user,$password,$server);
mysql_select_db($dbname);

そのため、次のような「インクルード」を使用します。

include "config.php" 

これには必要なすべての変数が含まれているので、それらでmysql_connectを使用できます。しかし、私が知る限り、これも悪い習慣です。mysqliクラス(それを拡張する)を最も簡単な方法で、そしてもちろん可能な限り最も安全に使用するにはどうすればよいですか?

ヒントをありがとう

4

4 に答える 4

2

最後に、接続構成パラメーターをコード内に配置する必要があります。定数、クラスなどにあるかどうかは関係ありません。

これらの値をハードコーディングすることはセキュリティリスクではないと思います。phpスクリプトはサーバーにあります。したがって、それらはファイルシステムのアクセス許可とシステムのアクセス許可によっても保護されます。誰かがあなたのファイルにアクセスできる場合、セキュリティの問題はサーバーにあり、phpスクリプトにはありません。

PDOを使用します。dbアクセスを処理するクラスがあります。

PDO phpマニュアルから:

PHP Data Objects(PDO)拡張機能は、PHPのデータベースにアクセスするための軽量で一貫性のあるインターフェースを定義します。

接続は、PDO基本クラスのインスタンスを作成することによって確立されます。

例1MySQLへの接続

 <?php
 $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
 ?>
于 2012-10-26T14:02:08.280 に答える
1

現在、あなたの質問に答えることはできませんが、ヒントとして、このビデオをご覧ください。

これは、そこで役立つ可能性のあるPHPセキュリティシリーズです。

https://www.youtube.com/watch?v=Nx-g-0ynP_I

それが機能しない場合は、YouTubeでPHPセキュリティパート1を検索してください!

それが役に立てば幸い!

于 2012-10-26T14:02:16.660 に答える
1

データベース定数のハードコーディングについては、それほど安全ではありません(他の人が述べているように、どこかにある必要があります...)。ただし、お気づきのように、これらの値を別のファイルに入れることをお勧めします。さらに一歩進んで、ソース管理でこのファイルを追跡するのではなく、サーバーconfig.base.phpにコピーしてconfig.php構成するようなテンプレートを作成することをお勧めします。他のオプションがあります(私が働いている場合、これらのファイルを追跡しますが$(hostname).php、いくつかの巧妙なインポートチェーンを可能にする名前を付けますが、必須ではありません)が、これは簡単で安全なオプションであり、これらの値を除外するという利点がありますバージョン管理。これにより、これらのパスワードを提供しなくてもコードを配布できます。

自分自身に関係するより大きなセキュリティの問題は、Webアプリに必要な権限のみを持つように正面を向いたMySQLユーザーをロックダウンすることです。たとえば、一般に、Webサイトでテーブルをライブで使用CREATEするALTERことはお勧めできません。そのため、Webサイトで使用するユーザーにこれらの特権を付与せず、直接使用する別のより高い特権のユーザーを使用することをお勧めします。スキーマの変更をオフラインにします。

あなたの質問に対して、私はcommon.phpMySQLi接続を作成するためにクラスで次のことを行います。

require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
$db = @new mysqli(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno())
{
    if(DEBUG_MODE)
        $template->error('Failed To Connect To Database: '.mysqli_connect_errno().': '.mysqli_connect_error());
    else
        $template->error('Failed To Connect To Database.  Try reloading the page.  If this error persists, <a href="/contact.php">let me know</a>.');
}
于 2012-10-26T14:59:32.370 に答える
0

提案された答えはすべて正しいと思いますが、私の目的と状況のために、mysqliオブジェクトの作成とデータをエスケープするためのいくつかの関数を含むDBへの接続を含むファイルを作成しました。私がDB接続を必要とする他のすべての.phpにファイルを含めるよりも、クエリの使用と実行は非常に簡単です。誰かがより多くの情報や例を必要とするならば、私に知らせてください。

ありがとうございます

于 2012-10-26T20:01:45.620 に答える