Go Down

Topic: Problema login arduino ethernet (Read 5 times) previous topic - next topic

PaoloP

#15
Dec 22, 2012, 05:23 pm Last Edit: Dec 22, 2012, 05:27 pm by PaoloP Reason: 1
Il problema è che ogni volta che si fa una richiesta avviene il controllo dell'user e password e non trovandola viene messa false.
Ecco perché torna alla pagina di login.

Ho messo i parametri della mia rete... dovresti modificarli per la tua.

Code: [Select]
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = {
 192, 168, 40, 220 }; // ip in lan
byte gateway[] = {
 192, 168, 40, 254 }; // ip in lan
byte subnet[] = {
 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port

String readString; //string
boolean LED1ON = false; //LED1 status flag
boolean LED2ON = false; //LED2 status flag
boolean LED3ON = false; //LED3 status flag
boolean login = false;

void setup(){
 delay(2000);

 pinMode(3, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 Serial.begin(9600);
 Serial.print("Serial Start! at ");
 Serial.print(millis());
 Serial.println(" millisecond.");

 Ethernet.begin(mac, ip, gateway, gateway, subnet);  
 delay(1000);

 Serial.println("Ethernet configured");
 Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
 Serial.print("SubnetMask: ");
 Serial.println(Ethernet.subnetMask());
 Serial.print("Gateway: ");
 Serial.println(Ethernet.gatewayIP());
 Serial.print("DNS Server: ");
 Serial.println(Ethernet.dnsServerIP());

 Serial.println("Wait client...");
}

void loop(){
 EthernetClient client = server.available();
 if (client) {
   Serial.println("Client connect");
   boolean currentLineIsBlank = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       readString.concat(c);
       // Serial.print("readString: ");
       // Serial.println(readString);
       if (c == '\n' && currentLineIsBlank){
         Serial.print("--> ");
         Serial.println(readString);
         WebPage(client);
         //clearing string for next read
         readString="";
         //stopping client
         client.stop();  
       }
     }
   }
   Serial.println("Client disconnect");
 }
}


void WebPage (EthernetClient &client){

 // Check Login
 if(readString.indexOf("Nome=user&Pwd=pass") > 0) {
   login=true;
   Serial.println("Login OK ");
 }
 else {
   login=false;
   Serial.println("No Login");
 }

 // Check Led
 if(login==true){
   if(readString.indexOf("L=1") > 0) {
     digitalWrite(3, HIGH); // set the LED on
     LED1ON = true;
   }

   if(readString.indexOf("L=01") > 0)
   {
     //led has to be turned OFF
     digitalWrite(3, LOW); // set the LED OFF
     LED1ON = false;
   }

   if(readString.indexOf("L=2") > 0) {//lets check if LED should be lighted
     //led has to be turned ON
     digitalWrite(5, HIGH); // set the LED on
     LED2ON = true;
   }

   if(readString.indexOf("L=02") > 0)  
   {
     //led has to be turned OFF
     digitalWrite(5, LOW); // set the LED OFF
     LED2ON = false;
   }

   if(readString.indexOf("L=3") > 0) {//lets check if LED should be lighted
     //led has to be turned ON
     digitalWrite(6, HIGH); // set the LED on
     LED3ON = true;
   }

   if(readString.indexOf("L=03") > 0)
   {
     //led has to be turned OFF
     digitalWrite(6, LOW); // set the LED OFF
     LED3ON = false;
   }
 }

 // INIZIO DICHIARAZIONE PAGINA HTML
 client.println(F("HTTP/1.1 200 OK"));
 client.println(F("Content-Type: text/html"));
 client.println();
 client.print(F("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"));

 // Finestra di login
 if (login==false) {
   // client.print(F("<form action='http://192.168.40.220/'>"));
   client.print(F("<form>"));
   client.print(F("Nome"));    
   client.print(F("utente: <input name='Nome' value=''>"));
   client.print(F("Password: <input type='Password' name='Pwd' value=''>"));
   client.print(F("<input type='submit' value=' OK '>"));
   client.print(F("</form>"));
 }

 // Login OK
 if (login==true) {
   //Primo led
   client.println(F("<hr />"));
   client.println(F("<h1>LED1</h1>"));
   client.println(F("<br />"));
   //printing LED status
   client.print(F("<span>STATO LED: </span>"));

   if (LED1ON) {
     client.println(F("<span style='color:green'>ON</span>"));
   }
   else
   {
     client.println(F("<span style='color:grey'>OFF</span>"));
   }
   client.print(F("<h2><a href='/?L=1'>ON</a> | <a href='/?L=01'>OFF</a></h2>"));
   client.println(F("<hr />"));

   //Secondo led
   client.println(F("<h1>LED2</h1>"));
   client.println(F("<br />"));
   //printing LED status
   client.print(F("<span>STATO LED: </span>"));

   if (LED2ON) {
     client.println(F("<span style='color:green'>ON</span>"));
   }
   else
   {
     client.println(F("<span style='color:grey'>OFF</span>"));
   }
   client.print(F("<h2><a href='/?L=2'>ON</a> | <a href='/?L=02'>OFF</a></h2>"));
   client.println(F("<hr />"));

   //terzo led
   client.println(F("<h1>LED3</h1>"));
   client.println(F("<br />"));
   //printing LED status
   client.print(F("<span>STATO LED: </span>"));

   if (LED3ON) {
     client.println(F("<span style='color:green'>ON</span>"));
   }
   else
   {
     client.println(F("<span style='color:grey'>OFF</span>"));
   }
   client.print(F("<h2><a href='/?L=3'>ON</a> | <a href='/?L=03'>OFF</a></h2>"));
 } //chiude if login=true
 client.println(F("</body></html>"));
}


