web-dev-qa-db-fra.com

Laravel Eloquent: la prévention des injections SQL se fait-elle automatiquement?

Étant donné l'exemple de code (Message est un modèle Eloquent.):

public function submit(Request $request){
    $this->validate($request, [
        'name' => "required",
        "email" => "required"
    ]);

    //database connection
    $message = new Message;
    $message->name = $request->input("name");
    $message->email = $request->input("email");

    $message->save();
}

Eloquent utilise-t-il des requêtes paramétrées (comme PDO) ou tout autre mécanisme pour empêcher l'injection SQL?

14
Zirou Qiu

Oui mais...

Oui, cela fait injection SQL prévention lorsque vous comptez sur la fonctionnalité ORM intégrée, comme $someModelInstance->save(). De les docs :

Le générateur de requêtes de base de données de Laravel fournit une interface pratique et fluide pour créer et exécuter des requêtes de base de données. Il peut être utilisé pour effectuer la plupart des opérations de base de données dans votre application et fonctionne sur tous les systèmes de base de données pris en charge.

Le générateur de requêtes Laravel utilise la liaison de paramètres PDO pour protéger votre application contre les attaques par injection SQL. Il n'est pas nécessaire de nettoyer les chaînes transmises en tant que liaisons.

Veuillez noter que vous n'êtes pas automatiquement protégé si vous créez des instructions SQL brutes et les exécutez ou utilisez des expressions brutes. Plus de documents :

Les instructions brutes seront injectées dans la requête sous forme de chaînes, vous devez donc être extrêmement prudent pour ne pas créer de vulnérabilités d'injection SQL.

Vous devez toujours utiliser des requêtes paramétrées lors de la création d'instructions ou d'expressions SQL brutes. Voir le dernier lien ci-dessus (et d'autres parties de la documentation, comme wel) pour plus d'informations sur la façon de le faire dans Laravel/Eloquent.

25
elixenide