Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
Je fais mes requetes par la methode query, comment puis je proteger mes donnees contre les injections, cote insert, select, update.
merci
Hors ligne
Bonjour,
En commençant par suivre ces recommendations.
N'hésite pas à demander si t'as pas compris quelque chose.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
En commençant par suivre ces recommendations.
N'hésite pas à demander si t'as pas compris quelque chose.
++
J'ai mis mon code et je voudrais juste savoir comment le proteger des injections, on sait bien que je dois utiliser les quote, mais je voudrais me donner plus de conseils sur la securite de mes codes
Hors ligne
Bonjour
Alors, dans ces recommendations, si tu les suis à la lettre tu n'as plus de problèmes d'injection possible.
Quand vous développez une fonction pour accomplir une tache A à partir d'un paramètre p (ou plusieurs)
1) La fonction ne sait pas ce qu'est p si ce n'est un paramètre : Assurez vous de la bonne valeur du paramètre p avant de le valider et retourner un message d'erreur ou un Numéro d'erreur pour chaque mauvaise valeur de p qui est tentée d'être passée à la fonction.
Une attaque par injection survient quand par exemple en guise de mot de passe on place du code MySQL à la place pour avoir à éviter d'avoir à rentrer le mot de passe. Donc outre le fait de ne jamais passer les variables de saisie directement dans tes requêtes, le meilleur moyen s'est de vérifier ce qu'à saisi l'utilisateur comme dit précedemment.
Et pour cela, le MIEUX c'est de faire un preg_match sur tes variables.
++
Dernière modification par Jc (27-11-2011 20:37:22)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Saluton,
Autre petite précaution qui ne mange pas de pain, inverser, dans le code SQL, l'ordre des arguments de comparaison :
Ceci ne doit pas être considéré comme une alternative à ce que préconise Jc, c'est juste un petit plus.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Ca ne mange pas de pain en effet l'idée est plus que bonne! Merci MK
Dernière modification par Jc (25-11-2011 15:51:57)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
et je peux utiliser aussi quote()?
Hors ligne
Bonjour,
Oui tu peux, mais cela n'a rien à voir. Moi en général j'utilise addslashes() ou htmlentities() selon le contexte et uniquement pour les champs où je dois accepter que l'utilisateur utilise les simples ou doubles quotes.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
salut
moi, j'utilise PDO
a++
Hors ligne
Lol, tiens, y avait longtemps, et je ne comprends pas pourquoi cela ne m'étonnes pas^^ PDO, que j'utilise exclusivement aussi, ne m'évite pas de devoir utiliser addslashes ou htmlentities.^^
Sacré Pierrot
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
salut
moi, j'utilise PDO
a++
C'est plus qu'un bon début, Pierrot, mais pour être nécessaire, est-ce suffisant ? (sans vouloir l'être (suffisant))
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
mk->
les sécurités par défauts sont bien au dessus de ce que peu faire un débutant avec mysqli
a++
Hors ligne
Tu prêches un convaincu, Pierrot, je rappelle ici que je lançai, onques, cette croisade.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
est ce qu'on fait ce genre de protection (htmlentities, addslashes,..) meme pour les requete SELECT et DELETE, ou bien juste pour INSERT et UPDATE?
Hors ligne
Bonjour,
Cela serait bienvenu d'essayer de réfléchir un peu^^, sincèrement. Voici la doc sur la fonction addslashes.
Et voici le contexte que j'ai utilisé
Moi en général j'utilise addslashes() ou htmlentities() selon le contexte et uniquement pour les champs où je dois accepter que l'utilisateur utilise les simples ou doubles quotes.
Si pour saisir un nom de famille l'utilisateur s'appele O'Reilly (exemple du lien du manuel PHP et qui correspond au cas où l'utilisateur utilise une simple quote, que ce passe-t-il si l'on n'échappe pas la simple quote??
Regardons cela de plus près donc.
Donc comme je le disais, cela n'a rien à voir avec des problèmes d'injection^^.
Et selon comment vous définissez/structurez votre code vous pouvez même parfois vous en passer.
ex: Cas où vous autorisez uniquement les simples quotes dans la variable $nom via un preg_match préalable (pas de double donc).
Ecrire
Cas où vous autorisez uniquement les doubles quotes dans votre variable $nom via un preg_match préalable (pas de simple donc).
Vous autorisez les simples et doubles quotes dans votre variable. Pas le choix: il faut utiliser une fonction comme addslashes.
J'espère que cela est clair maintenant pour vous.
Par conséquent vous avez la réponse à votre dernière question.
Cordialement,
Jc
Dernière modification par Jc (29-11-2011 11:08:56)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Merci Jc pour l'explication
Hors ligne
yop,
perso je rappelerais la doc de addslashes
Un exemple d'utilisation d'addslashes() est lorsque vous entrez des données dans une base de données. Par exemple, pour insérer le nom O'reilly dans la base, vous aurez besoin de le protéger. Il est fortement recommandé d'utiliser les fonctions de protection spécifiques à chaque base de données (telle que mysqli_real_escape_string() pour MySQL et pg_escape_string() pour PostGreSQL), mais si la base de données que vous utilisez n'a pas de fonction spécifique, et que cette base utilise \ pour protéger les caractères spéciaux, vous pouvez utiliser cette fonction. Grâce à elle, \ sera ajouté. Si la directive PHP magic_quotes_sybase est activée, ' sera protégé par un autre '.
La directive PHP magic_quotes_gpc est à on par défaut, et elle appelle addslashes() sur toutes les données GET, POST et COOKIE. N'utilisez pas addslashes() sur des données déjà protégées avec magic_quotes_gpc sinon vous doublerez les protections. La fonction get_magic_quotes_gpc() est utile pour vérifier ce paramètre.
donc avec l'extension mysql(i) mysql(i)_real_escape_string
avec PDO quote() (et pas de requête préparée à tout va svp )
pourquoi ?
parce que comme le dit la doc de mysqli_escape_string
Les caractères encodés sont NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
alors que addslashes dit
Ces caractères sont les guillemets simples ('), guillemets doubles ("), antislash (\) et NUL (le caractère NULL).
Ca fait le même taff en mieux
quand au htmlentities, à réserver pour l'affichage, ceci rien que pour garder la possibilité de faire autre chose que du html avec ta base de donnée, par exemple utilise un soft fait dans un autre, java, C, ce que l'on veux pour utiliser en dehors d'un contexte web, ou plus simplement pour un export sur différent support, comme PDF ou n'importe quoi d'autre
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
Pages :: 1