potresti togliere questa parte
Code: [Select]
  else {
    login=false;
    Serial.println("No Login");
  }

ma in questo modo una volta fatto il login la variabile non diventerebbe mai "false".

format

a me continua a non funzionare, sempre la stessa cosa dopo il login clicco su ON oppure OFF e torna alla pagina di login

Serial Start! at 1999 millisecond.
Ethernet configured
Local IP: 192.168.1.220
SubnetMask: 255.255.255.0
Gateway: 192.168.1.200
DNS Server: 192.168.1.200
Wait client...
Client connect
--> GET / HTTP/1.1

No Login
Client disconnect
Client connect
--> GET /?Nome=user&Pwd=pass HTTP/1.1

Login OK
Client disconnect
Client connect
--> GET /?L=1 HTTP/1.1

No Login
Client disconnect

PaoloP

Si, lo so che non funziona.... ho tirato fuori il mio Arduino R3 + Ethernet shield e sto provando "con mano" il codice.
Il problema come ti ho detto nel messaggio precedente è che ogni volta che invii un comando all'Arduino lui fa il check della login.
Bisognerebbe aggiungere una variabile firstlogin in modo da discriminare se il login è stato già fatto.
Adesso ci lavoro un po' su.  :D

PaoloP

#18
Dec 22, 2012, 06:08 pm Last Edit: Dec 22, 2012, 06:17 pm by PaoloP Reason: 1
Ho rivisto la logica del login.
Ho aggiunto un timeout impostatile (adesso è 60 secondi) e un pulsante Exit.

Code: [Select]
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = {
  192, 168, 40, 220 }; // ip in lan
byte gateway[] = {
  192, 168, 40, 254 }; // ip in lan
byte subnet[] = {
  255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port

String readString; //string
boolean LED1ON = false; //LED1 status flag
boolean LED2ON = false; //LED2 status flag
boolean LED3ON = false; //LED3 status flag
boolean login = false;

unsigned int currentmillis = 0;
unsigned int interval = 60*1000;

void setup(){
  delay(2000);

  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  Serial.begin(9600);
  Serial.print("Serial Start! at ");
  Serial.print(millis());
  Serial.println(" millisecond.");

  Ethernet.begin(mac, ip, gateway, gateway, subnet); 
  delay(1000);

  Serial.println("Ethernet configured");
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());
  Serial.print("SubnetMask: ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(Ethernet.gatewayIP());
  Serial.print("DNS Server: ");
  Serial.println(Ethernet.dnsServerIP());

  Serial.println("Wait client...");
  currentmillis = millis();
}

void loop(){
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Client connect");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString.concat(c);
        if (c == '\n' && currentLineIsBlank){
          Serial.print("--> ");
          Serial.println(readString);
          CheckLogin();
          if(login==true) CheckLed();
          WebPage(client);
          //clearing string for next read
          readString="";
          //stopping client
          client.stop(); 
        }
      }
    }
    Serial.println("Client disconnect");
  }
}


