Heim > PHP-Framework > Laravel > Hauptteil

Eine kurze Analyse der neuesten SQL-Injection-Schwachstelle im PHP-Framework Laravel

藏色散人
Freigeben: 2019-10-02 17:51:44
nach vorne
3854 Leute haben es durchsucht

Laravel, das bekannte PHP-Entwicklungsframework, hat zuvor im offiziellen Blog über eine hochriskante SQL-Injection-Sicherheitslücke berichtet.

Eine kurze Analyse der neuesten SQL-Injection-Schwachstelle im PHP-Framework Laravel

Zuallererst gehört diese Schwachstelle zur unregelmäßigen Codierung der Website. Der Beamte gab einen Hinweis:

Eine kurze Analyse der neuesten SQL-Injection-Schwachstelle im PHP-Framework Laravel

Aber der Beamte hat es trotzdem getan. Es wurde gepatcht und kann durch ein Upgrade auf die neueste Version V5.8.7 behoben werden.

Suchen wir zunächst hier:

Illuminate\Validation\Rule
Nach dem Login kopieren

Die offiziell empfohlene Schreibmethode ist:

Rule::unique('users')->ignore($id),
Nach dem Login kopieren

Wenn die Website-Codierung den Wert von $id nicht im Voraus verarbeitet, kann der Benutzer dies tun Übergeben Sie es direkt. Die Übergabe schädlicher Daten an die Ignorierfunktion führt zu einer SQL-Injection.

Folgen wir der Funktion:

\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;
    }
Nach dem Login kopieren

Hier betrachten wir das Schreiben von $id nicht als Instanz. Wenn $id vom Benutzer steuerbar ist, kann $idColumn direkt als leer geschrieben werden zugewiesen Die Situation ist wie folgt:

$this->ignore = $id; $this->idColumn = 'id';
Nach dem Login kopieren

Wenn der Website-Code so aufgebaut ist, ist der vom Hacker eingegebene Wert kontrollierbar:

$id = $request->input('id');
Nach dem Login kopieren

Schließlich kommen wir hierher:

Illuminate\Validation\Rules\Unique.php public function __toString() {
        ...
        ...
    }
Nach dem Login kopieren

Wir werfen einen Blick auf die Schlüsselcodeänderungen:

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',
    }
Nach dem Login kopieren

Der neueste Code hier ist v5.8.7, der direkt $this->ignore zu addslashes gibt. Hier gab es vorher keinen Schutz.

Interessant ist, dass der Autor die Unterschiede verglichen hat, wobei der Beamte auch versucht hat, andere zitierte Orte herauszufiltern. Schließlich wurde bei __toString eine einheitliche Filterung durchgeführt.

Abschließend wird der folgende Code in DatabaseRule für den nachfolgenden SQL-Regelabgleich eingegeben.

Illuminate\Validation\Rules\DatabaseRule.php
Nach dem Login kopieren

Danach gab es keine weitere Verarbeitung und dann wurde eine SQL-Injection gebildet.

Weitere technische Artikel zu Laravel finden Sie in der Spalte Einführungs-Tutorial zum Laravel-Framework, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonEine kurze Analyse der neuesten SQL-Injection-Schwachstelle im PHP-Framework Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:freebuf.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage