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 :

Protection fiable des PHP appelés par AJAX


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 204
    Points : 918
    Points
    918
    Par défaut Protection fiable des PHP appelés par AJAX
    Bonjour,
    Réalisant des vidéos de formation gratuites pour la réalisation de site professionnels,
    j'ai réalisé une vidéo qui n'est pas encore en ligne, en effet cette vidéo couvre TOUTE la sécurité (coté utilisateur et coté serveur..
    de façon succincte mais 20 minutes tout de même

    Je bloque sur la protection des PHP destinés a être appelés par le HTML et son javascript, du visiteur via XMLHttpRequest();

    En effet nous n'avons aucun lien avec le login du html qui l'appel ni ses sessions ,encore moins ses cookies. Bref j'ai du mal à trouver une solution fiable !
    Une idée ?
    Merci d'avance .

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    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 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Je ne connais pas XmlHttpRequest, seulement fetch()
    N'est-ce pas xhr.withCredentials qui permettrait de transmettre les cookies de session PHP ?

    https://developer.mozilla.org/fr/doc...ithCredentials

  3. #3
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 204
    Points : 918
    Points
    918
    Par défaut
    Non on parle d'AJAX donc coté visiteur il n'y a dans le navigateur qu'un html et le Javascript qui va appeler des infos à un PHP
    qui ne voit pas le visiteur et qui ne peux répondre que par un ECHO .
    mais la requête que fait le javascript envois autant de POST que nécessaire au PHP-AJAX par exemple le login du visiteur !
    et une variable cryptée si tu veux, qui sera contrôlée par le PHP-AJAX
    Donc ma question est :
    comment empêcher un hackeur, de se faire un mini HTML avec un mini javascript
    qui demanderait la liste des comptes en banque par exemple et récupérerait l'ECHO avec sa liste .

    Le PHP qui a envoyé le html au visiteur à pu lire ses cookies bien sur mais le PHP appelé en AJAX non bien sur !
    d'autre part quelque soit la procédure de la requête Ajax tout le monde sais lire ce que Javascript envoies comme requête au PHP-AJAX

    je ne sais si tu vois ce dont je parles ?
    Merci en tout cas de ta recherche et le lien est intéressant .

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 755
    Points
    15 755
    Par défaut
    Citation Envoyé par JPongivart Voir le message
    comment empêcher un hackeur, de se faire un mini HTML avec un mini javascript
    qui demanderait la liste des comptes en banque par exemple et récupérerait l'ECHO avec sa liste .
    dans ce cas c'est le serveur qui va vérifier que l'utilisateur est bien connecté et qui enverra ou non ces informations.

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    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 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Le PHP qui a envoyé le html au visiteur à pu lire ses cookies bien sur mais le PHP appelé en AJAX non bien sur !
    Pourquoi "non bien sûr" ? A priori le client XHR peut envoyer le cookie de session PHP, à paramétrer avec withCredentials. Tu as essayé ?
    Ainsi ton PHP récupère la session en cours, ce qui te permet de déterminer côté serveur si l'utilisateur est authentifié ou non.

  6. #6
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 204
    Points : 918
    Points
    918
    Par défaut
    Merci à vous deux, je vais approfondir ces points que je maîtrises moins bien.
    Merci encore pour le lien Seb., Je n'aurais pas du parler de login car ma faille de sécurité
    peut concerner un simple visiteur .. par exemple si vous allez ici
    https://les-astuces-du-web.com/0-web...la_martine.php
    Et clic droit --> inspecter de quoi faire une autre requête sur le PHP appelé ?
    Nom : ajax.jpg
Affichages : 81
Taille : 599,3 Ko

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 755
    Points
    15 755
    Par défaut
    Citation Envoyé par JPongivart Voir le message
    Et clic droit --> inspecter de quoi faire une autre requête sur le PHP appelé ?
    pour cette exemple, déjà je ne vois pas le formulaire donc déjà si je voulais ajouter un commentaire en usurpant une identité, il faudrait déjà que je devine les informations à envoyer.

    ensuite s'il y a un système de connexion, je suppose que le code qui gère les commentaires va d'abord vérifier la connexion avant de faire quelque chose.

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    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 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    ma faille de sécurité
    peut concerner un simple visiteur .. par exemple si vous allez ici
    https://les-astuces-du-web.com/0-web...la_martine.php
    Et clic droit --> inspecter de quoi faire une autre requête sur le PHP appelé ?
    Désolé je ne comprends pas quel est le problème
    (et j'ai l'impression qu'on s'éloigne du sujet initial à savoir le maintien d'une session )

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Dans un premier temps tes appels ajax devraient normalement être protégé par les règles CORS ce qui réduit déjà beaucoup la surface d'attaque.
    Ensuite si il y'a des besoins d'authentifications sur la requête, il sufit de lui passer le nécessaire. Que ce soit un token , un cookie, un header spécifique, etc ...

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 755
    Points
    15 755
    Par défaut
    est ce que vous pouvez indiquer comment vous avez résolu votre souci ? cela pourrait servir à d'autres participants du forum.

  11. #11
    Membre éprouvé
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 204
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par mathieu Voir le message
    est ce que vous pouvez indiquer comment vous avez résolu votre souci ? cela pourrait servir à d'autres participants du forum.
    Pour faire simple le javascript et HTML est ainsi pour un Tchat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     <script type='text/javascript'>
    var unpseu='"machin";
     
    var timer = setInterval(Affiche_Tchat(unpseu),5000);   
    var ctimer = setInterval(Qui_En_Ligne(unpseu),10000); 
     
    function maFonctionAjax(message,action,pseu)
    {
      var MonAjax;
      if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
      else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
      else {
        alert("Votre navigateur n'est pas adapté pour faire des requétes AJAX..."); 
        MonAjax = false;   }
      MonAjax.open('POST',"wtchat_ajax.php",true);
      MonAjax.onreadystatechange = function()
      {
          if (MonAjax.readyState == 4 && MonAjax.status == 200)
          {
              if(action=="Affiche_Tchat") { document.getElementById('LeRetourL').innerHTML = MonAjax.responseText;}
              if(action=="Qui_En_Ligne") { document.getElementById('LeRetour').innerHTML = MonAjax.responseText;}
              if(action=="Ajout") { document.LeForm.message.value='';}
     
          }
     
      }
      MonAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
      MonAjax.send('message='+message+'&action='+action+'&Xpseu='+pseu);                  
    }
    function Affiche_Tchat(x){
     maFonctionAjax("", "Affiche_Tchat",x);
    }
    function Qui_En_Ligne(x){
     maFonctionAjax("", "Qui_En_Ligne",x);
    }
     
    function XAjout(x){
     maFonctionAjax(x, "Ajout",unpseu);
    }
     
    function image()
    {
     
    }
    </script>
     
    <div class='centre01'>
    <?PHP
    if ($pseudo!="") {
    echo "<div class='blog'><form method='POST'  id='LeForm' name='LeForm' class='blogsaisie' onsubmit='XAjout(this.message.value);return false;' action=''  >";
    echo "<label class='saisie_commentaire'  for='message'>Message</label>  <textarea class='blog'  name='message' id='message' value='' maxlength='500' ></textarea><br />";
    echo "<input class='lesubmite' type='submit'  value=' Validez '></form></div>";
    }
    else {echo "<div class='blog' id='leid2'><figure class='blog'><img src='avatar/xavat-androide.jpg' alt=' ' class='blog'><figcaption class='blog'> 
    <h2 class='blog'>un conseil d'Androide</h2><p class='blog'> Pour écrire un commentaire vous devez <br>être inscrit (c'est gratuit.. )  
    <br>et connecté</p></figcaption></figure><br></div>";}
    ?>
     
    <div id='LeRetour' class='LeRetour' style='visibility:visible'>
    </div>
    <img src="zzz/ajaxloader.gif" style="visibility:hidden" id="load" />
    <br />
    <div id="LeRetourL" class="LeRetourL" style="visibility:visible">
    </div></div>
    En fait lorsque dans ma jeunesse j'étais Modérateur ICI puis Rédacteur j'avais écrit ce model de Tchat dans tout mes articles
    https://christele.developpez.com/tut...ajax-en-clair/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] AJAX appelé par AJAX
    Par hanphi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/04/2008, 10h10
  2. Réponses: 17
    Dernier message: 06/03/2008, 10h47
  3. Réponses: 6
    Dernier message: 15/11/2007, 13h52
  4. [AJAX] Fichier ASP appelé par AJAX
    Par dragonfly dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 14/06/2007, 11h14
  5. [AJAX] Drag n drop d'un element appelé par AJAX
    Par Death83 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/04/2006, 17h44

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