REMOTE_ADDR

Répondre
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

Je viens de lire la nouvelle sur la non sécurité de REMOTE_ADDR, je suis allé sur les cours php, et sur "Afficher le nombre de connectés sur un site", tu n'as pas proposé de modification ?

Il n'y a pas plus de parade sur le site d'où est issue la nouvelle.

Alors, que peut-on faire pour sécuriser ce REMOTE_ADDR ?

Jack Bocar
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Les comment faire ne sont pas du tout sécurisés (je ne sais pas combien de fois j'ai du le répéter çà).
Ils sont juste là pour vous fournir un squelette de programmation.

Sinon, pour l'exemple de ce blog, la solution est simple : htmlentities.
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

J'ai essayé de placer le "HTMLENTITIE" et le "ENT_QUOTES". Le problème est que maintenant, pour afficher le nombre connecté, il me faut rafraichir la page…

J'ai du faire une erreur mais où ?

Mon code :



  1.  
  2. <?php
  3. $conn = db_connect();  
  4. $result = $conn->query('SELECT count(*) FROM visiteurs_online');  
  5. $data = mysqli_fetch_array($result);  
  6.  
  7. echo '<br />';  
  8. echo '<p class="connexion">Actuellement &nbsp; <strong>' , $data[0] , ' </strong> &nbsp; visiteur(s) sur le site. </p>';  
  9. echo 'Votre adresse IP est :';  
  10. echo ''.htmlentities($_SERVER["REMOTE_ADDR"].'',ENT_QUOTES);  
  11.  
  12. echo '<br />';  
  13. ?>
  14.  


Merci de votre aide

Jack Bocar
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Ben appuie sur F5.

Ca se refresh à chaque chargement de page le truc.
Si tu veux le faire toutes les x secondes, tu dois faire un truc en Ajax.
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

Lorsque j'ouvre une page, le nombre de connectés et à 0, il faut réactualiser cette page pour voir le chiffre apparaître.

1) - Est-ce que les "HTMLENTITIES" et le "ENT_QUOTES", sont biens placés ?

  1.  
  2. <?php
  3. echo ''.htmlentities($_SERVER["REMOTE_ADDR"].'',ENT_QUOTES);  
  4. ?>
  5.  



2) - Je suppose qu'il n'est pas nécessaire d'en placer sur toutes les lignes du code suivant :

  1.  
  2. <?php
  3. $result = $conn->query('SELECT count(*) FROM visiteurs_online WHERE ip= "'.$_SERVER['REMOTE_ADDR'].'"');  
  4.  
  5. $result = $conn->query('UPDATE visiteurs_online SET time = "'.$temps_actuel.'" WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"');  
  6.  
  7. $result = $conn->query('INSERT INTO visiteurs_online VALUES("'.$_SERVER['REMOTE_ADDR']. ",
  8. ?>
  9.  



Merci de votre aide.

Jack Bocar
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Lorsque j'ouvre une page, le nombre de connectés et à 0, il faut réactualiser cette page pour voir le chiffre apparaître.


Ben c'est pas bon ca.
Tu dois d'abord enregistrer la visite en base, puis seulement ensuite tu peux compter combien de visiteurs tu as.

Pour ton htmlentities, ca sert à rien de concaténer l'adresse IP avec une chaine vide.
Fais juste un :

  1. <?php
  2. echo htmlentities($_SERVER["REMOTE_ADDR"], ENT_QUOTES);  
  3. ?> 


Ensuite, pour tes requêtes SQL, il manque une fonction qui permet de te protéger contre les injections SQL.

Je ne sais pas ce que tu utilises comme base SQL (non plus quelle classe PHP tu utilises), mais la fonction à utiliser pour du MySQL, c'est mysql_escape_string (surement que ta classe a sa propre méthode d'escape, regarde la doc de ta classe).
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

J'ai refais le code, dis-moi si c'est correct ou s'il faut modifier quelque chose pour l'améliorer.


  1.  
  2. <?php
  3. $mysqli = new mysqli('localhost', 'jackbocar', 'mon password', 'ma base');  
  4.  
  5. if (mysqli_connect_errno()) {  
  6. printf("Echec de la connexion : %s\n", mysqli_connect_error());  
  7. exit();  
  8. }  
  9.  
  10. $tps_max_connex = 180;  
  11.  
  12. $temps_actuel = date("U");  
  13.  
  14. $result = $mysqli->query('SELECT count(*) FROM visiteurs_online WHERE ip= "'.mysql_escape_string($_SERVER['REMOTE_ADDR']).'"');  
  15. $data = $result->fetch_array(MYSQLI_NUM);  
  16. $result->close();  
  17.  
  18.  
  19.  
  20. if ($data[0]) {  
  21.  
  22. $result = $mysqli->query('UPDATE visiteurs_online SET time = "'.$temps_actuel.'" WHERE ip = "'.mysql_escape_string($_SERVER['REMOTE_ADDR']).'"');  
  23. }  
  24. else {  
  25. $result = $mysqli->query('INSERT INTO visiteurs_online VALUES("'.mysql_escape_string($_SERVER['REMOTE_ADDR']). '", "'.$temps_actuel.'")');  
  26. }  
  27.  
  28. $heure_max = $temps_actuel - $tps_max_connex;  
  29.  
  30. $result2 = $mysqli->query('DELETE FROM visiteurs_online where time < "'.$heure_max.'"');  
  31. ?>
  32.  
  33. <?php
  34. $mysqli = new mysqli('localhost', 'jackbocar', 'mon password', 'ma base');  
  35.  
  36. if (mysqli_connect_errno()) {  
  37. printf("Echec de la connexion : %s\n", mysqli_connect_error());  
  38. exit();  
  39. }  
  40.  
  41. $result = $mysqli->query('SELECT count(*) FROM visiteurs_online');  
  42. $data = $result->fetch_array(MYSQLI_NUM);  
  43. $result->close();  
  44.  
  45. echo 'Il y a actuellement ' , $data[0] , ' personne(s) sur le site.';  
  46. echo '<br /><br />';  
  47. echo '<p>';  
  48. echo 'Votre adresse IP est :';  
  49. echo htmlentities($_SERVER["REMOTE_ADDR"], ENT_QUOTES);  
  50.  
  51. echo '</p>';  
  52. ?>
  53.  


Merci

Jack Bocar
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

Personne pour me dire si c'est correct !!!

Jeff
LA GLOBULE
LA GLOBULE
Déconnecté
111 111 111 x 111 111 111 = 12 345 678 987 654 321
Ben si ça fonctionne sans erreur (je n'ai pas testé), c'est que c'est pas trop mal.

Par contre, si jamais tes requêtes SQL merdent, il faut l'handler (tu ne le fais pas tout le temps).

Le mieux, c'est de faire un vrai handler d'erreur plutôt que d'afficher tes erreurs directement sur le site.

Sur lephpfacile, quand une erreur est générée, elle est loguée en base, je ne l'affiche pas, et je redirige le mec sur la home du site (si y'a une erreur en home, je redirige le mec sur une pauvre page HTML).
jeff
jeff
Déconnecté
Je suis pour le monde du libre
Bonjour,

Merci de ta réponse.

Mais, je ne sais pas ce que ça veut dire "handler", et surtout pas comment réaliser un code.

Où, puis-je me renseigner pour avoir un tutoriel et surtout un modèle.

Merci de ta réponse.

Jack Bocar
Répondre
Accès rapide :

Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog