0

$_pdo = new Data('mysql:host='.$db_host.';dbname='.$db_name.';port='.$db_port, $db_user, $db_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET名前 '.$charset));

変数はフォームから来ます。この変数を取り除かないと、ユーザーは SQL インジェクションを行うことができますか?

4

2 に答える 2

1

接続資格情報は、どのような状況でもユーザーから取得するべきではありません。
それらをサーバーの構成ファイルに保存する必要があります。そして、接続文字列で使用します。
charset は、オプションではなく DSN で設定する必要があることに注意してください。

include 'settings.php';
$dsn = "mysql:host=$db_host;dbname=$db_name;port=$db_port;charset=$charset";
$pdo = new Data($dsn, $db_user, $db_pass);
于 2013-02-05T12:21:30.230 に答える
0

接続を作成するためにフォームからの入力を受け入れる場合は、おそらくいくつかのサニタイズ関数を使用して、使用する前にクリーンアップします。これがテキスト ファイルまたはデータベースに保存されている場合は、保存する前と使用する前にサニタイズすることをお勧めします。

http://php.net/manual/en/function.filter-var.php

$db_host = filter_var($db_host,FILTER_SANITIZE_FULL_SPECIAL_CHARS);

ENT_QUOTES を設定して htmlspecialchars() を呼び出すのと同じです。FILTER_FLAG_NO_ENCODE_QUOTES を設定すると、引用符のエンコードを無効にできます。htmlspecialchars() と同様に、このフィルターは default_charset を認識し、現在の文字セットで無効な文字を構成する一連のバイトが検出された場合、文字列全体が拒否され、長さ 0 の文字列になります。 http://www.php.net/manual/en/filter.filters.sanitize.php

于 2013-02-05T23:05:31.857 に答える