void WebPage (EthernetClient &client){
  // INIZIO DICHIARAZIONE PAGINA HTML
  client.println(F("HTTP/1.1 200 OK"));
  client.println(F("Content-Type: text/html"));
  client.println();
  client.print(F("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"));

  // Finestra di login
  if (login==false) {
    // client.print(F("<form action='http://192.168.40.220/'>"));
    client.print(F("<form>"));
    client.print(F("Nome"));   
    client.print(F("utente: <input name='Nome' value=''>"));
    client.print(F("Password: <input type='Password' name='Pwd' value=''>"));
    client.print(F("<input type='submit' value=' OK '>"));
    client.print(F("</form>"));
  }

  // Login OK
  if (login==true) {
    //Primo led
    client.println(F("<hr />"));
    client.println(F("<h1>LED1</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED1ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=1'>ON</a> | <a href='/?L=01'>OFF</a></h2>"));
    client.println(F("<hr />"));

    //Secondo led
    client.println(F("<h1>LED2</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED2ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=2'>ON</a> | <a href='/?L=02'>OFF</a></h2>"));
    client.println(F("<hr />"));

    //terzo led
    client.println(F("<h1>LED3</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED3ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=3'>ON</a> | <a href='/?L=03'>OFF</a></h2>"));

    client.println(F("<hr />"));
    //Exit
    //  client.println(F("<h1>Exit</h1>"));
    //  client.println(F("<br />"));
    client.print(F("<h2><a href='/?L=Exit'>Exit</a>"));

  } //chiude if login=true
  client.println(F("</body></html>"));
}


void CheckLogin() {
  // Check Login
  if ((millis() - currentmillis) > interval){
    login = false;
    currentmillis = millis();
    Serial.println("Login Timeout");
  }
  if (readString.indexOf("Nome=user&Pwd=pass") > 0) {
    login=true;
    currentmillis = millis();
    Serial.println("Login OK ");
  }
  if (readString.indexOf("L=Exit") > 0) {
    login=false;
    Serial.println("No Login");
  }
}


void CheckLed() {
  // Check Led

    if(readString.indexOf("L=1") > 0) {
    digitalWrite(3, HIGH); // set the LED on
    LED1ON = true;
  }

  if(readString.indexOf("L=01") > 0)
  {
    //led has to be turned OFF
    digitalWrite(3, LOW); // set the LED OFF
    LED1ON = false;
  }

  if(readString.indexOf("L=2") > 0) {//lets check if LED should be lighted
    //led has to be turned ON
    digitalWrite(5, HIGH); // set the LED on
    LED2ON = true;
  }

  if(readString.indexOf("L=02") > 0) 
  {
    //led has to be turned OFF
    digitalWrite(5, LOW); // set the LED OFF
    LED2ON = false;
  }

  if(readString.indexOf("L=3") > 0) {//lets check if LED should be lighted
    //led has to be turned ON
    digitalWrite(6, HIGH); // set the LED on
    LED3ON = true;
  }

  if(readString.indexOf("L=03") > 0)
  {
    //led has to be turned OFF
    digitalWrite(6, LOW); // set the LED OFF
    LED3ON = false;
  }
}

format

Senti non ho parole...funziona alla grande
ma tu di professione fai il programmatore?

Ora nella mia ignoranza totale cerco almeno di capire la logica del tuo codice con la speranza di imparare

Grazie infinite per la tua disponibilità gentilezza e soprattutto per la tua professionalità.

Cmq poi aprirò sicuramente un'altro post per avere delle delucidazioni in merito alle uscite disponibili dell' Arduino Ethernet
tipo l'uscita 0 e 1, che ho capito che servono per la programmazione via seriale, ma poi staccato la seriale
si possono usare?

PaoloP

Non sono un programmatore ne un elettronico. ho solo un po' di passione e mi documento su quello che mi interessa.
I pin 0 e 1 sono collegati alla seriale hardware del chip di Arduino e sono usate per la programmazione via seriale.
Possono essere usate per il proprio progetto per collegare periferiche seriali come i moduli bluetooth.

Credo che nel codice che ho scritto ci sia un problema col timeout.  :smiley-sweat:

format

#21
Dec 22, 2012, 06:36 pm Last Edit: Dec 22, 2012, 07:02 pm by format Reason: 1
facendo qualche prova mi sembra che dopo il login accendo un led aspetto il timeout
se provo a cambiare lo stato di qualche led torna alla pagina di login, però se faccio il login di nuovo
non mi porta sulla gestione dei led, ma resta sempre nella pagina del login, a questo punto non basta
chiudere e riaprire il browser, ma devo resettare l'Arduino.
Per avere conferma ho commentato tutto il codice relativo al timeout e sembra funzionare bene.


PaoloP

Adesso dovrebbe andare. Più o Meno.  ;)

Code: [Select]
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA };
IPAddress ip(192, 168, 40, 15);       
IPAddress gateway(192, 168, 40, 254); 
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(80); //server port

String readString; //string
boolean LED1ON = false; //LED1 status flag
boolean LED2ON = false; //LED2 status flag
boolean LED3ON = false; //LED3 status flag
boolean login = false;

