php - 使用 DB::Raw 的安全 Laravel 查询

标签 php mysql laravel-4

我真的是 Laravel 的新手,我不确定如何防止使用 DB::RawSQL 注入(inject) 查询。我读过 documentation而且我读到这有点不安全并且应该受到保护,因为它作为字符串注入(inject)到查询中...

These expressions will be injected into the query as strings, so be careful not to create any SQL injection points

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();

查询仅在页面上仅显示包含产品的类别。

最佳答案

如果有数据通过 $_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/

相关文章:

forms - 如何通过模型绑定(bind)将复选框组与 Laravel 一起使用

Javascript 不适用于最大/最小按钮?

php - TLS 协商失败 : ldap_connect with port other than default

mysql - 在更新查询中使用行号 - MySQL

mysql - phpmyadmin.pma_table_uirefs 不存在

laravel - 如何设置多个 bool 变量

java - 多个复选框选中值

php pdo 准备重复变量

MySQL 列更新与触发器

iis-7 - 在 Windows IIS Inetpub wwwroot 上安装 Laravel 4