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

PHP & Base de données Discussion :

Sécuriser du code php [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut Sécuriser du code php
    bonjour à tous,

    J'ai développé un site internet, il sera bientôt en ligne.
    Je me demandais comment je pouvais protéger mon site contre l'injection SQL, XSS etc ...

    J'ai trouvé PHP-IDS http://php-ids.org/
    Mais, de ce que j'en ai lu sur le net, il ne fait que détecter les intrusions, est-ce vrai ?

    J'ai trouvé framework Zend, mais là, c'est le gros flou ?? est-ce une bonne solution ???

    J'ai vu aussi HTML Purifier http://htmlpurifier.org/
    Mais je n'ai pas envie de changer mon code et en plus il y a du php, donc je ne peux pas utiliser ça ????

    Pouvez-vous me conseiller ? j'aurais aimer trouve une couche qui s'insère entre l'interface graphique de mon site et mon code d'enregistrement dans la base de données ou de connexion (il y a une zone membre)

    Heureux de vous rejoindre et merci d'avance pour vos réponses

    Régis

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bienvenu parmi nous.

    Je ne peut que te conseillé de consulter nos faq's avant de poser tes questions, beaucoup de réponse trouveront gré à tes yeux.

    Par exemple pour ta question va voir ici

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    merci pour ta réponse, mais cela ne tiens pas que au mysql_real_escape_string(), sinon, il n'y aurait aucun soucis d'injection sql, certe c'est une bonne façon de ce protéger, mais c'est largement insuffisant.

    J'ai continuer à regarder php-ids qui me semlble le plus sérieux, mais j'ai énormément de mal à l'utilise. Visiblement, s'il y a une intrusion détecter on peut orient vers une page d'erreur ... je patauge un peu

    Est-ce que quelqu'un à déjà utilisé php-ids ?? avez-vous des exemples ?
    Existe quelques chose (un script ou autre) pour filtrer les injections ?

    Merci pour votre aide

    Régis

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    cela ne tiens pas que au mysql_real_escape_string(), sinon, il n'y aurait aucun soucis d'injection sql, certe c'est une bonne façon de ce protéger, mais c'est largement insuffisant.
    Aurais-tu en tête un cas ou la fonction ne suffit pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Aurais-tu en tête un cas ou la fonction ne suffit pas ?
    Injection XSS, notamment. Ainsi qu'injection par donnée ASCII. De meme que cela ne protège pas en cas d'attaque par overflow sur un système master-slave (certaines versions de Mysql).

    Bref, n'utiliser que cette fonction n'est pas sécuriser un site. Il est nécessaire d'ajouter des tests (regexp), ou des outils (php-ids).

    Concernant php-ids, je l'ai utilisé et mis en place sur un site à 20 millions de views/mois. Ca fonctionne très bien.

    Et oui, l'idée de phpids, c'est de donner un "poids" à chaque détection. Et si cette valeur dépasse le seuil que tu lui autorise, il interrompt purement et simplement le script (on l'avait couplé à un système de ban temporaire par iptables. Très très efficace).

    Tu trouveras quelques infos sur mon blog: http://www.olivierlange.com/2009/02/...-son-site-web/

    Onet

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Injection XSS, notamment. Ainsi qu'injection par donnée ASCII.
    Pourrais-tu être plus précis ?

    Je ne vois pas le rapport entre le XSS et l'injection SQL.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Si j'injecte dans un champ de formulaire cette valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>alert(document.cookie)</script>
    et que mon code ne le bloque pas a l'enregistrement, au moment ou ma page va faire un remplacement (par exemple quand tu veux réafficher ton pseudo, ou autre), le script sera exécuté.

    Je te donne un exemple simple, mais il est évident qu'a partir de ca, je peux te faire ce que tu veux (renvois sur google.com, envois d'un email contenant ton identifiant de session, etc...)

    Et cela ne sera pas protéger par ta fonction php.

    De meme pour l'injection ASCII:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    convert(int,convert(varchar,0x7b5d))
    -99999/**/UNION/**/SELECT/**/0,1,concat(1228208176,0x3a,8419),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
    Ou autres exemples. Je ne les ai pas tous sous les yeux (d'autant que certains passent meme a travers php-ids, si l'attaque se fait de manière non brutale).

    Onet

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Citation Envoyé par onet Voir le message
    Si j'injecte dans un champ de formulaire cette valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>alert(document.cookie)</script>
    et que mon code ne le bloque pas a l'enregistrement, au moment ou ma page va faire un remplacement (par exemple quand tu veux réafficher ton pseudo, ou autre), le script sera exécuté.

    Je te donne un exemple simple, mais il est évident qu'a partir de ca, je peux te faire ce que tu veux (renvois sur google.com, envois d'un email contenant ton identifiant de session, etc...)

    Et cela ne sera pas protéger par ta fonction php.

    De meme pour l'injection ASCII:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    convert(int,convert(varchar,0x7b5d))
    -99999/**/UNION/**/SELECT/**/0,1,concat(1228208176,0x3a,8419),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
    Ou autres exemples. Je ne les ai pas tous sous les yeux (d'autant que certains passent meme a travers php-ids, si l'attaque se fait de manière non brutale).

    Onet
    Salut,

    Pour l'injection XSS, je vois bien ou tu veux en venir. Et j'ai envie de dire que c'est normal, ce type d'attaque doit être évincé avec d'autres outils que la protection de requête sql.

    Par contre pour l'ASCII je suis un peu dubitatif.... Et effrayé. Peux tu prendre le temps de nous expliquer la faille de la requête que tu présentes et l'exploitation théorique?

    Enfin, utilises tu des outils tels que WAPITI (par exemple) pour détecter d'éventuelles failles ? As tu un avis la dessus.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    et que mon code ne le bloque pas a l'enregistrement
    Ah d'accord mais ce n'est pas un problème d'injection SQL mais un problème du contenu enregistré : ma requete sera bien traitée tel que prévu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Yop,

    En fait, pour l'injection ASCII, j'ai été confronté à de nombreuses tentative, mais une seule qui soit passée. Par contre, lorsqu'elle est passée, elle à planté une réplication SQL...

    Il s'agissais d'un bug non résolu sur un MySQL 4. Sur le serveur maitre, aucuns souci, la requete générait une erreur, mais lors de la synchro sur le slave, a partir des binaire, la réplication plantait, et le fichier de binaire était signalé comme corrompu... => la merde total. Et comme les hackers ont doublé leurs attaques par un DOS sur le serveur Mysql, on a perdu toute l'infra en peut de temps... Une vrai galère.

    Maintenant, te dire que cela n'est pas résolu sous la version 5, ou autre, aucunes idée... J'ai juste pris l'habitude de le checker et de l'empécher.

    Concernant les autres failles, je n'ai jamais constaté un effet, par contre, je le vois très souvent dans les logs de php-ids, donc je suppose qu'il doit y avoir une raison. Il faudrait creuser un peu la derrière.

    En fait, afin de sécuriser au maximum mes sites., j'ai pris l'habitude de valider par regexp toutes les données qui transitent. Ca couplé à phpids skinné et optimiser à mes besoins me permettent d'avoir des applicatifs relativements sécures.

    Concernant un audit de site, j'utilise plusieurs système. Déja un proxy qui me permets d'avoir un résumé de toutes les failles potentiels d'un site (il me sort pour chaque page sur laquel je suis passé les variable et post/get succeptible d'etre utilisée). Puis un peu de sqlmap, et wapiti également.

    Mais ca ne reste que pour dégrossir le terrain. Rien ne vaut une petite attaque manuelle par la suite.

    ATTENTION: c'est à titre préventif que je le fait, ou sous contrat avec un client! A ne pas faire sur un site en prod sans l'aval du propriétaire... Cela peut couter cher, très cher...

    Onet

  11. #11
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ah d'accord mais ce n'est pas un problème d'injection SQL mais un problème du contenu enregistré : ma requete sera bien traitée tel que prévu.
    Oui, effectivement, mais cela reste quand meme une faille, et très importante

    Onet

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Citation Envoyé par onet Voir le message
    Yop,

    En fait, pour l'injection ASCII, j'ai été confronté à de nombreuses tentative, mais une seule qui soit passée. Par contre, lorsqu'elle est passée, elle à planté une réplication SQL...

    Il s'agissais d'un bug non résolu sur un MySQL 4. Sur le serveur maitre, aucuns souci, la requete générait une erreur, mais lors de la synchro sur le slave, a partir des binaire, la réplication plantait, et le fichier de binaire était signalé comme corrompu... => la merde total. Et comme les hackers ont doublé leurs attaques par un DOS sur le serveur Mysql, on a perdu toute l'infra en peut de temps... Une vrai galère.

    Maintenant, te dire que cela n'est pas résolu sous la version 5, ou autre, aucunes idée... J'ai juste pris l'habitude de le checker et de l'empécher.

    Concernant les autres failles, je n'ai jamais constaté un effet, par contre, je le vois très souvent dans les logs de php-ids, donc je suppose qu'il doit y avoir une raison. Il faudrait creuser un peu la derrière.

    En fait, afin de sécuriser au maximum mes sites., j'ai pris l'habitude de valider par regexp toutes les données qui transitent. Ca couplé à phpids skinné et optimiser à mes besoins me permettent d'avoir des applicatifs relativements sécures.

    Concernant un audit de site, j'utilise plusieurs système. Déja un proxy qui me permets d'avoir un résumé de toutes les failles potentiels d'un site (il me sort pour chaque page sur laquel je suis passé les variable et post/get succeptible d'etre utilisée). Puis un peu de sqlmap, et wapiti également.

    Mais ca ne reste que pour dégrossir le terrain. Rien ne vaut une petite attaque manuelle par la suite.

    ATTENTION: c'est à titre préventif que je le fait, ou sous contrat avec un client! A ne pas faire sur un site en prod sans l'aval du propriétaire... Cela peut couter cher, très cher...

    Onet
    Bon sa va tu me rassures qd mm

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    J’apprends beaucoup en vous lisant, merci beaucoup

    Donc, si je résume :
    1 - utiliser la fonction mysql_real_escape_string(), en faisant attention au magic_quote dans mon php.ini
    2 - valider toutes les données qui transitent par le regexp
    3 - utiliser php-ids

    Je pense avoir un bon début de ce que je dois mettre en place pour limiter la casse.

    Concernant php-ids, j'ai réussi à le mettre en place grâce à ton lien onet (http://www.olivierlange.com/2009/02/...-son-site-web/), enfin, j'ai le PHPIDS is running
    Mais si je regarde la doc de php-ids, je remarque qu'il y a beaucoup de classes à exploiter, mais comment ?? Comment optimises-tu le fonction php-ids ? As-tu un tuto ou quelques explications de bases pour m'aider à me lancer une fois que php-ids est initialisé ?

    Encore merci à vous tous ...

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    onet tu pourrais nous en dire plus que l'attaque que tu as vécu ? son principe par exemple ?

    je pense qu'en matiere de sécurité il est important de connaitre precisemment les mecanismes contre lesquels on veut se defendre : j'ai repris des codes bourrés de protections farfelues que ne servaient a rien a part compliquer le code et qui laissait au contraire des portes grandes ouvertes ; j'avais discuté avec le codeur et il connaissait simplement mal les faiblesses classiques d'un site.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    je te rejoins à 300% sabotage, c'est la raison pour laquelle je tente d'aller chercher les infos essentielles pour ne pas noyer mon code.

    C'est la raison pour laquelle j'aimerais que onet nous donne un peu plus de billes qu'en à l'utilisation de php-ids, j'irai même plus loin, si seulement onet pouvait écrire un tuto à ce sujet, ce sera formidable (si je peux me permettre de faire la demande onet )

    Aussi, j'ai commencé à regarder des outils pour tester mon site, j'ai téléchargé webscarab, bon, je ne le maitrise pas du tout encore, mais ca peut etre une piste pour vous qui souhaitez savoir si votre site protégé.

  16. #16
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Citation Envoyé par Regis0122 Voir le message
    C'est la raison pour laquelle j'aimerais que onet nous donne un peu plus de billes qu'en à l'utilisation de php-ids, j'irai même plus loin, si seulement onet pouvait écrire un tuto à ce sujet, ce sera formidable (si je peux me permettre de faire la demande onet )
    Je vais regarder ce que je peux faire. Si j'arrive à me libérer 1 heure ce we, j'essaye de te pondre quelque chose

    Onet

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 153
    Par défaut
    ça manque sur le net un bon guide sur PHPIDS, on trouve des aides pour démarrer PHPIDS, ce que j'ai fait assez simplement, mais comment utiliser pas la suite les différentes classes proposées... et si je fais un formulaire, comment appeler PHP-IDS pour vérifier les intrusions ??? (j'ai lu que nous pouvions passer par un prepend_file qui serait définit dans le php.ini mais cela entraine des pb de path que je n'arrive pas à résoudre)

    Aujourd'hui j'utilise uniquement le IDS-Monitoring, autrement dit, je ne fais pas plus que ce qui est décrit dans cette page http://www.olivierlange.com/2009/02/...-son-site-web/que tu mentionnais plus bas.

    d'avance merci onet

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    oulala je serais aussi très intéressée par ce tutoriel j'ai aussi un peu de mal à intégrer correctement PHP-IDS.

    As-tu réaliser ce tutorial onet ?
    Regis0122, as-tu trouvé un tuto à partager avec moi ?

    Une autre question, je regarde de très pret Zend, qui offre une sécurité très intéressante, est-il nécessaire d'utiliser php-ids en plus de Zend ?

    Em.

  19. #19
    Membre éclairé
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Par défaut
    Salut,

    Alors, non, désolé, je n'ai pas encore eu le tempsde m'y mettre, désolé . trop de projet urgent sur le feu. je devrais avoir un peu plus de temps ces prochains jours, je vais essayer de vous pondre quelque chose d'ici la fin de la semaine.

    Onet

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/04/2013, 22h29
  2. Mettre un code php dans une variable...
    Par kedare dans le forum Langage
    Réponses: 6
    Dernier message: 19/09/2005, 12h55
  3. [Conception] Code php dans une base de donnée
    Par krfa1 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/09/2005, 10h58
  4. pb eval pour le code php dans une feuille xslt
    Par nipepsi dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 10/09/2004, 11h23

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