1

私は自分の db テーブルのアイテムのみを表示する Web サイトを作成しました。あるページから別のページに変数を渡して特定のアイテムを表示します。

$aaa = _POST['aaa'];

$databasehost = "localhost";
$databasename = "mydb";
$databaseusername = "user";
$databasepassword = "password";

// Connect to the database server
$dbcnx = @mysql_connect($databasehost, $databaseusername, $databasepassword);
 if (!$dbcnx) {
 echo( "<font color='red'><P>can't connect to server.</P></font>" );
 exit();
  }
 // Select the database
 if (! @mysql_select_db($databasename) ) {
 echo( "<font color='red'><P>can't connect to db </P></font>");
 exit();
  }

 $aaa = mysql_real_escape_string($aaa)

 // and with $aaa I do my query

mysql_real_escape_string() で変数を保護することを読みましたが、クエリへのインジェクションを停止しますが、次の脆弱性を感じています。

 $databasehost = "localhost";
 $databasename = "mydb";
 $databaseusername = "user";
 $databasepassword = "password";

私はただ偏執的ですか、それともサーバーとデータベースに接続するこの情報を保護する方法はありますか?

4

3 に答える 3

4

サーバーにアクセスせずに db 接続情報を確認する方法はありません (PHP はサーバー上で実行され、ユーザーのブラウザーには送信されないため)。そうは言っても、それが心配な場合は、これらの変数を構成ファイルに入れて暗号化することを検討してください。

于 2012-11-05T00:43:08.613 に答える
1

$aaa 変数を介したインジェクションから厳密に保護することが目標である場合は、問題ありません。ただし、@MikeG が指摘したように、セキュリティを向上させるために、おそらく接続情報を Web ルートの外にある別の構成ファイルに移動する必要があります (誰かがデータベースの資格情報を取得した場合、インジェクションについて心配する必要はありません)。

于 2012-11-05T00:45:27.437 に答える
1

それは問題ではありませんが、心配な場合は、データベースに渡されるすべての値を文字列のmysql_real_escape_stringでエスケープし、数値の intval/floatval を取ります。

完全なセキュリティではありませんが、そうしないよりはましです。

于 2012-11-05T03:09:01.817 に答える