Maison  >  Article  >  cadre php  >  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

藏色散人
藏色散人avant
2019-07-18 13:38:333857parcourir

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

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

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

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;
    }

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';

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

$id = $request->input('id');

Enfin, nous arriverons ici :

Illuminate\Validation\Rules\Unique.php public function __toString() {
        ...
        ...
    }

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',
    }

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer