Variable $_SESSION
Résolu
MickaToast
Messages postés
142
Date d'inscription
Statut
Membre
Dernière intervention
-
MickaToast Messages postés 142 Date d'inscription Statut Membre Dernière intervention -
MickaToast Messages postés 142 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà, je suis débutant en PHP mais je me débrouille plutôt assez bien, par contre j'ai une question que je me pose depuis longtemps et je n'arrive pas à trouver de réponses sur internet.
Voilà ma question: Est-ce que une variable super globale tel que $_SESSION peut être modifiée directement par un utilisateur?
Voilà le contexte: Je souhaite créer un système de gestion de membres (avec base de données MySQL et tout le blablabla), dès qu'un utilisateur entre un bon identifiant (Pseudo + Mot de passe) une variable de type bool sera alors mis en place dans une variable super-globale nommée "$_SESSION["membre"]". Le site détectera alors si une variable "$_SESSION["membre"]" est définie comme TRUE, si elle l'est, l'utilisateur est un membre de mon site. La question que je me pose c'est est-ce qu'un inconnu (qui n'est pas membre) peut définir la variable $_SESSION["membre"] au serveur.
Merci par avance de votre aide!
Voilà, je suis débutant en PHP mais je me débrouille plutôt assez bien, par contre j'ai une question que je me pose depuis longtemps et je n'arrive pas à trouver de réponses sur internet.
Voilà ma question: Est-ce que une variable super globale tel que $_SESSION peut être modifiée directement par un utilisateur?
Voilà le contexte: Je souhaite créer un système de gestion de membres (avec base de données MySQL et tout le blablabla), dès qu'un utilisateur entre un bon identifiant (Pseudo + Mot de passe) une variable de type bool sera alors mis en place dans une variable super-globale nommée "$_SESSION["membre"]". Le site détectera alors si une variable "$_SESSION["membre"]" est définie comme TRUE, si elle l'est, l'utilisateur est un membre de mon site. La question que je me pose c'est est-ce qu'un inconnu (qui n'est pas membre) peut définir la variable $_SESSION["membre"] au serveur.
Merci par avance de votre aide!
A voir également:
- Variable $_SESSION
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Variable objet ou bloc "with" non définie - Forum VB / VBA
Quels genres de failles de sécurités permet de créer/modifier une variable $_SESSION et comment les contrer? (Je connais déjà les failles XSS et les injections SQL et je sais les contrer).
Pour les attaques CSRF, on utilise souvent des jetons de sessions (tokens).
http://blog.synapse-studio.fr/se-proteger-des-attaques-csrf/
Les attaques Man-in-the-middle sont plus rares et il faudrait crypter les échanges pour les contrer.
Les sessions php ne sont que des fichiers sur le serveur, donc un accès au système de fichier grâce à exploit php permet également de modifier les sessions.
Pour éviter cela il faut garder une version de php à jour et ne pas avoir de faille de sécurité dans son code.
Si tu contrôle bien les entrées et sorties de ton code php pour contrer les injections SQL, XSS et les attaques CSRF, tes sessions seront relativement bien sécurisées.
J'ai une dernière question qui concerne les failles XSS.
Est-ce que ça suffit si je contrôle seulement les entrées des utilisateurs et non pas les sorties.
Par exemple, pour enregistrer un message d'un utilisateur dans une base de données j'utilise:
1. Un formulaire (avec une action="send.php" pour le form et un name="message" pour le input) qui permet aux membres d'ajouter un message.
2. La page "send.php" qui capte les entrées (si elles sont présentes) et qui les enregistre sous forme de "strip_tags($_POST["message"])".
Par logique, du moins ma logique si elle est bonne, la base de données ne comportera aucune balise de type <script> car j'ai dis à l'entrée de faire un "strip_tags" sur la valeur $_POST["message"], je n'aurais donc pas besoin de filtrer les sorties, par exemple pour afficher ce message quelque part.
Est-ce donc correct si je filtre seulement les entrées et non pas les sorties, ou alors il faut absolument filtrer les deux?
Merci par avance de ta réponse :)
L'utilisation de strip_tags avant l'enregistrement en bdd n'est pas une très bonne façon de faire : celle-ci ne te protège pas des injections sql.
Pour l'enregistrement en bdd il faut utiliser soit :
- les requêtes préparées ou la méthode quote() avec l'api PDO
- mysqli_real_escape_string() avec l'api MySQLi
- mysql_real_escape_string() avec l'api MySQL (obsolète)
Ces méthodes sont les seules à connaitre les spécificités de ton SGBD (encodage, caractères spéciaux...) pour échapper correctement les entrées utilisateurs contre les injections sql.
Pour l'affichage des données non sures en html, il faut utiliser la fonction htmlentities() avec le bon encodage.
Merci beaucoup pour ton aide !
Bonne journée.