잘 알려진 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!