Vous n'êtes pas identifié(e).

#1 10/08/2014 02:48:06

Jiff
Membre

Empêcher les injections SQL

Salut forumers,
.
Est-ce qu'en utilisant un PREPARE appelé à partir d'une PROCÉDURE STOCKÉE de la façon suivante, ma DB ne risque rien ?
.
PREPARE:

PREPARE fooplan (int, text, bool, numeric) AS 
    INSERT INTO foo VALUES($1, $2, $3, $4);

PROCÉDURE STOCKÉE:

CREATE FUNCTION machtiteps(INTEGER, TEXT, BOOL, NUMERIC, INTEGER, VARCHAR(48)) AS $$
   …
   EXECUTE fooplan($1, $2, $3, $4);
   …

Ou bien, suis-je _obligé_ d'utiliser les différents "quote_…()" sur $1, $2, $3 & $4 avant l'EXECUTE ?
.
Ah, merdouille, yauntrukaukeljavèplupensé sad
Je me réponds sur la question ci-dessus: elle est sans objet, puisque les utilisateurs n'ont aucun accès direct aux schémas ni aux tables, rien que des droits d'exécution, ou pas, sur des procédures (toutes SECURITY DEFINER).
J'en déduis donc qu'il _faut_ que j'utilise quote_…() sur tous les parms IN de mes procédures, puisque je n'aurais pas de requêtes préparées.
.
Reste la 2nde question: est-ce que cela protège également des injections n'utilisant pas les quotes, telles que décrites dans http://www.blackhatlibrary.net/SQL_inje … y_measures (par exemple; celle utilisant des "select chr(NN)||chr(XX)…) ?

Dernière modification par Jiff (10/08/2014 04:03:57)

Hors ligne

#2 10/08/2014 10:18:02

gleu
Administrateur

Re : Empêcher les injections SQL

suis-je _obligé_ d'utiliser les différents "quote_…()" sur $1, $2, $3 & $4 avant l'EXECUTE ?

Non, il ne faut surtout pas les utiliser, les requêtes préparées sont déjà protégées, même en dehors de procédure stockées.

est-ce que cela protège également des injections n'utilisant pas les quotes, telles que décrites dans http://www.blackhatlibrary.net/SQL_inje … y_measures

À ma connaissance, oui.


Guillaume.

Hors ligne

Pied de page des forums