ホームページ >PHPフレームワーク >Laravel >PHP フレームワーク Laravel の最新の SQL インジェクション脆弱性の簡単な分析

PHP フレームワーク Laravel の最新の SQL インジェクション脆弱性の簡単な分析

藏色散人
藏色散人転載
2019-07-18 13:38:333882ブラウズ

有名な PHP 開発フレームワークである Laravel は、高リスクの SQL インジェクションの脆弱性を公式ブログで以前に報告しました。

PHP フレームワーク Laravel の最新の SQL インジェクション脆弱性の簡単な分析

#第一に、この脆弱性は Web サイトの不規則なコーディングに起因します。担当者は次のヒントを提供しました:

PHP フレームワーク Laravel の最新の SQL インジェクション脆弱性の簡単な分析

でも公式はやりました パッチが適用されており、最新バージョン V5.8.7 にアップグレードすることで修正できます。

まずここを見つけましょう:

Illuminate\Validation\Rule

公式に推奨される記述方法は次のとおりです:

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

Web サイトのコーディングが事前に $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';

Web サイトのコードが次のように構成されている場合、ハッカーが入力した値は制御可能です:

$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 に直接与えます。以前はここに保護はありませんでした。

興味深いのは、著者が差分を比較し、その間に関係者が他の引用箇所をフィルタリングしようとしたことです。最後に、__toString で統合フィルタリングが実行されました。

最後に、次のコードは、後続の SQL ルールの照合のために DatabaseRule を入力します。

Illuminate\Validation\Rules\DatabaseRule.php

これ以降は特に処理はなく、SQLインジェクションが形成されました。

Laravel 関連の技術記事の詳細については、

Laravel Framework Getting Started Tutorial 列にアクセスして学習してください。

以上がPHP フレームワーク Laravel の最新の SQL インジェクション脆弱性の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はfreebuf.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。