我目前正在研究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注入,如果是这样,那么处理表连接的更好方法是什么。
答案 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()
作为链中的最后一项。