【发布时间】:2016-10-31 10:36:57
【问题描述】:
我真的是 Laravel 的新手,我不确定如何保护使用 DB::Raw 的 SQL Injections 查询。我已经阅读了documentation 的低谷,并且我读过它有点不安全,应该保护它,因为它作为字符串注入到查询中......
这些表达式将作为字符串注入到查询中,因此请注意不要创建任何 SQL 注入点
我的查询看起来像这样
DB::table('sub_category as sc')
->leftJoin('products as p', 'p.sub_cat_id', '=', 'sc.sub_cat_id')
->where('sc.category_id', '=', $categoryId)
->whereNotNull('p.sub_cat_id')
->select('p.*','sc.*', DB::raw('sc.sub_cat_id AS sub_cat_id'))
->groupBy('sc.sub_cat_id')
->get();
查询仅在页面上显示包含产品的类别。
【问题讨论】:
-
db:raw() 调用不使用任何用户提供的输入,因此可以安全地防止 sql 注入。
-
所以就像在 php 中一样,我只需要担心和保护用户输入、表单等的查询吗?剩下的 Laravel 会小心,因为使用的是 PDO,对吧?
-
这取决于 laravel 是否使用带有 pdo 的预处理语句。我不知道 laravel,所以无法帮助你。可能一个快速的谷歌搜索会为你确认这一点。
-
在他们的文档中.. 与我发布的问题相同的链接:
Note: The Laravel query builder uses PDO parameter binding throughout to protect your application against SQL injection attacks. There is no need to clean strings being passed as bindings.。好的,谢谢。