IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Injection sql php


Sujet :

Langage PHP

  1. #1
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut Injection sql php
    Bonjour

    Je subis actuellement des injection sql.

    Est ce que quelqu'un pourrai contact avec moi pour voir d'ou sa provient ?

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    au
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : au
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 52
    Points
    52
    Par défaut
    Comment vous savez que vous subissez des attaques par Injection SQL ?
    et dans quel page de votre site sont produites ces attaques ?

    car il faut savoir quel page pour corriger cette page il faut contrôler tout ce qui passe par vos variable avec se code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable=mysql_real_escape_string(htmlspecialchars($_POST['nom']));
    c'est en ajoutant mysql_real_escape_string et htmlspecialchars dans la variable ou vous subissez vos attaque pour vous protéger.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    En plus des conseils de Devildz, il faut bien garder en tête le principe fondamental : Never trust user input !
    Et attention, ce qu'on appelle user input, ce ne sont pas uniquement les valeurs récupérées en GET ou en POST. Un cookie, une variable de session, ...
    Toute valeur qui n'a pas été définie dans le code qui l'utilise doit être vérifiée !

    Ensuite, tant que cela est possible, il faut définir un format strict pour le genre de données attendues.
    Si on attend un nombre, on ne doit pas autoriser d'autres caractères que des chiffres, idem pour les chaines qui doivent être filtrées au maximum.

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; si sa peut t'aidé je vous propose ce lien http://www.php.net/manual/fr/securit...-injection.php
    SQL Inject-Me est Extension Firefox utilisé pour tester les vulnérabilités d'injection SQL.
    https://addons.mozilla.org/fr/firefo...sql-inject-me/
    bonne utilisation Red

  5. #5
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Quel est l'équivalend en odbc pour sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variable=mysql_real_escape_string(htmlspecialchars($_POST['nom']));

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    quel SGBD est utilisé pour gérer le site ?

  7. #7
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Comment on connait son SGBD ?

  8. #8
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    A ce que je vois dans la DOC les fonctions ODBC n'échappent rien d'autre que les apostrophes simple.
    Tu peux cependant passer par l'interface PDO qui elle échappe correctement les données (PDO::quote() ou bien avec les requêtes préparées).

  9. #9
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    Moi je fais sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    	function register($pseudo, $password, $email) {		
    		$pseudo = addslashes(htmlspecialchars($pseudo, ENT_QUOTES));
    		$password = addslashes(htmlspecialchars($password, ENT_QUOTES));
    		$email = addslashes(htmlspecialchars($email, ENT_QUOTES));
    Sa me semble plus que suffisant non ?

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par thebarbarius Voir le message
    Comment on connait son SGBD ?
    Tu lances une requête du genre :
    mysql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW VARIABLES LIKE "%version%"
    pgsql :
    sqlserver :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
    tu exécutes ces bouts de codes et si ça marche tu fais un var_dump() sur le retour de la requête.

  11. #11
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par thebarbarius Voir le message
    Moi je fais sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    	function register($pseudo, $password, $email) {		
    		$pseudo = addslashes(htmlspecialchars($pseudo, ENT_QUOTES));
    		$password = addslashes(htmlspecialchars($password, ENT_QUOTES));
    		$email = addslashes(htmlspecialchars($email, ENT_QUOTES));
    Sa me semble plus que suffisant non ?
    Absolument pas.

    1- htmlspecialchars n'a aucun effet sur les injection sql , il est en général conseillé de l'appliqué à l'affichage et non à l'insertion.

    2- addslashes n'echappe "que" ' " \ et NUL alors que les fonction spécifique au SGBD en on en général plus. Dans le cas ou il n'existe pas de fonction spécifique il est vivement conseillé d'utiliser les requêtes préparée en plus d'un filtrage/validation des données stricte.

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Voici une discussion qui a déjà abordé cette problématique : ici
    Bonne lecture

  13. #13
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Citation Envoyé par grunk Voir le message
    2- addslashes n'echappe "que" ' " \ et NUL alors que les fonction spécifique au SGBD en on en général plus. Dans le cas ou il n'existe pas de fonction spécifique il est vivement conseillé d'utiliser les requêtes préparée en plus d'un filtrage/validation des données stricte.
    Les requêtes préparées d'ODBC n'échappent que les apostrophes d'après la doc.

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Les requêtes préparées d'ODBC n'échappent que les apostrophes d'après la doc.
    Une requête préparée ça n'échappe pas, ca compile juste une requête à laquelle on passe ensuite des arguments.
    La requête étant compilée , tu peux lui passer ce que tu veux comme argument , il n'auront aucun effet.

  15. #15
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Exact, j'étais pas très bien réveillé.
    Je rajouterai cependant ce n'est pas pour autant qu'il faut toujours utiliser des requêtes préparées. C'est utile uniquement dans les cas où on exécute la requête plusieurs fois avec plusieurs injections différentes de données. Dans les autres cas c'est utiliser une bombe nucléaire pour tuer une mouche.

  16. #16
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par transgohan Voir le message
    C'est utile uniquement dans les cas où on exécute la requête plusieurs fois avec plusieurs injections différentes de données. Dans les autres cas c'est utiliser une bombe nucléaire pour tuer une mouche.
    Les SGBD on à peut près tous des caches des plan d'execution de leur requêtes. Donc concrètement tu prépares une fois une requête et la prochaine fois si elle est dans le cache la préparation sera récupérée du cache. Du coup pour des requêtes un peu complexes c'est même plus rapide qu'une query normale.
    Donc tout bénéf.

    Pour les requêtes simple le gain de tranquillité vaut bien les quelques ms perdues

  17. #17
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Points : 172
    Points
    172
    Par défaut
    sinon comme je disais je tourne sous ODBC et non mysql ou mysqli...

    Donc quel est l'equivalent de sa en odbc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variable=mysql_real_escape_string(htmlspecialchars($_POST['nom']));

  18. #18
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Y'a pas en ODBC puisque ça permet de se connecter à différent SGBD. La seule solution, c'est les requêtes préparées + un filtrage /validation des entrées utilisateurs.

Discussions similaires

  1. [MySQL] Sécurité PHP / Mysql - Injections SQL
    Par Ingesys dans le forum PHP & Base de données
    Réponses: 88
    Dernier message: 08/08/2012, 03h29
  2. [Sécurité] protections php pour XSS, injections SQL, etc
    Par nintendoplayer dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2008, 08h57
  3. Script pour protéger les formulaires PHP de l'injection SQL
    Par thebay dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 15/05/2007, 16h23
  4. [SQL+php] requete a trouver
    Par theclear dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/10/2004, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo