0

クエリ文字列からデータを収集する

$cat_id=$_GET['cat_id']; // Actual 

$cat_id="'2','3'"; // Sample data format required

$sql="select * from table_name where cat_id IN ($cat_id)";

foreach ($dbo->query($sql) as $row) {

    $str=$str . "$row[subcat]".",";

}

クエリ文字列からデータを収集していて、その形式 (2 行目) で使用する必要があったため、ここでインジェクション攻撃を防ぐにはどうすればよいですか?

4

1 に答える 1

0

からの数字しかない場合、サブセットの各メンバー タイプを強制的に整数に$_GETする簡単な回避策があります。$cat_id

$cat_id = implode(
    ',',
    array_map(
        function($v){ return (int)$v; },
        explode(',', $cat_id)
    );
);

関数を使用し$cat_idて配列に分割し、各メンバーを を使用して整数に変換し、配列を. 結果は次のようになります。['1','2']explode()array_map(),implode()'1,2'

ただし、この質問を一読することをお勧めします。pdo を使用している場合は、パラメーター バインドFIND_IN_SET()の代わりに関数を使用してみてください。IN関連する質問:

  1. MySQL IN ステートメントの PDO バインディング値
  2. PHP PDO: 配列を IN() 条件にバインドできますか?
于 2013-10-26T10:40:17.210 に答える