Yii加入表命令

时间:2013-06-30 03:48:54

标签: yii sql-injection


我目前正在研究Yii SQL Injection。我有以下命令运行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注入,如果是这样,那么处理表连接的更好方法是什么。

1 个答案:

答案 0 :(得分: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()作为链中的最后一项。