Laravel 4 如何防止Laravel中的SQL注入?

Laravel 4 如何防止Laravel中的SQL注入?,laravel-4,Laravel 4,在我的控制器中,我有以下代码: public function create($brand_id) { Brand::findOrFail($brand_id); } 这是: public function search() { $q = Input::get('q'); $brands = Brand::where('title', 'LIKE', '%'.$q.'%')->take(80)->get(); 这个密码安全吗?所谓“安全”,我指的是SQL

在我的控制器中,我有以下代码:

public function create($brand_id)
{
    Brand::findOrFail($brand_id);
}
这是:

public function search() 
{
    $q = Input::get('q');
    $brands = Brand::where('title', 'LIKE', '%'.$q.'%')->take(80)->get();
这个密码安全吗?所谓“安全”,我指的是SQL注入安全。或者我应该在这里做一些变量清理?清理用户输入的最佳方法是什么?
非常感谢您的帮助:)

是的,Eloquent在幕后使用参数绑定,可以安全地转义where()中使用的任何输入。

文档说Eloquent在幕后处理此问题,但您也可以使用类似于
DB::escape($q)的方法
在更安全的方面

是,但注意where语句中并非所有参数都是安全的:

public function search() 
{
  $col = Input::get('col');
  $brands = Brand::where($col, 'LIKE', '%sql injection in column name%')->take(80)->get();
在这种情况下,sql注入是可能的


第一个参数:列名未经验证或检查,并且此处可以进行sql注入,请确保您自己正确保护它

我自己测试过这个。。。我不认为这是错误的correct@OkiemuteOmuta如果不安全,你能举个例子吗?因为文档说明:注意:Laravel查询生成器始终使用PDO参数绑定来保护应用程序免受SQL注入攻击。不需要清理作为绑定传递的字符串。例如,如果您使用的是Elount或query builder,Laravel为注入提供了开箱即用的保护。很有意思的是,为什么您认为它是不正确的。但是在查询生成器中使用原始语句时,它并不能保护您。如果它说它是正确的,并且代码显然证明它是正确的,那么这不是不必要的开销吗?您已经安全了。我们可以在带有动态参数的存储过程中使用它。