【问题标题】:How to handle prepared statements/prevent SQL injection in Laravel 3 raw queries?如何在 Laravel 3 原始查询中处理准备好的语句/防止 SQL 注入?
【发布时间】:2013-06-28 08:58:10
【问题描述】:

是否有关于如何准备原始查询以防止 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)。

【问题讨论】:

  • @chetan 我的问题是如何...

标签: sql laravel laravel-3


【解决方案1】:

使用prepared statements来防止sql注入

对于 Laravel,使用查询生成器 http://four.laravel.com/docs/queries

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

【讨论】:

  • 谢谢,但我的问题是关于 Laravel 3。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2016-04-10
    • 2011-05-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多