unsigned int previousMillis = 0;
unsigned int currentMillis = 0;
unsigned int interval = 60*1000;

void setup(){
  delay(2000);

  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  Serial.begin(9600);
  Serial.print("Serial Start! at ");
  Serial.print(millis());
  Serial.println(" millisecond.");

  Ethernet.begin(mac, ip, gateway, gateway, subnet); 
  // delay(2000);

  Serial.println("Ethernet configured");
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());
  Serial.print("SubnetMask: ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(Ethernet.gatewayIP());
  Serial.print("DNS Server: ");
  Serial.println(Ethernet.dnsServerIP());

  Serial.println("Wait client...");
}

void loop(){
  currentMillis = millis();
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Client connect");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readString.concat(c);
        if (c == '\n' && currentLineIsBlank){
          Serial.print("--> ");
          Serial.println(readString);
          CheckLogin();
          if(login==true) CheckLed();
          WebPage(client);
          //clearing string for next read
          readString="";
          //stopping client
          client.stop(); 
        }
      }
    }
    Serial.println("Client disconnect");
  }
}

void CheckLogin() {
  if (currentMillis - previousMillis > interval){
    login = false;
    previousMillis = currentMillis;
    Serial.println("Login Timeout");
  }
  if (readString.indexOf("Nome=user&Pwd=pass") > 0) {
    login=true;
    previousMillis = currentMillis;
    Serial.println("Login OK ");
  }
  if (readString.indexOf("L=Exit") > 0) {
    login=false;
    Serial.println("No Login");
  }
}


void WebPage (EthernetClient &client){
  // INIZIO DICHIARAZIONE PAGINA HTML
  client.println(F("HTTP/1.1 200 OK"));
  client.println(F("Content-Type: text/html"));
  client.println();
  client.print(F("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"));

  // Finestra di login
  if (login==false) {
    // client.print(F("<form action='http://192.168.40.220/'>"));
    client.print(F("<form>"));
    client.print(F("Nome"));   
    client.print(F("utente: <input name='Nome' value=''>"));
    client.print(F("Password: <input type='Password' name='Pwd' value=''>"));
    client.print(F("<input type='submit' value=' OK '>"));
    client.print(F("</form>"));
  }

  // Login OK
  if (login==true) {
    //Primo led
    client.println(F("<hr />"));
    client.println(F("<h1>LED1</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED1ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=1'>ON</a> | <a href='/?L=01'>OFF</a></h2>"));
    client.println(F("<hr />"));

    //Secondo led
    client.println(F("<h1>LED2</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED2ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=2'>ON</a> | <a href='/?L=02'>OFF</a></h2>"));
    client.println(F("<hr />"));

    //terzo led
    client.println(F("<h1>LED3</h1>"));
    client.println(F("<br />"));
    //printing LED status
    client.print(F("<span>STATO LED: </span>"));

    if (LED3ON) {
      client.println(F("<span style='color:green'>ON</span>"));
    }
    else
    {
      client.println(F("<span style='color:grey'>OFF</span>"));
    }
    client.print(F("<h2><a href='/?L=3'>ON</a> | <a href='/?L=03'>OFF</a></h2>"));

    client.println(F("<hr />"));
    //Exit
    //  client.println(F("<h1>Exit</h1>"));
    //  client.println(F("<br />"));
    client.print(F("<h2><a href='/?L=Exit'>Exit</a>"));

  } //chiude if login=true
  client.println(F("</body></html>"));
}


void CheckLed() {
  // Check Led

    if(readString.indexOf("L=1") > 0) {
    digitalWrite(3, HIGH); // set the LED on
    LED1ON = true;
  }

  if(readString.indexOf("L=01") > 0)
  {
    //led has to be turned OFF
    digitalWrite(3, LOW); // set the LED OFF
    LED1ON = false;
  }

  if(readString.indexOf("L=2") > 0) {//lets check if LED should be lighted
    //led has to be turned ON
    digitalWrite(5, HIGH); // set the LED on
    LED2ON = true;
  }

  if(readString.indexOf("L=02") > 0) 
  {
    //led has to be turned OFF
    digitalWrite(5, LOW); // set the LED OFF
    LED2ON = false;
  }

  if(readString.indexOf("L=3") > 0) {//lets check if LED should be lighted
    //led has to be turned ON
    digitalWrite(6, HIGH); // set the LED on
    LED3ON = true;
  }

  if(readString.indexOf("L=03") > 0)
  {
    //led has to be turned OFF
    digitalWrite(6, LOW); // set the LED OFF
    LED3ON = false;
  }
}

