Envoyer une string comme paramètre dans un XMLHttpRequest (ESP32)

Envoyer une string comme paramètre dans un XMLHttpRequest (ESP32) - Javascript/Node.js - Programmation

Marsh Posté le 15-01-2023 à 16:37:10    

Salut !
 
Sur du matos maison (qui est en fonction) à base d'ESP32 je fais ça, dans le JS :
 

Code :
  1. if (mdpProvided == MDP)  {
  2. var xhttp = new XMLHttpRequest();
  3. xhttp.open("GET", "Open", true);
  4. xhttp.send();


 
J'ai fait une page web, je me connecte dessus avec mon navigateur, je tape le code et s'il est bon ça lance une fonction (open)
 
Mais du coup je fonctionne comme ça : lors du chargement HTML+CSS+JS j'ai une methode qui va chercher le MDP sur l'ESP.   Et donc le MDP est dans le navigateur, c'est moyen, je préfèrerais envoyer le MDP tapé à l'ESP et check si c'est le bon mot de passe sur l'ESP et non dans le JS du navigateur.
 
Savez vous comment je peux faire ?


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 15-01-2023 à 16:37:10   

Reply

Marsh Posté le 15-01-2023 à 17:12:44    

Oui là c'est plus que moyen, vu que le MDP est vérifié côté client on peut contourner très facilement.

 

J'y connais rien en prog web, mais en gros tu pourrais faire un form action="post" etc qui envoye le MDP à l'ESP, ce dernier le vérifie (contre un MDP stocké en dur ou en passant par une fonction de hashage genre SHA256) et retourne soit une page "allez vous en" soit la vraie page au navigateur.

 

EDIT: POST plutôt que GET pour ne pas avoir le MDP dans l'URL. Bon après je suppose que c'est un système interne non connecté à internet, dans ce cas c'est pas hyper-critique. Dans le cas contraire je déconseille de bricoler soi-même et prendre une solution qui a fait ses preuves!


Message édité par rat de combat le 15-01-2023 à 17:17:25

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 15-01-2023 à 17:37:04    

Ah post plutôt que get, je vais regarder

 

Non pas de risques de sécurité

 

Merci !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 15-01-2023 à 18:21:41    

Je veux dire pas de gros risque nécessitant une solution adaptée comme tu dis


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 15-01-2023 à 18:54:12    

Je crois que j'ai compris ce qu'il faut faire dans le JS :

 
Code :
  1. let xhr = new XMLHttpRequest();
  2.  
  3. let json = JSON.stringify({
  4.  MDP: "John"
  5. });
  6.  
  7. xhr.open("POST", '/submit')
  8. xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
  9.  
  10. xhr.send(json);
 

Mais du coté C++, sur l'ESP, je fais comment pour récup ma string (mon MDP) ?  J'ai ça actuellement avec les GET

 
Code :
  1. serveur.on("/rescueOpen/submit", HTTP_GET, [](AsyncWebServerRequest *request)
  2.  {
  3.    FaireCeci();
  4.    FaireCela();
  5.    request->send(200);
  6.  });
 


Edit : j'ai édité comme un cochon


Message édité par Lt Ripley le 15-01-2023 à 19:28:42

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 15-01-2023 à 20:16:59    

Je connais ni les ESP ni le C++, mais ton code doit utiliser une lib toute faite non? Dans ce cas direction la doc. :o Je vois HTTP_GET, peut-être il suffit de changer ça en HTTP_POST et ajuster un peu le code pour vérifier le MDP?

Reply

Marsh Posté le 15-01-2023 à 21:08:22    

Verifier le MDP oui ça c'est pas un problème
 
Pour récup la string avec POST je vais aller voir la doc de la lib effectivement [:kluruit]


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-01-2023 à 13:25:19    

Ça y est ça marche !  Avec un GET !  (c'était plus simple, en tous cas sur les codes que j'ai lus)
 
Dans le JS :
 

Code :
  1. var xhr = new XMLHttpRequest();
  2. xhr.open("GET", "/test?message="+mdpToProvide, true);
  3. xhr.send();


 
et dans le C++
 

Code :
  1. const char* PARAM_MESSAGE = "message";
  2.  
  3. serveur.on("/test", HTTP_GET, [](AsyncWebServerRequest *request)
  4.  {
  5.    String MDPProvided;
  6.    if (request->hasParam(PARAM_MESSAGE)) {
  7.        MDPProvided = request->getParam(PARAM_MESSAGE)->value();
  8.        Serial.println("Tentative MDP test" + MDPProvided);
  9.        Blabla;
  10.        request->send(200);
  11.    }
  12.  
  13.  });


 
 [:parag0n]


Message édité par Lt Ripley le 16-01-2023 à 13:25:42

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-01-2023 à 14:26:17    

Et si le MDP est faux? Il faudrait rajouter un else { Blabla; request->send(code_erreur) }. Je sais plus, je crois que c'est 401 ou 403 le bon code.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 16-01-2023 à 14:36:39    

Ahh intéressant ça, pour avoir un retour dans le navigateur c'est ça et afficher "Wrong pass" ?
 
Quand j'avais le MDP dans le JS je faisait ça justement mais là je pouvais plus...
 
Je vais voir ça un de ces 4
 
Merci


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-01-2023 à 14:36:39   

Reply

Marsh Posté le 16-01-2023 à 15:56:33    

Oui voila. Je confond toujours HTTP 401 et 403, l'un c'est "access denied" et l'autre "authentification required". A toi de chercher/voir ce qui est correct. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 16-01-2023 à 20:15:10    

Ca marche !

 

Faut que je trouve un code pas utilisé, là j'ai mis 300 au pif pour tester et je trouverais dommage d'utiliser un code d'erreur)

 

Je mets le code C++ en entier :

 
Code :
  1. serveur.on("/open", HTTP_GET, [](AsyncWebServerRequest *request)
  2.  {
  3.    String MDP_provided;
  4.    
  5.    if (request->hasParam(PARAM_MESSAGE)) {
  6.       MDP_provided = request->getParam(PARAM_MESSAGE)->value();
  7.       Serial.println("MDP provided : " + MDP_provided);
  8.      
  9.       if (MDP_provided == pass || MDP_provided == reversePass)  {
  10.         request->send(200);
  11.       }
  12.       else {request->send(300);}
  13.            
  14.    }
  15.  
  16.    if (MDP_provided == pass)  {
  17.      Serial.println("Ouverture web..." );  
  18.      ecran.display1Line("Web Opening..." );
  19.      myServoDriver.open();
  20.    }
  21.  
  22.    else if (MDP_provided == reversePass)  {
  23.      Serial.println("Ouverture rescue web..." );  
  24.      ecran.display1Line("Web Rescue op..." );
  25.      myServoDriver.rescue();
  26.    }
  27.  
  28.  });
 


et dans le JS

 
Code :
  1. var xhttp = new XMLHttpRequest();
  2. xhttp.open("GET", "/open?message="+mdpToProvide, true);
  3.                      
  4. xhttp.send();
  5.  
  6. mdpToProvide="";
  7. talking.innerHTML = "Sending pass...";
  8.  
  9. xhttp.onload = function() {   // C'est ça qui est appelé après la réception de la réponse.  Sans .onload ça marche pas, le code retourné est toujours 0
  10.    if (xhttp.status === 200)  {
  11.         talking.innerHTML = "Password OK";
  12.         talking.style.backgroundColor = "#00CC00";
  13.     }
  14.     else  {
  15.         talking.innerHTML = "Wrong password";
  16.         talking.style.backgroundColor = "#FF0000";
  17.         console.log("xhttp.status : " + xhttp.status);
  18.     }
  19. }

Message cité 1 fois
Message édité par Lt Ripley le 16-01-2023 à 20:17:55

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-01-2023 à 20:28:48    

Lt Ripley a écrit :

Faut que je trouve un code pas utilisé, là j'ai mis 300 au pif pour tester et je trouverais dommage d'utiliser un code d'erreur)

Bah ils sont pourtant la pour ça non? :??:

Reply

Marsh Posté le 16-01-2023 à 21:28:39    

Je sais pas, je me dis que c'est pas une erreur, c'est un mdp refusé


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 16-01-2023 à 23:54:27    

J'aurais dû dire status code plutôt que code d'erreur. 200 == tout va bien, 500 == le serveur est HS, ... et 401/403 == mauvais MDP. C'est fait pour. :)

 

EDIT: et 418 pour dire que c'est pas le bon pot... (blague pour connaisseurs :o )


Message édité par rat de combat le 17-01-2023 à 00:04:14
Reply

Marsh Posté le 17-01-2023 à 09:14:30    

Ah ok merci c'est parfait


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 14:15:27    

Pour info : https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP  ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-01-2023 à 16:28:26    

Merci !  C'est donc 401 que je choisi !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 19:15:59    

Tiens, j'ai un truc bizarre :
 
Mon MDP fait 4 chiffres
 
Si je fais n'importe quoi, y compris 1 seul chiffre sauf le 2 j'ai bien toujours mon 401, parfait
 
Si j'envoie le chiffre 2 j'ai un 300 : choix multiple
 
Si j'envoie n'importe quel autre chiffre j'ai bien le 401
 
 [:mistert_49]


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 19:32:56    

T'aurais pas un 300 qui traîne encore dans le code pour commencer? Ce que tu peux faire c'est utiliser les outils développeur de ton navigateur aussi pour voir ce qui transite réellement comme requête(s) et/ou débugger le côté client avec la console JS.


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 17-01-2023 à 19:35:31    

Ah mais c'est vrai c'est ce que j'avais mis comme code en premier.  Mais c'est ouf que ça le fasse que avec le chiffre 2
 
Je regarde


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 19:44:02    

J'ai pas de retour "officiel" comme quand j'ai le 401, je suis obligé de l'afficher moi même avec console.log
 
https://i.imgur.com/gDgk3pv.png
 
2 -> 300
3 -> 401
 
Ca fait pareil quand je tape rien, on dirait que le 2 n'est pas pris en compte, mais dans mon MDP ya un 2 et il fonctionne bien
 
Edit : j'ai 300 null part dans mon code


Message édité par Lt Ripley le 17-01-2023 à 19:44:21

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 19:49:47    

Tu peux vérifier dans l'onglet réseau si tu as bien une seule requête avec le MDP complet et pas une requête pour chaque chiffre ou ce genre de truc?

Reply

Marsh Posté le 17-01-2023 à 20:08:03    

Le serveur.on dans le c++ n'est pas appelé
 
C'est complètement ouf
 
Je vais essayer un autre ESP32 identique


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 20:13:24    

Ahhh j'ai regardé dans l'onglet reseau, je vois "disk cache" à chaque fois que je tape 2 ou rien contrairmeent à toutes les autres combinaisons de chiffres
 
Mais je sais pas ce que ça signifie exactement
 
https://i.imgur.com/YZ5R1Ps.png


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 20:20:50    

Bon ben ça vient de mes navigateurs, Vivaldi sur PC et Kiwi sur android (2 forks de Chrome)
 
Sur FireFox sur PC ou j'ai que rarement accédé à mon ESP j'ai pas ce comportement
 
Une histoire de cache qui pourait bien fiche le bazar


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 20:31:36    

J'ai vidé le cache du navigateur et ça marche
 
Rat de combat je te dois une fière chandelle encore une fois, merci !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 21:30:30    

On peut dire que c'était un bug bien caché donc. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le 17-01-2023 à 21:42:13    

:D  
 
T'assures un max ! [:prab]  
 
Mon pote m'a dit d'ajouter dans les requêtes un param (à coté du MDP donc) , qui sert pas et qui change tout le temps, comme l'heure en millisecondes, pour pas que le nav foute les requêtes en cache !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 17-01-2023 à 22:27:30    

C'est une possibilité, sinon il me semble qu'il y a un header HTTP "no-cache" ou ce genre de truc. Mais j'y connais rien, le web c'est pas du tout mon truc. :o


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed