Se connecter avec
S'enregistrer | Connectez-vous

faille ou pas ?

Dernière réponse : dans Programmation

Bonjour,
c'est peut être une question bête, mais j'ai remarqué quelque chose sur mon site (en local): j'ai mis une pagination sur l'index, comme sa:
  1. http://localhost/monsite/index.php?page=numéro de la page



es-ce que c'est normal que quand je tape
  1. http://localhost/monsite/index.php?page=<a href="http://google.fr" target="_blank">http://google.fr</a>



c'est écrit:
  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\monsite\news.php on line **




je ne devrai pas être redirigé vers l'index ? Car quend j'essaye de faire ça sur d'autres sites je suis automatiquement redirigé vers l'index

Autres pages sur : faille

Lassé par la pub ? Créez un compte

C'est normal !
dans ton include, tu a preciser une extension. Php, ou TXT je sais pas...
pour tester, il te faut une page dont l'extensions est .php (ou autre c toi qui a choisit dans le code de l'include)
ma page de test est celle la : http://trust-in-us.fr/test.php
essaye sans le .php
met donc /?page=http://trust-in-us.fr/test
Si il t'affiche le texte et l'image, t'es vulnerable, sinon t'es protégé !
apres pour mettre une redirection euh ca doit etre quelque chose du genreelse {
include("index.php");
}

Quand ton site sera en ligne, envoi moi l'url, j'te dirais si il y a une faille ;) 
j'ai trouvé un site avec une faille include cet aprem.. fais gaffe avec ca, car TOUT mais alors TOUT est modifiable avec l'upload d'une page qu'on appelle backdoor...

enjoy
Expert Programmation

A mon avis, ça sent la grosse faille à plein nez.
Car pour avoir une erreur mysql, ça veut dire que tu ne traites pas pour voir si oui ou non le numéro de page est un chiffre, et si c'est pas un chiffre, tu mets 1.

voici mon script:
  1. <?php
  2. mysql_connect("localhost", "root", "");
  3. mysql_select_db("site");
  4. $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
  5. while ($donnees = mysql_fetch_array($retour))
  6. // PAGINATION
  7. $nombreDeMessagesParPage = 5;
  8. $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM news');
  9. $donnees = mysql_fetch_array($retour);
  10. $totalDesMessages = $donnees['nb_messages'];
  11. $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
  12.  
  13. //PAGINATION
  14.  
  15. if (isset($_GET['page']))
  16. {
  17. $page = intval($_GET['page']);
  18. }
  19. else
  20. {
  21. $page = 1;
  22. }
  23.  
  24. $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  25.  
  26. $reponse = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage) or die(mysql_error($page = 1));
  27.  
  28. while ($donnees = mysql_fetch_array($reponse))
  29. {
  30. $contenu = nl2br(stripslashes($donnees['contenu']));
  31. echo '<h2>';
  32. echo $donnees['titre'];
  33. echo '</h2>';
  34. echo '<div class="descr">Postée le ';
  35. echo date('d/m/Y à H\hi', $donnees['timestamp']);
  36. echo '</div>';
  37. echo '';
  38. echo $contenu;
  39. echo '<br><br><br>';
  40. }
  41.  
  42.  
  43. echo '<FORM name="formulaire" method="POST"><select size="1" name="url" onChange="navigation()" style="color:#BDB76B; width:50px; border:0px; background:#111111;">';
  44. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  45.  
  46. {
  47. echo '<option value="index.php?page=' . $i . '">' . $i . '</option>';
  48. }
  49. echo '</select></form><br><br><noscript>Si vous voulez que le sélécteur de page fonctionne, vous devez activer le javascript</noscript>';
  50.  
  51.  
  52. mysql_close();
  53. ?>




j'ai rajouté:
  1. or die(mysql_error($page = 1))

maintenant quand je remplace le chiffre par un numéro de page inexistant, je n'obtient plus l'erreur, es-ce que c'est bon ?
Expert Programmation

Euh, non faut pas rajouter ça...
Sinon, en fait ça vient de ton intval($_GET['page']), vu qu'il n'y a aucun chiffre, ton intval doit retourner 0 je pense, donc tu fais une requête LIMIT -5,5 ce qui est incompréhensible en SQL.
Remplace
  1. $page = intval($_GET['page']);

par
  1. $page = intval($_GET['page']);
  2. if($page==0) $page=1;


Et supprime ton or die(mysql_error($page=1)).



Edit: par contre le début de ton code est incompréhensible...
  1. $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5');
  2. while ($donnees = mysql_fetch_array($retour))
  3. // PAGINATION
  4. $nombreDeMessagesParPage = 5;


Utilité ?
Expert Programmation

tu fais une requête que tu n'utilises même pas.
T'as un while qui sert à rien vu qu'il a pas de crochet, il exécute que l'instruction suivante, soit redéfinir 5 fois $nombredeMessagesParPage = 5, super essentiel comme étape.
Essaie de mettre une boucle de 1000 histoire que tu sois sûr que la variable soit bien définie
Lassé par la pub ? Créez un compte
Tom's guide dans le monde