[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:
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:
Plus simple à lire non?
Il existe aussi d'autres méthodes notamment:
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]
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]
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|