2013-07-01 2 views
0

Есть ли какая-либо передовая практика по подготовке необработанных запросов для предотвращения внедрения SQL? Мой код выглядит следующим образом (упрощенный, например - фактический запрос является более сложным, или я бы просто использовать Fluent API):Как обрабатывать подготовленные заявления/предотвращать SQL-инъекцию в Laravel 3 необработанных запросов?

$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

@chetan мой вопрос был как ... – mtmacdonald

ответ

0

использовать подготовленные заявления, чтобы предотвратить SQL-инъекции

для Laravel, использование построителя запросов http://four.laravel.com/docs/queries

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

Спасибо, но мой вопрос был о Laravel 3. – mtmacdonald

0

Чтобы предотвратить инъекции SQL, вы должны использовать параметры с доменами (типы данных), вместо того, чтобы использовать строку в качестве параметров. Вероятно, самым простым способом будет использование процедур ORM или хранения. Почему? Поскольку при использовании простой строки в качестве параметров клиент может ввести любое значение параметра и атаковать вас с помощью SQL-инъекции!