Contrôler nos équipements en toute sécurité

J'ai réussi à piloter mon chauffage depuis mes pages web en je l'espère, empêchant un quelconque quidam de venir bricoler celui-ci.mise-en-marche-moteur.jpg

Je dis "j'espère" car en terme de sécurité il faut être modeste. La sécurité est assurée jusqu'à preuve du contraire. Et souvent les systèmes les plus solides finissent par être cassés.
Le billet précédent sur le ".htaccess" est évidemment essentiel, vous pouvez revenir dessus.

Base de la méthode

Voici le code que j'utilise pour démarrer/arrêter le chauffage.

Dans ma page publique : La page "chauffage.php"
 <form action="dossier_secure/mod_ma.php" method="post">
 <?php
    $f_data=fopen('temp/chauffage_ma', 'r+') ; // lecture de l'état du chauffage 
    $data=fgetc ($f_data) ;
    fclose($f_data) ;
//
    if (isset($_POST['x_ma'])) {   // x_ma est le retour du programme "mod_ma.php"
		if ($_POST['x_ma']) {
			if ($data) { ?> <input type="image" src="img/erix_stop.png"  > <?php } // affichage des boutons
			else         { ?> <input type="image" src="img/erix_hiver.png" > <?php }
		}
	}
	else {
		if ($data) { ?> <input type="image" src="img/erix_hiver.png" > <?php }
		else         { ?> <input type="image" src="img/erix_stop.png" > <?php }
	}
 ?>
 </form>

Le code précédent affiche les boutons de contrôle et lance le programme de modification qui est déposé dans le dossier sécurisé.

Dans mon dossier sécurisé

Je vais utiliser 2 programmes. Un pour un dialogue simple de validation de l'arrêt ou mise en marche et un deuxième pour modifier les données elles mêmes avec retour vers la page principale.
C'est un peu lourd, mais ça me permet de ne pas ajouter dans la page publique aucun code d'écriture des données. Quelque chose me fait penser qu'il est préférable de pas avoir de <?php "fputs" ?> dans une page publique, si vous pensez différemment, je vous invite à en discuter.

le programme : "dossier_secure/mod_ma.php"
<form action="chg_ma.php" method="post">
<b>M/A ERIX</b>
<br>Êtes vous sûr(e) de vouloir changer l'état du chauffage ? <br>
  <button name="x_ma" type="submit" value="1">oui</button>
  <button name="x_ma" type="submit" value="0">non</button>
</form>

Pas très compliqué, n'est-ce pas ?

le programme : "dossier_secure/chg_ma.php"
<form action="../chauffage.php" method="post"> <! page de retour>
  	 <?php
        $f_data=fopen('/temp/chauffage_ma', 'r+') ; // lecture de l'état du chauffage
        $data=fgetc($f_data) ;
        fseek($f_data, 0) ;
        if (isset($_POST['x_ma'])) {
	 	    if ($_POST['x_ma']) {
			    if ($data) { fputs($f_data, "0") ; } // C'est ici que j'écris le nouvel état du chauffage
			    else         { fputs($f_data, "1") ; }
		        }
		    $data=!$data ;
	    }
        fclose($f_data) ;
	    if ($data) { echo "Le chauffage est en marche " ; }
	    else       { echo "Le chauffage est arrêté " ; }
	 ?>
	 <button name="x_on" type="submit" value="1">ok</button>
</form>

conclusion

Je ne donne pas beaucoup d'explications. Je vous laisse étudier le code et la méthode. Il est peut-être possible de faire plus joli, plus propre, mais ça marche et j'espère que ce n'est pas "bricolable" de l'extérieur.

ps: Ah ! J'ai oublié de vous dire, tous les noms de fichiers et variables sont modifiés. Je ne voudrai pas inciter des p'tits malins à tester la sécurité de mon système.
J'en ai peut-être déjà trop dit !?