JeuWeb - Crée ton jeu par navigateur
[Résolu] Faille sécurité - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Faille sécurité (/showthread.php?tid=4060)

Pages : 1 2


[Résolu] Faille sécurité - Arduinna - 08-06-2009

Bonjour tout le monde,

Sur mon jeu, pas mal de joueurs ont reçu via leur messagerie interne, un message les invitants à consulter un site web, donc certains ont malheureusement fait un copier/coller de ce site et l'on ouvert et leur compte sur le jeu ont étés supprimés.

La manière dont les comptes sont supprimés m'indique clairement qu'il s'agit de ma page de suppression du compte qui est exécuté mais j'ai du mal à comprendre comment une telle chose est possible ...

Avez-vous déjà eu ce genre de cas ? Comment le résoudre efficacement ?

Merci pour vos réponses ...


RE: Faille sécurité - My Hotel - 08-06-2009

Bonjour,

Ca ressemble à une faille CSRF, j'écris d'ailleurs un tuto à ce sujet.
Cherche un peu sur le Web, t'auras pas mal d'information.

Si c'est les autres confirment mes propos, met en place des tokens, la vérification des referers, la double confirmation des actions importantes...

Ou alors je me trompe!

En tout cas bon courage, je sais que c'est pas facile de sécuriser tout un site Smile


RE: Faille sécurité - Arduinna - 08-06-2009

Je ne connaissais pas ce genre de faille, je vais aller me renseigner un peu voir si cela correspond à mon problème.


RE: Faille sécurité - My Hotel - 08-06-2009

Ce qui m'étonne un peu, c'est que c'est TA page qui a été exécutée à l'iniative des visiteurs.

Une attaque CSRF aurait plutôt fait que TU aurais reçus le MP qui t'aurais fais exécuter la page de suprpesion en étant identifié comme admin...

Peut-être que c'est couplé à autre chose, il me faudrait d'autres avis, car je ne suis pas non plus en expert en sécurité Wink


RE: Faille sécurité - F.A.B. - 08-06-2009

A mon avis, Arduinna, tu donne trop peu d'informations pour que quiconque d'aide.
- Comment a ton accès a ta page de suppression ? quelles sont les pages qui sont en relation avec elle ?
- comment se présente le message qu'on reçut les membres dont le compte a été supprimer ?
- protège tu toutes tes entrées utilisateurs (variable POST ou GET) ?

Moi a ta place je désactiverais les suppressions de compte pour le moment, et chercherais a savoir comment on peut accéder a cette page, pour faire en sorte d'y faire un accès unique. Si le pirate a besoin d'un script pour supprimer un compte, c'est qu'il a besoin de donnée sur sa victime qu'il ne peut se procurer autrement...


RE: Faille sécurité - Sephi-Chan - 08-06-2009

Dans ce cas, c'est que la page de suppression de compte réservée aux administrateurs est accessible à tous.

Tu as deux choses à faire :
  • Mettre une condition sur le statut de l'utilisateur courant. Il faut qu'il soit administrateur pour accéder à la page.
  • Utiliser un jeton de sécurité dans ta page de suppression d'un utilisateur.

J'explique rapidement la technique du jeton (ou token, en anglais). Je ne garantis pas que le code est syntaxiquement correct, ça fait un moment que j'ai pas dev en PHP.

