Laravel 使用原始SQL查询插入以避免SQL注入?

Laravel 使用原始SQL查询插入以避免SQL注入?,laravel,Laravel,我的数据库中有个性化的表和一堆复合键,因此我使用原始SQL查询来执行所需的CRUD操作。我在文档后面找到了一种插入的方法,它成功了,但我想知道,这种方法不容易受到SQL注入的攻击吗?我正在使用用户的输入来插入这些数据,但我看不出这些数据的消毒方法在哪里,也许我只是错了。你能指引我吗?这是我的密码: public function store(Request $request) { /*No composite keys here so I am using Eloquen

我的数据库中有个性化的表和一堆复合键,因此我使用原始SQL查询来执行所需的CRUD操作。我在文档后面找到了一种插入的方法,它成功了,但我想知道,这种方法不容易受到SQL注入的攻击吗?我正在使用用户的输入来插入这些数据,但我看不出这些数据的消毒方法在哪里,也许我只是错了。你能指引我吗?这是我的密码:

    public function store(Request $request)
    {
    /*No composite keys here so I am using Eloquent*/
        $song = new Song();
        $song->code = $request->code;
        $song->title = $request->title;
        $song->artist = $request->artist;
        $song->length = $request->length;
        $song->album = $request->album;
        $song->save();

        $genre = new Genre();
        $genre->id_gen = $request->genre;
        $genre->id_song = $request->code;
        DB::insert('INSERT INTO genres (id_gen, id_song) values (?, ?)', [$genre->id_gen, $genre->id_song]);
        return $song;
    }

查询使用占位符(换句话说,查询字符串可以存储为模板或常量)

这使sql引擎有机会将查询转换为准备好的语句

我对laravel没有任何了解,但这看起来像是对已准备语句的合法使用(因此对sql注入免疫)


换句话说,这种方法看起来是安全的(至少是w.r.t sql注入)。

以这种方式使用插入并不意味着sql注入风险,因为这就是所谓的参数化查询。您将以字符串形式生成查询,然后数据库系统将执行其自己的正确管理的替换来构造查询。我记不起这是在数据库还是驱动程序级别完成的

您所做的正是Laravel在内部所做的(构造参数化查询)

就您的实际代码而言,您正在做一些有点奇怪的事情。通过创建
类型
对象,将您的请求应用到该对象并保存,您仍然在进行插入。没有实际需要的原始插入


确保验证您的请求对象

总之,insert语句是安全的,但删除整行代码是因为它不是必需的。将其替换为
$genre->save()
=)