Maison > cadre php > Laravel > Une brève analyse de la dernière vulnérabilité d'injection SQL dans le framework PHP Laravel

Une brève analyse de la dernière vulnérabilité d'injection SQL dans le framework PHP Laravel

藏色散人
Libérer: 2019-10-02 17:51:44
avant
3860 Les gens l'ont consulté

Laravel, le framework de développement PHP bien connu, a précédemment signalé une vulnérabilité d'injection SQL à haut risque sur le blog officiel. Voici une brève analyse.

Une brève analyse de la dernière vulnérabilité d'injection SQL dans le framework PHP Laravel

Tout d'abord, cette vulnérabilité appartient au codage irrégulier du site Web. Le responsable a donné un indice :

Une brève analyse de la dernière vulnérabilité dinjection SQL dans le framework PHP Laravel

Mais le responsable l'a quand même fait. Il a été corrigé et peut être corrigé en mettant à niveau vers la dernière version V5.8.7.

Localisons d'abord ici :

Illuminate\Validation\Rule
Copier après la connexion

La méthode d'écriture officiellement recommandée est :

Rule::unique('users')->ignore($id),
Copier après la connexion

Si le codage du site Web ne traite pas la valeur de $id à l'avance, l'utilisateur peut transmettez-le directement Donner des données malveillantes à la fonction ignore provoquera une injection SQL.

Suivons la fonction :

\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;
    }
Copier après la connexion

Ici nous n'envisageons pas d'écrire $id comme une instance Si $id est contrôlable par l'utilisateur, $idColumn peut être écrit directement comme vide, et enfin. attribué La situation est la suivante :

$this->ignore = $id; $this->idColumn = 'id';
Copier après la connexion

Si le code du site Web est structuré ainsi, la valeur saisie par le hacker est contrôlable :

$id = $request->input('id');
Copier après la connexion

Enfin, nous arriverons ici :

Illuminate\Validation\Rules\Unique.php public function __toString() {
        ...
        ...
    }
Copier après la connexion

Nous examinons les modifications du code clé :

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',
    }
Copier après la connexion

Le dernier code ici est la v5.8.7, qui donne directement $this->ignore aux addlashes. Il n'y avait aucune protection ici auparavant.

Ce qui est intéressant, c'est que l'auteur a comparé les diffs, au cours desquels le responsable a également essayé de filtrer d'autres lieux cités. Enfin, un filtrage unifié a été effectué sur __toString.

Enfin, le code suivant entrera dans DatabaseRule pour la correspondance ultérieure des règles SQL.

Illuminate\Validation\Rules\DatabaseRule.php
Copier après la connexion

Il n'y a eu aucun autre traitement après cela et une injection SQL a été formée.

Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne

Tutoriel d'introduction au framework Laravel pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:freebuf.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal