Authentification serveur WEB arduino

Bonjour,

Alors mon problème s’inscrit dans le projet suivant :

À l'aide d'un arduino uno, je compte faire un "thermostat" pour un radiateur Electrique de mon appartement ( celui de la pièce principale ), il n'y a pas de fil pilot, je vais alors via un relais 5V/220V 16A alimenter ou non le radiateur ( régulation tout ou rien ).

Je souhaite à l'aide d'un sheild ethernet visualiser la température de la pièce, rentrer une consigne en température ou verrouiller allumer/éteint le radiateur. Jusque là, je n'ai pas de soucis.

Le soucis interviens en effet au niveau du site, tout le monde peux y accéder et donc modifier les valeurs je n'ai pas envie de rentrer chez moi avec le radiateur à fond en plein été ^^

Alors voilà j'ai réfléchi a plusieurs solution mais je ne sais pas si elles sont possibles.

  • Connexion demandant un mot de passe ( meme sans nom d'utilisateur ) pour accéder au site l'arduino
  • L'arduino étant branché à la box, je ne sais pas si je peux autorisé l'acces a l'arduino se faisant par le port 1234 seulement à un white liste d'@MAC ( ce serais tellement simple )
  • Dernière solution : afin de valider une modification de consigne ou autre, devoir rentrer une chaîne de caractère qui ferais office de mot de passe dans une box.

Si vous pourriez m'apportez vos idée ou une méthode afin de concrétisé l'un des mienne, ce serais génial.

Merci d'avance !!

A bientôt !

Djo

hollinguade:
...
Le soucis interviens en effet au niveau du site, tout le monde peux y accéder et donc modifier les valeurs je n'ai pas envie de rentrer chez moi avec le radiateur à fond en plein été ^^

...

bonjour
l'arduino n'etant pas en capacité de gerer du HTTPS , le plus simple (et c'est ce que j'utilise pour une appli equivalente)
choisir un port "exotique" pas le 80 (ou le 8080) du standard HTTP
et mettre un password (tu peux meme faire du pseudo rollingpw ou du pw dynamique) , c'est loin d'etre une solution parfaitement securisée , mais de toutes façons si un hacker veux absolument te "foutre le chauffage à fond en aout" , il y arrivera ,
la vraie question devenant alors :
"qu'est ce que tui lui aura fait pour qu'il t'en veuille à ce point" :grin:

Tu peux coder ça pour que le chauffage tienne compte du mois de l'année, ou n'accepteur que certains adresses IP entrantes.

Merci de vos réponses rapides, je ne cherche pas à sécurisé un max la page :wink:

Juste éviter le petit malin qui passe par là ( car je vais avoir un nom de domaine pour le site ) de changer les infos comme bon lui semble. En effet bloquer certaine adresse IP ( bien que je prefererais configuré celles dont je veux qu'elles aient accès ) bien que je ne pense pas que ce soit possible, j'ai plus de chance de trouver une solution côté adresse MAC non ?

et sinon concernant

et mettre un password (tu peux meme faire du pseudo rollingpw ou du pw dynamique)

Je ne sais pas vraiment ce que c'est, je ne suis pas un pro de l'http :wink:

Une idée : tu ajoutes un champ texte dans ton formulaire, et ce champ doit contenir un mot de passe bien défini pour que l'action soit prise en compte.

le mieux est un site web non indexé sur Google (bloquer les robots en page d'entrée, ne pas avoir de liens entrants).
En PHP c'est facile de lire une IP entrante, mais il faut Apache, qui est trop lourd pour un petit Arduino.

XavierMiller:
Une idée : tu ajoutes un champ texte dans ton formulaire, et ce champ doit contenir un mot de passe bien défini pour que l'action soit prise en compte.

Merci, cela rejoins la dernière des idées que j'ai énoncé et ce sera celle que j'utiliserai si je ne trouve pas de solution plus "propre" :wink:

le mieux est un site web non indexé sur Google (bloquer les robots en page d'entrée, ne pas avoir de liens entrants).

C'est possible çà même si j'ai une redirection par nom de domaine ? En faite si je ne fait rien il ne sera pas indexé si ?

Une autre question, ce n'est pas possible via les paramètres de la freebox d'autorisé l'acces sur le port de redirection vers l'arduino seulement aux adresses MAC/IP que je défini ?

Perso je me connecte à distance chez moi et je gère comme si j'étais sur place :smiley:

hollinguade:
Une autre question, ce n'est pas possible via les paramètres de la freebox d'autorisé l'acces sur le port de redirection vers l'arduino seulement aux adresses MAC/IP que je défini ?

Oui ça doit être faisable par l'interface admin de la free

john_lenfr:
Perso je me connecte à distance chez moi et je gère comme si j'étais sur place :smiley:

C'est ce que je veux faire ( et fait déjà ) mais je veux que seulement moi puisse y accéder :wink:

bonjour,
une solution pour piloter le nono via internet sans être emmerd.. et de mettre en place un proxy avec un rapsberry par exemple.
on attaque via le web l'ip de la freebox qui redirige vers le raspberry qui sert de server apache.
un script de ouf en php va gérer l'url, attention, c'est du niveau bac+35 :slight_smile:
http://tata_a_de_beaux_yeux/login.php?tata=tata
et le raspberry va via du rewrite renvoyer après authentification vers le nono :wink:
sans le ?tata=tata => redirection google.fr
tout passera par le raspberry qui fera son taf en pseudo "firewall"
si un moteur passe par là, il aura juste le ndd, au pire tu rajoutes un htaccess et htpwd.
les crawlers sont de plus en plus efficaces pour déjouer les robots.txt.
et une commande sous nunux est encore plus simple pour repiquer la liste des fichiers sur un server :wink:

affaire classée :slight_smile:

Une autre question, ce n'est pas possible via les paramètres de la freebox d'autorisé l'acces sur le port de redirection vers l'arduino seulement aux adresses MAC/IP que je défini ?

tu ne peux pas récupérer la mac de ton pc/tablette/gsm comme ca, donc c'est niet.
et tu ne peux avoir la même ip de l'extérieure lorsque tu vas en vacances par exemple, donc c'est niet.

Chez moi, je ne donne accès à l'extérieur qu'à un serveur SSH avec authentification par clef privée, depuis lequ el je démarre un tunnel, qui me crée ainsi un pseudo VPN (cherchez "putty ssh proxy" pour voir comment créer et utiliser un proxy local en SOCKS).

Avec ça, je suis sûr qu'on ne viendra pas facilement chez moi, et avec accès à toutes mes resources quand même.

XavierMiller:
Chez moi, je ne donne accès à l'extérieur qu'à un serveur SSH avec authentification par clef privée, depuis lequ el je démarre un tunnel, qui me crée ainsi un pseudo VPN (cherchez "putty ssh proxy" pour voir comment créer et utiliser un proxy local en SOCKS).

Avec ça, je suis sûr qu'on ne viendra pas facilement chez moi, et avec accès à toutes mes resources quand même.

tu passe aussi par un server pour le ssh qui va ouvrir un proxy, c'est du reverse ssh en fait.
ca rejoint mon idée en quelque sorte

Finalement ce que je prennais comme secondaire deviens bien difficile...

Je manque de connaissance et vais donc devoir pas mal bouquinner avant de "sécuriser" le système ou de trouver un moyen simple même si pas très fiable.

Sinon quelle sont les probabilité que quelqu'un tombe sur mon site s'il n'est pas réferencer ? Et pour qu'il ne soit pas référencer, il faut faire quelque chose de spécial ? ( je vais passer par un pseuodo domaine gratuit de chez azote.org ( c'est pas terrible mais c'est juste pour éviter a avoir a taper l'adresse IP + le port )

infobarquee:
bonjour,
une solution pour piloter le nono via internet sans être emmerd.. et de mettre en place un proxy avec un rapsberry par exemple.
...

Bonsoir IB
oui , je suis d'accord , mais c'est quand meme un peu usine à gaz :grin:
en restant pragmatique , le but du jeu est simplement de discuter avec l'arduino pour faire du ON/OFF et recuperer qq infos eventuellement.
Le risque d'intrusion même si il est non nul , n'est pas tres elevé (ça n'a rien à voir avec une attaque sur du gros serveur) :grin:
Perso : un port un peu exotique et une gestion dynamique faible de PW me semble suffisant "dans ce genre d'applis simples"
Ce n'est ni pire, ni meilleur que quand je faisais de la mise en route de chauffage par le RTC avec un minitel et un modem :grin: .

une gestion dynamique faible de PW

je suis désolé mais je suis novice et ne comprend pas cette phrase >< sry :astonished:

PW = password. Avec un mot de passe qui change.
Bon, c'est que du chauffage, un cryptage ultra secret n'est pas non plus vital.

Tout à fait, je ne compte pas crypter quoi que ce soit ^^

Mais toujours est-il que je ne sais pas comment je dois procéder afin de demander la saisi d'un PW depuis le site web généré par l'arduino

hollinguade:
Tout à fait, je ne compte pas crypter quoi que ce soit ^^

Mais toujours est-il que je ne sais pas comment je dois procéder afin de demander la saisi d'un PW depuis le site web généré par l'arduino

bonjour
tu peux generer un PW temporaire/aleatoire valide pour par exemple une minute.
lors de l'appel de la page l'arduino t'envoi un random , à toi de definir ensuite ta fonction

https://code.google.com/p/easyrobot/wiki/BasicAuthentication

Mais je pense que le plus intéressant est:

Il y a également:

//Code by zhiran.taha@yahoo.com


#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
/////////////////////////////////////////////////////////
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 178}; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // ip in lan
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString; //
boolean login=false;

/////////////////////////////////
void setup(){
Ethernet.begin(mac, ip);
Serial.begin(9600);
    Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  login = false;
}
void loop(){
EthernetClient client = server.available();
if (client) {
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
        readString.concat(c);
      if (c == '\n' && currentLineIsBlank) {
        // Serial.print(readString);
       
        if(readString.indexOf("User=user&Pass=user") > 0) {
login=true;
        }
           
        ////////////////////////////////////////////////////////////////////////////
        
        if(login==true){
     
        if(readString.indexOf("Logout") > 0) {

          login=false;
     
          }      
        } 
        /////////////////////////////////////////////////////
if (login == false) {
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println();
        client.print("<html>");
        client.println("<meta http-equiv=\"refresh\" content=\"60\">");
       client.println(" <head><title>website title</title><center></head><body> ");
       client.println("<h1>Welcome to Website</h1><hr />");
        if (login == false) {
        client.println("<h1>Please login to control!</h1>");
        client.print("<form action='192.168.1.178/'>");
        client.print("");
        client.print("Username: <input name='User' value=''>");
        client.print("Password: <input type='Password' name='Pass' value=''>");
        client.print("<input type='submit' value=' Login '>");
        client.print("<hr /></form><hr />");
                
        }
}
        ////////////////////////////////////////////////////////////////////////////
        if (login==true) { 
      client.print("you get access");
        client.print("<h2><a href='/?Logout'>Logout</a>");
        client.println("<hr />");
        client.print("<span><strong>Project by Zhiran</strong?</span>");
       
        } //chiude if login=true 
        client.println("</center></body></html>");
 
        //clearing string for next read
        readString="";
        //stopping client
        client.stop();
        
 
        } 
    } 
  } 
} 

}