|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 7 ![]() |
Bonjour; j'ai réalisé un petit concours où il est possible de voter pour son image préférée.
Mon script vérifie l'IP du votant et ne permet qu'un vote par photo et par IP (mais une même IP peut voter pour plusieurs photos différentes). Le problème : en examinant mes tables; je remarque qu'il y a PLEIN d'entrées ou une même IP a voté plusieurs fois pour une même photo; généralement à quelques secondes d'intervalles. Code :
J'ai pensé que ces votants utilisaient qqch (proxy ou autre) pour "faker" leur IP; mais ça n'a pas l'air d'être cela puique l'IP sauvegardée dans la table et l'IP comparée dans la table (pour vérifier la possibilité de voter) sont la même. Je ne sais vraiment pas quoi penser, en toute logique je vois pas du tout la faille de mon script... Mais on dirait bien qu'il y en ait une. Quelqu'un aurait l'aimabilité de regarder mon code ? Merci ! Code :
|
||||
|
|
00
|
|
|
#2 | ||
|
Membre confirmé
![]() Dominique Première S Inscription : juillet 2010 Messages : 252 ![]() |
c'est étonnant ... même en ouvrant d'un coup plein d'onglet, ça ne devrait pas le faire ... pour le code, je ne connais pas la méthode utilisée, si tu essayais avec une requête normale ?
Code :
|
||
|
|
10
|
|
|
#3 |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
Il faut que tu protèges tes variables récupérées par post car tu utilises dans ta requête ce filtre qui est facilement crackable par injection sql :
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
00
|
|
|
#4 | |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 7 ![]() |
Citation:
Je dois donc juste vérifier que $sent['img_id'] et $ip sont des "numbers" ? genre Code :
if(!is_number($img_id)) $img_id=false; Merci |
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Dominique Première S Inscription : juillet 2010 Messages : 252 ![]() |
faut pas oublier les ipv6 qui contienne des lettres je crois ... non ?
Marc3001 à dit ça parce qu'avec ton système actuelle, il est effectivemet possible de passer une fausse ip. la solution serait de récupérer l'ip grâce à la variable super_globale $_SERVEr['REMOTE_ADDR'] qui te renvoie l'ip du visiteur ... te je ne crois pas que cette variable soit falsifiable. |
|
|
00
|
|
|
#6 | |||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 7 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#7 | |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
Citation:
Imagine que dans le champ img_id quelqu'un injecte la valeur "5';". Si tu ne sécurises pas ça, ta requête ne tient plus compte du filtre sur l'IP..... C'est donc très important de toujours : - vérifier le format de la variable si possible via expression rationnelle - utiliser mysql_real_escape_string pour chacune des variables que tu insères dans une requête SQL
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
|
00
|
|
|
#8 | ||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 7 ![]() |
Citation:
Vérifier img_id pour être sur d'éviter une injection SQL... Je le fais comme ceci, c'est OK ? Code :
Citation:
Au deuxième essai, il sera bloqué puisque son IP aura été enregistré pour l'image 5.. Ton exemple lui permettrait juste de voter une fois pour une autre image...Non ? Déjà merci pour tes explications ! |
||||
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() Ingénieur développement logiciels Inscription : février 2008 Messages : 430 ![]() |
La validation du format de l'id image semble correct.
Sur mon exemple, note le ";" qui si non échappé (via la fonction mysql_real_escape_string) indique la fin de la requête sql avant le AND et le filtre sur l'IP. Du coup ta requête ne filtre plus sur le couple Image-IP mais juste sur l'image...... Je viens de me rendre compte que mon exemple est pourri car encore plus limitant que l’existant. Mais le principe est là.
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre. Linus Torvalds |
|
|
00
|
|
|
#10 | |
|
Membre confirmé
![]() Dominique Première S Inscription : juillet 2010 Messages : 252 ![]() |
Citation:
effectivement, les injections SQL existes, c'est pourquoi j'utilise toujours des requêtes préparées .. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com