forum pédagogique programmation systèmes
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Display Star Wars Unlimited Ombres de la Galaxie : ...
Voir le deal

Aller en bas
avatar
Admin
Admin
Messages : 112
Date d'inscription : 16/11/2018
https://progsys.forumactif.com

[A21] Formats des requêtes SQL à partir d'un serveur node.js Empty [A21] Formats des requêtes SQL à partir d'un serveur node.js

Lun 19 Juin - 15:28
La table et les champs n'ont pas besoin de ( " " ) guillemet, mais le contenue de chaque champs oui. Pour faire une requête nous voyons souvent ce qui suit:

Exemple:
Code:
var sql = "SELECT * FROM users WHERE name = '" + req.body.username + "' AND password = '" + req.body.password + "'"

Une propriété pure de javascript permet de nettoyer un peu tout ca, surtout si nous avons beaucoup d'entrées à inscrire, c'est les " backtick " (``)

Même exemple:  
Code:
var statement = `SELECT * FROM users WHERE name =${req.body.username} AND password = ${req.body.password}"

Plus simple à lire non?
Il existe aussi d'autres méthodes notamment:

Code:
connection.query('SELECT * FROM users WHERE username = ?', req.body.username, function(err, rows) { ...

qui permet de passer dans l'ordre exacte les valeurs au sein de la fonction de requête.

Échappements
Pour éviter des attaques par insertion il est recommandé d'utiliser l'échappement, lorsque possible. Bien que dans notre cas au point de vue académique ce n'est pas la priorité, je laisse savoir les curieux:

(de Wikipédia, modifié et traduit)
var sql = "SELECT * FROM users WHERE username = '" + req.body.username + "'";

La phrase SQL peut changer d'orientation si, par exemple, l'utilisateur entre son nom d'utilisateur comme étant:
blablabla' OR '1'='1
et ainsi la requête devient:

SELECT * FROM users WHERE name = ' blablabla' OR '1'='1';

et donc il pourrait peut être avoir accès à tous les utilisateurs puisque le tableau au complet dans ce cas est envoyé.

Pour plus d'information, "SQL injections" : https://en.wikipedia.org/wiki/SQL_injection

Une méthode facile avec node.js lorsque nous établissons la connection avec la base de donné, c'est de "échapper" (escape) l'entrée pour qu'elle soit toujours dynamiquement perçue comme une string peut importe le format:

connection.escape(req.body.username)

[Hans]
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum