Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 13h56   #1
Nouveau Membre du Club
 
Avatar de Fredo02
 
Inscription : juillet 2005
Messages : 118
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 118
Points : 26
Points : 26
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
Fredo02 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 14h12   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 14h32   #3
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Et surtout que la moitié des navigateurs ne renseignent pas cette entête. :/
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 11/05/2011, 14h34   #4
Nouveau Membre du Club
 
Avatar de Fredo02
 
Inscription : juillet 2005
Messages : 118
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 118
Points : 26
Points : 26
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
Fredo02 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 14h40   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 14h42   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
Envoyé par Fredo02 Voir le message
Autre solution ?
Quel est le problème précisément ?

Citation:
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 14h44   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
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
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h19   #8
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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/
grunk est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 11/05/2011, 15h28   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h32   #10
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h36   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h46   #12
Nouveau Membre du Club
 
Avatar de Fredo02
 
Inscription : juillet 2005
Messages : 118
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 118
Points : 26
Points : 26
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
Fredo02 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h52   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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.
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h54   #14
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h55   #15
Nouveau Membre du Club
 
Avatar de Fredo02
 
Inscription : juillet 2005
Messages : 118
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 118
Points : 26
Points : 26
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
Fredo02 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 15h56   #16
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/05/2011, 15h58   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 16h22   #18
Nouveau Membre du Club
 
Avatar de Fredo02
 
Inscription : juillet 2005
Messages : 118
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 118
Points : 26
Points : 26
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
Fredo02 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 16h30   #19
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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
grunk est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 16h35   #20
Membre du Club
 
Homme
Développeur Web
Inscription : 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 : 55
Points : 55
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.
westdigit est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web