是否有关于如何准备原始查询以防止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)。
答案 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注入攻击您!