-1


現在、Yii SQL インジェクションに取り組んでいます。次のコマンド sql コマンドを実行します。

SELECT p.email, p.email_secret, p.verificationcode, r.name
        FROM personal p
        JOIN profile r
        ON p.email='example@example.com'

yii で次のコードを書きました。

        $connection=Yii::app()->db;  
        $command=$connection->createCommand();
        $command->select('p.email, p.email_secret, p.verificationcode, r.name');
        $command->from('personal p');
        $command->join('profile r', 'p.email = r.email');
        $command->where('p.email=:email', array(':email'=>'yeoh.chan1@gmail.com'));
        $rows=$command->queryAll();

これがどこで SQL インジェクションの脆弱性になるのか、もしそうなら、テーブルの結合に対処するためのより良いアプローチは何かを知りたいです。

4

1 に答える 1

2

これには変数がないため、SQL インジェクションの可能性はありません。ただし、メールアドレスをパラメーターとして渡すことを計画していると思います。:email パラメーターマーカーがあるため、安全です。

ここでちょっとだけ、$command->すべての行で繰り返す必要はありません。次のように記述できます。

    $connection=Yii::app()->db;  
    $command=$connection->createCommand();
    $command->select('p.email, p.email_secret, p.verificationcode, r.name')
        ->from('personal p')
        ->join('profile r', 'p.email = r.email')
        ->where('p.email=:email', array(':email'=>'yeoh.chan1@gmail.com'));
    $rows=$command->queryAll();

これが機能するのは、(distinct を除く) すべてのステートメント句がコマンド オブジェクトを返し、連結できるためです。明確にする必要がある場合->setDistinct()は、チェーンの最後のアイテムを作成できます。

于 2013-06-30T04:25:23.747 に答える