>PHP 프레임워크 >Laravel >PHP 프레임워크 Laravel의 최신 SQL 주입 취약점에 대한 간략한 분석

PHP 프레임워크 Laravel의 최신 SQL 주입 취약점에 대한 간략한 분석

藏色散人
藏色散人앞으로
2019-07-18 13:38:333894검색

잘 알려진 PHP 개발 프레임워크인 Laravel은 이전에 공식 블로그에 고위험 SQL 주입 취약점을 보고했습니다.

PHP 프레임워크 Laravel의 최신 SQL 주입 취약점에 대한 간략한 분석

우선 이 취약점은 웹사이트의 불규칙한 코딩에 속합니다. 공식은 다음과 같이 힌트를 주었습니다.

PHP 프레임워크 Laravel의 최신 SQL 주입 취약점에 대한 간략한 분석

하지만 공식은 여전히 ​​패치를 만들었고 최신 버전인 V5로 업그레이드하면 문제가 해결될 수 있습니다. .8.7.

먼저 여기를 찾으세요:

Illuminate\Validation\Rule

공식적으로 권장되는 작성 방법은:

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

웹사이트 코딩이 $id의 값을 미리 처리하지 않으면 사용자가 악성 데이터를 무시 함수에 직접 전달할 수 있습니다. 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',
    }

The 최신 코드 v5.8.7 여기에 $ this->ignore를 직접 추가하면 이전에는 보호 기능이 없었습니다.

흥미롭게도 저자는 차이점을 비교했는데, 그 동안 관계자는 다른 인용 장소도 필터링하려고 했습니다. 마지막으로 __toString에서 통합 필터링이 수행되었습니다.

마지막으로 다음 코드는 후속 SQL 규칙 일치를 위해 DatabaseRule을 입력합니다.

Illuminate\Validation\Rules\DatabaseRule.php

이후 더 이상의 처리는 없었고, 그러다가 SQL인젝션이 형성되었습니다.

더 많은 Laravel 관련 기술 기사를 보려면 Laravel Framework Getting Started Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 PHP 프레임워크 Laravel의 최신 SQL 주입 취약점에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 freebuf.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제