2009-12-25 3 views
3

quand j'utilise Acunetix sur ma page je reçois une: injection SQL aveugle/XPathaveugle SQL Injection

tête: GET /file.php?id=2'+and+31337-31337=0+-- + & page = 2

réponse:

aucun résultat

(parfois montre des résultats)

ici est mon code php:

$id = (int) htmlentities($_GET['id']); 
$fileid = mysql_real_escape_string($id); 

la requête:

SELECT * FROM `files` WHERE `id` = '".$fileid."' 

ce que je fais mal? quelqu'un peut-il effacer ma base de données juste avec cela? je reçois également le même message à quelques requêtes presque égales à celle-là mais qui ont aussi la limite 0,1

J'utilise paginator (j'ai fixé quelques injections qui dans ce script) mais l'exemple que j'ai donné son pas l'utiliser

Répondre

2

Lancer l'ID sur int devrait déjà empêcher toute attaque par injection SQL (pour autant que je sache).

$id = (int) $_GET["id"]; 
$Query = "SELECT * FROM files WHERE id = $id;"; 

file.php serait? Id = abcabc résultat en $ id = 0, donc dans le pire des cas, vous ne trouverez aucun enregistrement correspondant cet identifiant, mais $ id ne jamais contenir une chaîne (surtout pas SQL) à cause de cette distribution entière.

J'espère que c'est ce que vous vouliez savoir.

+0

Il utilise déjà 'mysql_real_escape_string()', cela n'est pas nécessaire. –

+0

mais pour les cas où je ne lance rien et n'utilise que l'échappement réel + htmlentities, puis-je être vulnérable à ces attaques? Je ne peux reproduire aucune des injections que me donne acunetix. Même quand je mets un 'je n'obtiens pas d'erreur juste un ID invalide –

+0

Ce que je veux dire, c'est que vous n'avez pas besoin de htmlentities et mysql_real_escape_string si vous le lancez simplement sur int, mais dans le code exemple, il les utilise tous les trois temps. Bien sûr, si id peut être une chaîne alors mysql_real_escape_string est le bon choix, sinon, (int) peut aussi résoudre ce problème. – Akinzekeel

2

Je crois que Acunetix est vraiment bogué, il ne semble pas exister de vulnérabilité d'injection SQL du tout.

+0

hm j'ai corrigé quelques attaques xss qu'il m'a montré mais je reçois plusieurs messages de sql aveugle et je suis vraiment inquiet –

+0

@PO: ** Pour éviter les injections SQL **, vous n'avez pas besoin de ** lancer des variables ** beaucoup moins utilisez ** 'htmlentities()' ou 'htmlspecialchars()' **, aussi longtemps que vous ** utilisez 'mysql_real_escape_string()' ** vous êtes en sécurité. Pour ** éviter les attaques XSS ** en utilisant ** 'htmlspecialchars()' ** est suffisant. –