旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Laravel > 正文

浅析PHP框架Laravel最新SQL注入破绽【laravel框架】,Laravel

作者:搜搜PHP网发布时间:2019-12-02分类:Laravel浏览:120


导读:PHP着名开辟框架Laravel,之前在官方博客通报了一个高危SQL注入破绽,这里简朴剖析下。起首,这个破绽属于网站coding写法不范例,官方给了提醒:但官方...
PHP着名开辟框架Laravel,之前在官方博客通报了一个高危SQL注入破绽,这里简朴剖析下。

起首,这个破绽属于网站coding写法不范例,官方给了提醒:

但官方照样做了修补,升级最新版本V5.8.7可修复。

我们先定位下这里:

Illuminate\Validation\Rule

官方引荐的写法是:

Rule::unique('users')->ignore($id),

假如网站coding没有预先对$id的值做处置惩罚时,用户能够直接通报歹意数据给ignore函数,就会致使SQL注入。

我们来跟一下函数:

\Illuminate\Validation\Rules\Unique.php class Unique {
... public function ignore($id, $idColumn = null) { if ($id instanceof Model) { return $this->ignoreModel($id, $idColumn);
        } $this->ignore = $id; $this->idColumn = $idColumn ?? 'id'; return $this;
    }

这里我们不斟酌把$id写成实例的状况,$id是用户可控的话,$idColumn直接写为空即可,末了赋值状况以下:

$this->ignore = $id; $this->idColumn = 'id';

假如网站代码相似如许组织的话,黑客输入的值就属于可控状况:

$id = $request->input('id');

末了我们会走到这儿:

Illuminate\Validation\Rules\Unique.php public function __toString() {
        ...
        ...
    }

我们看下症结的代码变动:

Illuminate\Validation\Rules\Unique.php
V5.8.7【最新版】 public function __toString() { $this->ignore ? '"'.addslashes($this->ignore).'"' : 'NULL',
    } 
Illuminate\Validation\Rules\Unique.php
V5.8.4 public function __toString() { $this->ignore ? '"'.$this->ignore.'"' : 'NULL',
    }

这里最新的代码v5.8.7,把$this->ignore直接给addslashes了,之前这里是没有防护的。

风趣的是,笔者对比了下diff,时期官方还试图对其他援用的处所举行过滤。末了照样在__toString处,举行了一致的过滤。

末了提一句,背面的代码会进入DatabaseRule,举行后续SQL划定规矩婚配。

Illuminate\Validation\Rules\DatabaseRule.php

这以后就没有再进一步处置惩罚,接着形成了SQL注入。

更多Laravel相干技术文章,请接见Laravel框架入门教程栏目举行进修!

以上就是浅析PHP框架Laravel最新SQL注入破绽的细致内容,更多请关注ki4网别的相干文章!

标签:Laravel