Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1548 connectés 

  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2438028
Lt Ripley
Ils ont tout niqué
Posté le 15-01-2023 à 16:37:10  profilanswer
 

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
mood
Publicité
Posté le 15-01-2023 à 16:37:10  profilanswer
 

n°2438029
rat de com​bat
attention rongeur méchant!
Posté le 15-01-2023 à 17:12:44  profilanswer
 

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!
n°2438030
Lt Ripley
Ils ont tout niqué
Posté le 15-01-2023 à 17:37:04  profilanswer
 

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
n°2438032
Lt Ripley
Ils ont tout niqué
Posté le 15-01-2023 à 18:21:41  profilanswer
 

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


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2438033
Lt Ripley
Ils ont tout niqué
Posté le 15-01-2023 à 18:54:12  profilanswer
 

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
n°2438035
rat de com​bat
attention rongeur méchant!
Posté le 15-01-2023 à 20:16:59  profilanswer
 

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?

n°2438037
Lt Ripley
Ils ont tout niqué
Posté le 15-01-2023 à 21:08:22  profilanswer
 

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
n°2438058
Lt Ripley
Ils ont tout niqué
Posté le 16-01-2023 à 13:25:19  profilanswer
 

Ç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
n°2438062
rat de com​bat
attention rongeur méchant!
Posté le 16-01-2023 à 14:26:17  profilanswer
 

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!
n°2438063
Lt Ripley
Ils ont tout niqué
Posté le 16-01-2023 à 14:36:39  profilanswer
 

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
mood
Publicité
Posté le 16-01-2023 à 14:36:39  profilanswer
 

n°2438071
rat de com​bat
attention rongeur méchant!
Posté le 16-01-2023 à 15:56:33  profilanswer
 

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!
n°2438114
Lt Ripley
Ils ont tout niqué
Posté le 16-01-2023 à 20:15:10  profilanswer
 

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
n°2438116
rat de com​bat
attention rongeur méchant!
Posté le 16-01-2023 à 20:28:48  profilanswer
 

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? :??:

n°2438120
Lt Ripley
Ils ont tout niqué
Posté le 16-01-2023 à 21:28:39  profilanswer
 

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
n°2438131
rat de com​bat
attention rongeur méchant!
Posté le 16-01-2023 à 23:54:27  profilanswer
 

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
n°2438137
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 09:14:30  profilanswer
 

Ah ok merci c'est parfait


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2438180
rufo
Pas me confondre avec Lycos!
Posté le 17-01-2023 à 14:15:27  profilanswer
 

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
n°2438190
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 16:28:26  profilanswer
 

Merci !  C'est donc 401 que je choisi !


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
n°2438201
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 19:15:59  profilanswer
 

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
n°2438203
rat de com​bat
attention rongeur méchant!
Posté le 17-01-2023 à 19:32:56  profilanswer
 

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!
n°2438205
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 19:35:31  profilanswer
 

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
n°2438209
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 19:44:02  profilanswer
 

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
n°2438213
rat de com​bat
attention rongeur méchant!
Posté le 17-01-2023 à 19:49:47  profilanswer
 

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?

n°2438215
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 20:08:03  profilanswer
 

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
n°2438217
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 20:13:24  profilanswer
 

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
n°2438218
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 20:20:50  profilanswer
 

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
n°2438220
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 20:31:36  profilanswer
 

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
n°2438222
rat de com​bat
attention rongeur méchant!
Posté le 17-01-2023 à 21:30:30  profilanswer
 

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!
n°2438227
Lt Ripley
Ils ont tout niqué
Posté le 17-01-2023 à 21:42:13  profilanswer
 

: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
n°2438229
rat de com​bat
attention rongeur méchant!
Posté le 17-01-2023 à 22:27:30  profilanswer
 

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!
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Javascript/Node.js

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

 

Sujets relatifs
[résolu] Typage fort et valeur null dans paramétre d'une méthode[Powershell] Variable objet en paramètre de fonction & ValidateSet
[LUA] - [RESOLU] - Regex - string.match() qui match à moitié...[webservice] Envoyer string array
Envoyer des SMS via son forfait 4G et un routeur 4GWebServer sur ESP32 ("arduino")
[RÉSOLU] Envoyer une liste de noms de fichiers vers un exécutableAfficher un bouton "envoyer" après validation reCAPTCHA
[PHP] Remplacer des mots dans une string par des valeurs d'un tableau 
Plus de sujets relatifs à : Envoyer une string comme paramètre dans un XMLHttpRequest (ESP32)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR