如何在Laravel 3原始查询中处理预处理语句/阻止SQL注入?

时间:2013-07-01 09:23:16

标签: sql laravel laravel-3

是否有关于如何准备原始查询以防止SQL注入的最佳实践?我的代码看起来像这样(例如简化 - 实际查询更复杂,或者我只使用Fluent API):

$start = Input::get('start');
$end = Input::get('end');

$query = 'SELECT * FROM `readings` ';
$query .= "WHERE `date` BETWEEN '".$start."' AND '".$end."' ";

$readings = DB::Connection('customer')->first($query);

我应该怎样做才能避免上面的SQL注入风险?

(注意 - 以上代码适用于Laravel 3,但同等的概念也适用于Laravel 4)。

2 个答案:

答案 0 :(得分:0)

使用预准备语句来阻止sql注入

对于Laravel,请使用查询构建器http://four.laravel.com/docs/queries

$readings = DB::table('readings')
                    ->whereBetween('date', array($start, $end))->get();

答案 1 :(得分:0)

为了防止SQL注入,您应该使用带有域(数据类型)的参数,而不是使用字符串作为参数。可能最简单的方法是使用ORM或存储过程。 为什么? 因为当您使用普通字符串作为参数时,客户端可以在参数中输入任何值并使用sql注入攻击您!