Sur la page contenant la liste des utilisateurs que l'on peut supprimer, tu génères un hash unique : le but est de forcer à passer par cette page pour supprimer un utilisateur. Ça garantit que c'est bien un administrateur (à moins que tu n'ai une autre faille à ce niveau Smile) qui supprime l'utilisateur.

<?php
$token = md5(uniqid(mt_rand(), true))
$_SESSION['token'] = $token
?>

<ul>
<?php foreach($users as $user): ?>
<li><a href="<?php echo "delete_user.php?id={$user->id}&token={$token}"; ?>">
Supprimer <?php echo $user->name; ?>
</a></li>
<?php endforeach; ?>
</ul>

Cela te donnera une URL de la forme :
Code :
http://monsite.ext/delete_user.php?id=27&token=9e107d9d372bb6826bd81d3542a419d6

Puis dans la page qui efface effectivement le compte, tu testes la présence du token et l'égalité avec le token écrit dans la session. Bien sûr, tu testes également si l'utilisateur courant est administrateur.


<?php
if(isset($_GET['token'])){
if($_GET['token'] == $_SESSION['token']){
/**
* Le token transmis est identique à celui écrit en session.
* On peut effacer l'utilisateur.
*/
}
else {
/**
* Le token transmis est différent de celui écrit en session. Il y a
* tentative de hack : le pirate n'est pas passé par la page qui liste
* les utilisateurs.
*/
}
}
else {
/**
* Le token n'est pas transmis. Il y a une tentative de hack
* puisque la personne n'est pas passée par la page qui liste
* les utilisateurs.
*/
}

Cette sécurité fait d'une pierre deux coups puisque grâce à ça, ton site n'est plus vulnérable si quelqu'un s'amuse à te faire cliquer sur un lien de la forme http://monsite.ext/delete_user.php?id=27 puisque malgré ton statut d'administrateur, ton système te dira que tu n'es pas passé par la page qui liste les utilisateurs.

Je te conseille de lire cet article : PHP Security - Guide de Sécurité PHP : Traitement des formulaires.

En dehors de ça, peut-être pourrais-tu nous coller la source de cette page sur Pastebin.


Sephi-Chan


RE: Faille sécurité - My Hotel - 08-06-2009

Sephi-Chan a tout résumé et confirme ce que je disais, il y a d'autres méthodes de protection a appliquer en plus, mais celle-ci est la principale.

Il y a donc 2 failles :
-CSRF
-On peut accéder à ton admin à partir de n'importe quel compte

Pas de chance, t'arrives avec une faille, tu repars avec deux! Smile


RE: Faille sécurité - Arduinna - 08-06-2009

Et bien la deuxième faille n'en n'est pas vraiment une du fait qu'il s'agit de la page ou un joueur peux décider de supprimer son compte si il en a marre du jeu etc ...

Sinon désolé de revenir un peu tard, en faisant ma recherche par rapport à ce que m'avait dit My_Hotel j'ai donc modifié mon script en y incluant ce système de token, merci Sephi-chan, ton explication est mieux que ce que j'avais trouvé surtout que c'était en anglais donc j'ai bien compris le principe, et aussi j'y ai inclus une vérification de l'url de provenance du joueur avant de supprimer son compte.

Ensuite pour être sur de mon script j'ai créer un compte rapidement et je suis aller sur l'url du "pirate" et cette fois aucune suppression ne s'est produit.


Décidément j'aime bien ce forum, malgré qu'on ne montre pas forcément son code il y a quand même des personnes qui répondent sans agresser et c'est bien ^^
Désolé si je ne montre pas souvent mon code, je ne dirais pas que c'est top-secret, mais j'ai déjà eu le coup du mec qui fini par me dire, " ton code est hyper mal sécurisé, laisse moi entrer dans le staff je t'aiderai etc etc ... " donc je me méfie un peu maintenant, c'est également pour cette raison que je n'ai pas fait de présentation de mon projet Wink

En tout cas merci pour vos réponses Wink


RE: Faille sécurité - wild-D - 09-06-2009

je vois pas le rapport;

- si ton code est mal sécurisé (a une faille) autant le présenter, que tu le sache. (en plus là tu auras de toute façon pas qu'un avis - ce qui permet d'avoir confirmation ou pas sur les failles et leur possible solution). Le risque étant qu'une faille peut parfois en cacher une autre.

- si tu recrute pas, tu recrute pas. Je vois pas pourquoi tu changerais d'avis comme de chemise. Donc celui qui veut s'imposer tu le remercie gentiment.


RE: Faille sécurité - Sephi-Chan - 09-06-2009

C'est vrai qu'il ne faut pas avoir peur de montrer du code : on est pas dans le cas de systèmes critiques. Mieux vaut que ce soit un développeur du forum qui découvre la faille qu'un joueur une fois le jeu lancé. Tu as plus à y gagner qu'à y perdre.

De plus, ici, rares sont les gens qui te proposeront d'intégrer ton projet puisque tout le monde est déjà sur le sien, ou presque. Smile

Toutefois, l'essentiel est fait : ta faille est corrigée. Smile
N'oublie pas de rebaptiser ton sujet [Résolu] Faille sécurité si tu n'as pas d'autres questions.


Sephi-Chan