我真的是 Laravel 的新手,我不确定如何保护使用 SQL InjectionsDB::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/

10-12 16:45
查看更多