format

Ora funziona alla grande.
Ma tutto questo codice potrei metterlo anche su una SD?
Ma la F dopo print a cosa serve?



Grazie ancora

PaoloP

Per metterlo su una SD bisognerebbe modificare pesantemente il codice scritto.
La funzione F serve per risparmiare memoria dicendo ad Arduino di caricare il testo direttamente dalla memoria flash e non dalla memoria Ram.
Funziona solo con il testo "statico" e non con le variabili. Però e molto utile in questi casi, così Arduino non si impalla per mancanza di memoria.

pablos

#25
Dec 22, 2012, 09:06 pm Last Edit: Dec 22, 2012, 11:11 pm by pablos Reason: 1
Io per 401 intendevo questo

Code: [Select]
void WebPage (EthernetClient &client){
 // INIZIO DICHIARAZIONE PAGINA HTML  
 client.print("HTTP/1.1 401 Authorization Required\r\n");
 client.print("WWW-Authenticate: Basic realm=\"mio login\"\r\n");
 //client.println();
 //client.println(F("HTTP/1.1 200 OK"));
 //client.println(F("Content-Type: mime/type"));
 client.println();
 client.print(F("<html><head><title>ARDUINO Controllo Led via WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"));


Queste 2 righe fanno apparire il popup di autenticazione da qualsiasi client compatibile compresi gli smartphone, se non altro questa non è visibile sulla get ed è minimamente criptata in base64, nel char c = client.read(); viene racchiuso l'user e pass codificato, resta solo confrontare la stringa che si può leggere in fase di realizzazione con l'uso di debug o online usando una decodifica base64 senza l'uso di nessuna libreria,  poi ci sarebbe l'algoritmo  MD5 un po' più complicato ma fattibile lo stesso la cifratura è un po' più complessa e più difficile intercettarla e decodificarla.

ciao
no comment

PaoloP


format

ho applicato queste righe:
client.print("HTTP/1.1 401 Authorization Required\r\n");
client.print("WWW-Authenticate: Basic realm=\"mio login\"\r\n");
al codice però non funziona bene, nel senso che mi esce la richiesta di login, ma se faccio annulla
torno al login del codice originale, inoltre se provo ad accendere / spegnere un led mi compare sempre il popup
di autenticazione.
Quindi credo che bisognerebbe adattare tutto il codice per questo tipo di login.

pablos

#28
Dec 22, 2012, 11:51 pm Last Edit: Dec 22, 2012, 11:53 pm by pablos Reason: 1
Certo, ho scritto le righe del richiamo, poi devi fare tu le tue elaborazioni dei response ricevuti leggendo il char c, sono meno modifiche di quanto credi, una volta avute le credenziali puoi lanciare il 200 altrimenti sempre il 401
no comment

pablos

#29
Dec 23, 2012, 12:05 am Last Edit: Dec 23, 2012, 12:44 am by pablos Reason: 1
usando ad esempio questa pag http://www.motobit.com/util/base64-decoder-encoder.asp
scrivendo adminadmin (user=admin ... passw=admin) otterrai questa stringa YWRtaW5hZG1pbg== ... dovrai cercarla nel char c  se readString è == a "YWRtaW5hZG1pbg=="  manda le altre linee del client.print con codice 200, altrimenti rimandami un 401 dove in pratica riapri il popup, oppure se la pass è sbagliata scrivi con codice 200 client.print Pass errata + un tasto nella pagina "ritorna al login" rilanciando nuovamente un 401 e così all'infinito.

Comunque dipende dal livello di sicurezza che vuoi ottenere. Con la stringa ottenuta dalla decodifica MD5 invece di 16 caratteri ne hai 32, ma a differenza del base64 l'MD5 non è reversibile cioè dalla stringa codificata non si può risalire a user e pass (o comunque è molto difficile si ottengono molte probabilità e molti conflitti) mentre se nel link che ho incollato prima scrivi ..... decodifica questa stringa a base64 YWRtaW5hZG1pbg== puoi risalire all'user e alla pass che poi vai a scrivere nel popup (però prima mi devo attrezzare per intercettarla)

Se a un utente interessa invece codificare tutto il traffico in entrata e in uscita ad esempio il get?on=1 allora deve usare la libreria di codifica e decodifica base64 o la pesantissima MD5, tutto ciò però succhia risorse ad arduino, un 16 MHz è un po' limitato a fare tutto ciò, ma non è impossibile

in linea di principio per avere una maggior sicurezza servirebbe l'https, in questo caso arduino deve essere dietro a un server ben fatto

ciao
no comment

Go Up