-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 回答