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 :

Attaque croisée en php


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut Attaque croisée en php
    Bonjour,

    je me pose une question.
    J'ai un site développé en php couplé avec Mysql.
    Ce site propose de la saisie d'information via des formulaires en POST.
    Les valeurs postées sont récupérées dans un fichier php qui se charge de mettre les infos en base.

    Ma question est la suivante :
    Est ce que si quelqu'un reproduit mon formulaire sur un autre domaine en utilisant ma page php il peut injecter des données dans ma base.

    Si oui, existe t'il un moyen de savoir si le formulaire posté provient bien du domaine courant ?

    Merci
    Microsoft Certified Professional Developer SharePoint 2010

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Si oui, existe t'il un moyen de savoir si le formulaire posté provient bien du domaine courant ?
    $_SERVER['HTTP_REFERER'] te donne la page précédente, tu peux vérifier si elle correspond à la page censée soumettre le form.
    C'est un début mais c'est facilement contournable car ce n'est qu'une en-tête HTTP renseignée par le client.

    Donne-nous plus d'infos sur ce que tu veux faire précisément et dans quel contexte.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    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 386
    Points
    9 386
    Par défaut
    Et surtout que la moitié des navigateurs ne renseignent pas cette entête. :/

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  4. #4
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Autre solution ?
    Il doit surement y'en avoir... c'est une faille béante pour toutes les applications sinon..
    Microsoft Certified Professional Developer SharePoint 2010

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Fredo02 Voir le message
    Autre solution ?
    Il doit surement y'en avoir... c'est une faille béante pour toutes les applications sinon..
    utilise un captcha, ou une identification

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Fredo02 Voir le message
    Autre solution ?
    Quel est le problème précisément ?

    Il doit surement y'en avoir... c'est une faille béante pour toutes les applications sinon..
    Certains forums empêchent de poster un nouveau message trop rapidement.
    Certains sites utilisent des captcha pour s'assurer qu'il y a bien qqu'un et pas un robot-floodeur derrière la requête.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Et surtout que la moitié des navigateurs ne renseignent pas cette entête. :/
    Je viens de tester avec Firefox, Chrome et IE, ça passe sous XP.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Le problème du referer c'est que le mec qui prend le temps d'attaquer tes scripts à distance prendra soin de remplir les entête http de manière adéquate , donc tu ne peux pas te reposer la dessus.

    La sécurité la plus simple et très certainement la plus efficace reste de mettre en place un token (jeton en bon français).

    Pour schématiser :

    - Ton formulaire génère un jeton unique (chaine de caractère aléatoire par exemple). Ce jeton est stocké en session et dans un input hidden.

    - Au moment de la soumission du formulaire le token est donc envoyé avec ton formulaire (et fait donc partie des prérequis à la validation des données)

    - Sur ton script de réception des données tu compare simplement le token reçu et le token en session ainsi que son TTL (histoire de pas avoir des token illimité dans le temps). Comme il est unique si il ne correspond pas c'est que les données reçue ne proviennent pas du formulaire qui à généré le token.

    Un petit exemple simple : http://blog.oroger.fr/2009/07/31/se-...s-csrf-en-php/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par grunk Voir le message
    Le problème du referer c'est que le mec qui prend le temps d'attaquer tes scripts à distance prendra soin de remplir les entête http de manière adéquate , donc tu ne peux pas te reposer la dessus.

    La sécurité la plus simple et très certainement la plus efficace reste de mettre en place un token (jeton en bon français).

    Pour schématiser :

    - Ton formulaire génère un jeton unique (chaine de caractère aléatoire par exemple). Ce jeton est stocké en session et dans un input hidden.

    - Au moment de la soumission du formulaire le token est donc envoyé avec ton formulaire (et fait donc partie des prérequis à la validation des données)

    - Sur ton script de réception des données tu compare simplement le token reçu et le token en session ainsi que son TTL (histoire de pas avoir des token illimité dans le temps). Comme il est unique si il ne correspond pas c'est que les données reçue ne proviennent pas du formulaire qui à généré le token.

    Un petit exemple simple : http://blog.oroger.fr/2009/07/31/se-...s-csrf-en-php/
    tu peux bypass le token via cURL puisque qu'il aura une session, les tokens servent surtout pour être sur que c'est le même utilisateur qui soumet la requête

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    tu peux bypass le token via cURL puisque qu'il aura une session, les tokens servent surtout pour être sur que c'est le même utilisateur qui soumet la requête
    Tu pars du principe qu'il soumet le formulaire du site via cURL , l'op parlait d'un formulaire sur un autre site (en local par exemple) qui viendrait attaquer ses scripts de traitement.

    Mais dans le cas d'une attaque des formulaire du site directement via cURL y'a pas de solution miracle puisque même l'identification pourra êter bypassée
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par grunk Voir le message
    Tu pars du principe qu'il soumet le formulaire du site via cURL , l'op parlait d'un formulaire sur un autre site (en local par exemple) qui viendrait attaquer ses scripts de traitement.

    Mais dans le cas d'une attaque des formulaire du site directement via cURL y'a pas de solution miracle puisque même l'identification pourra êter bypassée
    en reproduction statique oui le token est la solution la plus simple
    en dynamique y'a le captcha

    (si on parle de bot bien-sur)

  12. #12
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    C'est quand même hallucinant qu'il n'y est aucune solution ultime à ce problème.
    Tous les sites sont vulnérables si toutes les solutions peuvent être bypassées.

    Un expert en sécurité à la rescousse ??
    Microsoft Certified Professional Developer SharePoint 2010

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Fredo02 Voir le message
    C'est quand même hallucinant qu'il n'y est aucune solution ultime à ce problème.
    Tous les sites sont vulnérables si toutes les solutions peuvent être bypassées.

    Un expert en sécurité à la rescousse ??
    token + captcha, y'a peu de chance, après faut se mettre dans la tête que la sécurité ultime n'existe pas.

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par Fredo02 Voir le message
    C'est quand même hallucinant qu'il n'y est aucune solution ultime à ce problème.
    Tous les sites sont vulnérables si toutes les solutions peuvent être bypassées.

    Un expert en sécurité à la rescousse ??
    A partir du moment ou tu peux émuler le comportement d'un navigateur (envoi et réception de requête http) tu peux bien faire ce que tu veux.
    Après comme le dit Stealth35 tu peux limiter les robots en imposant une action humaine. Action qui reste encore une fois pas 100% robuste puisque des robots un peu évolué savent faire de l'OCR sur un captcha.

    Un captcha + un token + une identification et tu es à peu près sur de pas être embêté.

    Edit --
    Grilled
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Imaginons le pirate qui prépare son coup.
    Il se fait une petite page avec un include ou une iframe qui pointe vers mon fichier php.
    Il se prépare une variable de session en allant chercher le name du input contenant la clé.
    A ce stade tout est prêt.


    Maintenant il va sur mon formulaire en utilisant mon application, récupère la valeur du token en regardant le code source html.
    Il se dépêche de retourner sur sa page destinée au hack, met la valeur récupérée en session et injecte des données.

    Il passe le token et le ttl. Facile
    Microsoft Certified Professional Developer SharePoint 2010

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par Fredo02 Voir le message
    Imaginons le pirate qui prépare son coup.
    Il se fait une petite page avec un include ou une iframe qui pointe vers mon fichier php.
    Il se prépare une variable de session en allant chercher le name du input contenant la clé.
    A ce stade tout est prêt.


    Maintenant il va sur mon formulaire en utilisant mon application, récupère la valeur du token en regardant le code source html.
    Il se dépêche de retourner sur sa page destinée au hack, met la valeur récupérée en session et injecte des données.

    Il passe le token et le ttl. Facile
    Il irait sur ton site directement ça serait vachement plus simple entre nous ^^.
    L'important dans la soumission de formulaire , c'est de s'assurer que la personne qui affiche le formulaire est bien la même que celle qui envoi les données et que les soumission ne se font pas à la chaine par des robots.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    mais oui si y'a pas d'authentification, c'est normal que tout le monde puisse soumettre ton formulaire, et si tout le monde peut le faire je vois pas en quoi c'est un problème de le faire d'un autre site

  18. #18
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    il y a une authentification sur mon site.
    En gros ce que vous semblez dire c'est un truc du genre..

    if(isset($_SESSION['IsConnect'])) {
    Mon Script
    }
    else {
    Dégage sale pirate !!!!
    }

    Si je créer une variable de session IsConnect sur un autre site et que je fais un include ou une iframe vers ma page php, adieu le système d'authentification
    Microsoft Certified Professional Developer SharePoint 2010

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Une session est liée à un domaine. Si tu créer une session sur xxx.com même si tu fait une iframe elle ne sera pas valable sur yyy.org.

    Pour une sécurité optimale tu peux même gérer tes session via ta base de données : voir tuto
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 62
    Points
    62
    Par défaut
    Non, la session est propre au serveur.

    Donc une session créé sur un serveur a ne sera pas lu par un serveur b.

    Donc peut importe que la session sur le serveur a ait les mêmes variables que la session sur le serveur b, elle ne vont pas interférer entre elles.

Discussions similaires

  1. Attaquer une base X3 en PHP
    Par Therambok dans le forum SAGE
    Réponses: 1
    Dernier message: 12/04/2011, 11h30
  2. [Web Service][SOAP] Comment attaquer facilement un service web en PHP ?
    Par lr dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 29/02/2008, 15h29
  3. [MySQL] Conseils pour attaquer PHP et Bdd MySQL
    Par sambzh24 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 13/06/2007, 10h58
  4. [ODBC] Afficher une requête croisée dynamique dans une page PHP
    Par resterzen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2006, 16h24
  5. Attaquer Interbase/Firebird en PHP
    Par jflebegue dans le forum InterBase
    Réponses: 6
    Dernier message: 13/08/2004, 16h21

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