我真的是 Laravel 的新手,我不确定如何保护使用 SQL Injections
的 DB::Raw
查询。我已经阅读了 documentation 并且我读过它有点不安全并且应该受到保护,因为它作为字符串注入(inject)到查询中......
Myquery 看起来像这样
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();
该查询仅在页面上仅显示包含产品的类别。
最佳答案
sql 注入(inject)风险 - 主要并且通常 - 如果有来自网络用户的 $_GET['foo'] 或 $_POST['bar'] 发送的数据。您应该通过将数据绑定(bind)到原始查询来保护您的数据库免受 SQL 注入(inject),如下所示:
$risky_input=$_GET['some_risky_input'];//assuming this comes from an input field
$result=
DB::select(
DB::raw("SELECT * FROM category WHERE category_name=:queriedterm ")
,['queriedterm'=>$risky_input]//binds data throuhg array
)
;
请注意冒号“:”和旁边的变量。这将保护您的查询免受 sql 注入(inject)。
注意:您的查询没有任何 slq 注入(inject)风险,因为它不包含来自网络用户填写的任何文本输入字段的参数。
关于php - 使用 DB::Raw 的安全 Laravel 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40340481/