要旨
SQLインジェクションに対して脆弱になることなく、GET内の可変数のパラメーターに依存するSQLクエリを実行したいと思います。
パラメータ
私のURLは次のように形成できます:
https://www.example.com/index.php?param1=blah1,param2=blah2,param3=a,b,c
またはこのように:
https://www.example.com/index.php?param1=blah1,param2=blah2,param3=a,b,c,d,e,f,g
つまり、param3には、可変数のコンマ区切りパラメーターa、b、cなどを含めることができます。
ホワイトリスト
a、b、cなどのすべてのパラメーターを確認します。クエリを実行する前に、承認済みのホワイトリストに登録されています。
// $valid_params is an array of pre-approved parameters.
$arr = explode(',', clean($_GET['param3']));
$params = Array();
foreach($arr as $param){
if(in_array($param, $valid_params)){
array_push($params, $param);
}
}
クエリ
私はデータベース接続を次のように設定しました(MySQLを使用):
$db_connection = new PDO("mysql:host={$DB_HOST};dbname={$DB_NAME}",$DB_USER,$DB_PASS);
$db_connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
そして、私はこのようなクエリを実行したいと思います(安全を除いて):
$comma_separated_params = implode(',',$params);
$result = $db_connection->query("SELECT {$comma_separated_params} FROM some_table");
目標
私がこれを安全かつ効率的に行う方法を誰かが知っていますか?