securiser l'acces à la base mysql

securiser l'acces à la base mysql - PHP - Programmation

Marsh Posté le 04-01-2018 à 20:10:55    

Bonjour /bonsoir
 
J'ai un projet de station météo connectée en gprs qui envoie toute les 15 minutes  une requette  : http://ipDuRaspPi/repertoire/write [...] ?o=15&v=16 sur mon raspberry pi. Celui ci rempli la base mysql avec la date, la vitesse du vent et son orientation. voila le contenu de mon fichier write_data.php

Code :
  1. <?php
  2.     // on se connecte à notre base
  3.     $base = mysql_connect (localhost, loginBaseDonne, motDePasseBasedonne);
  4.     mysql_select_db ('data_anemo', $data_anemo) ;
  5.   ?>
  6. <html>
  7. <head>
  8. <title>Insertion de données dans la base</title>
  9. </head>
  10. <body>
  11. <?php
  12. $ori = $_GET["o"];
  13. $vit = $_GET["v"];
  14. $tmp = $_GET["t"];
  15. // lancement de la requete
  16. $sql = "INSERT INTO data_anemo.data_anemo1 (`id`, `Date`, `orientation`, `vitesse`, `temperature`) VALUES  ('',NOW() ,$ori , $vit, $tmp)";
  17. // on insere le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die)
  18. mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
  19. // on ferme la connexion à la base
  20. mysql_close();
  21. ?>
  22. qque chose vient d'être inseré dans la base.
  23. <p>ces valeurs : <?php echo $_GET['o'] . ' ' . $_GET['v'] . ' ' . $_GET["t"] . ' ' ; ?> !</p>
  24. </body>
  25. </html>


 
et je peut ensuite lire mes données via :  

Code :
  1. <?php
  2. // on se connecte à MySQL
  3. $db = mysql_connect('localhost', 'loginBaseDeDonne', 'motDePasseBaseDeDonnee');
  4. // on sélectionne la base
  5. mysql_select_db('data_anemo',$db);
  6. // on crée la requête SQL
  7. $sql = 'SELECT * FROM data_anemo1 ORDER BY Date DESC LIMIT 20';
  8. // on envoie la requête
  9. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  10. // on fait une boucle qui va faire un tour pour chaque enregistrement
  11. while($data = mysql_fetch_assoc($req))
  12.     {
  13.     // on affiche les informations de l'enregistrement en cours
  14.     echo '<b>'.$data['id'].' '.$data['Date'].' UTC</b>    vitesse: '.$data['vitesse'].'km/h';
  15.     echo ' <i>  orientation : '.$data['orientation'].' degrés</i><br>';
  16.     }
  17. // on ferme la connexion à mysql
  18. mysql_close();
  19. ?>


 
Je ne suis pas un programmateur php, j'ai pris des bouts de code à droite et à gauche, mais je comprend quand même ce que çà signifie.
Je  me rend compte que bien que ça fonctionne, ce n'est vraiment pas sécurisé.
Que puis je faire pour sécuriser ces connections ?
 
1ere chose, envoyer une "clé" en paramètre , rajouter &cle=ihzefcnfcgyo575fc à la fin de mon http://ipDuRaspPi/repertoire/write [...] ?o=15&v=16, et si ele n'est pas présente, rejeter l'ajout à la base de donnée
 
2eme chose, le login et le mdp sont en clair dans les fichier write_data.php et test.php .  Comment faire pour tout sécuriser ?
 
Cordialement   Olivier
PS si vous me répondez, pensez que vous avez à faire à quelqu'un qui n'a pas l'habitude de php ou de mysql
 
 

Reply

Marsh Posté le 04-01-2018 à 20:10:55   

Reply

Marsh Posté le 04-01-2018 à 20:42:24    

Le code que tu utilses pour la connection à la base de données est obsolète et comporte de grosse failles de sécuité,
actuellement le mieux est d'utiliser PDO pour les connexions à une db.
 
Un lien indispensable sur les bonnes prartiques php
http://www.phptherightway.com/
 
Pour l'autentification, s'il n'y a qu'un utilisateur tu peux utiliser htaccess
https://www.digitalocean.com/commun [...] untu-14-04
 
mais je pense que  l'Authentification basique demande une connection https pour être un minimum sécurisée donc le mieux c'est d'utiliser https://letsencrypt.org/getting-started/, surtout si l'application est accessible sur internet


Message édité par tompouss le 04-01-2018 à 20:43:45

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 04-01-2018 à 23:47:28    

Htaccess  -> manque de bol j'ai un serveur nginx
 
PDO ok, mais est ce securisé de laisser en clair le login et pwd dans le fichier write_data.php  ?  Comment faite vous  ?
Je n'arrive pas à trouver de tuto la dessus. Pouvez vous m'en conseiller un ?
Cordialement

Reply

Marsh Posté le 05-01-2018 à 05:33:26    

L'authentification n'est pas propre à Apache: c'est dans les spécifications du protocole http donc tu peux le configurer aussi sur Nginx mais sans htaccess évidemment.
https://www.nginx.com/resources/adm [...] c/#example
 
 
Stocker des mot de passe en clair n'est JAMAIS une bonne idée, quelque soit l'endroit où ils se trouvent (db, ou fichier).
 
Le mieux actuellement est de chiffrer les mots de passe avec l'algo Bcrypt qui est prévu pour.  
Tu peux l'utiliser avec Nginx pour sécuriser l'accès à ton programme.
http://www.genecasanova.com/labs/s [...] ation.html
 
Je ne pense pas que stocker des mots passe, même chiffrés en dur dans un fichier PHP soit une bonne idée.
Ici ils expliquent pq il ne faut pas stocker les password dans un fichier php:
https://security.stackexchange.com/ [...] n-file-php
A mon avis, les 2 meilleures solutions sont soit stockage des  login et mots de passe par apache, nginx soit dans la base de données, mais chiffrés dans tous les cas .
 
Perso dans ton cas, le stockage dans un fichier nginx me semble être la meilleure solution.


Message édité par tompouss le 05-01-2018 à 06:12:23

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 06-01-2018 à 23:42:14    

Bon merci.  Ca n'a pas l'air simple cette affaire. Je vais creuser...

Reply

Sujets relatifs:

Leave a Replay

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