NewbieContest

Divers => Hacking => Discussion démarrée par: sabaknogaara le 11 Mai 2011 à 19:25:04



Titre: Fonction Post (php) securisée ?
Posté par: sabaknogaara le 11 Mai 2011 à 19:25:04
Bonjour à tous!

Mon superbe site que je pensais sécurisé s'est fait hacker hier !

Du coup je remet toute ma pratique actuelle en doute pour savoir d'où ça vient ??  :O

Je reprends depuis la base; ma question est très simple, est-ce que cette fonction est sécurisée ?

Code:
<?php
function POST($post)
{
if(!empty($_POST[$post]))
{
$post htmlentities($_POST[$post], ENT_QUOTES);
if (get_magic_quotes_gpc())
$post stripslashes($post); }
return $post;
}
}
?>

Si ce n'est pas le cas, est-ce que vous pourriez m'expliquer pourquoi et surtout qu'est-ce qui serait mieux ?

Merci beaucoup !  ;)


Titre: Re : Fonction Post (php) securisée ?
Posté par: Iansus le 11 Mai 2011 à 19:33:28
Essaye juste de mettre un http://php.net/manual/fr/function.mysql-real-escape-string.php , parce qu'en général, on ne fout le htmlentities qu'à l'affichage.

En revanche, je pense qu'elle nécessite une connexion SQL active pour fonctionner.


Titre: Re : Fonction Post (php) securisée ?
Posté par: sabaknogaara le 11 Mai 2011 à 20:57:53
Merci pour ta réponse, donc ça veut dire que ma fonction actuelle a une faille ?


Titre: Re : Re : Fonction Post (php) securisée ?
Posté par: _o_ le 11 Mai 2011 à 21:26:31
ça veut dire que ma fonction actuelle a une faille ?

Ça n'a pas de sens de demander si cette fonction a une faille si tu ne précises pas à quoi elle sert, et surtout en l'occurrence, ce que tu fais du résultat. Si c'est pour mettre en base de données, il faut my_real_escape_string. Sinon, pour les xss, c'est effectivement htmlentities et/ou htmlspecialchars (je laisse les spécialistes du php débattre du meilleur), mais il manque au moins le charset pour que ce soit efficace.

Et même comme ça, rien ne garantis que la faille (si faille réelle il y a) utilisée pour ton deface n'est pas n'importe où ailleurs que dans cette fonction particulière.


Titre: Re : Fonction Post (php) securisée ?
Posté par: Spaulding le 13 Mai 2011 à 14:08:40
A vue de nez, il me semble que la fonction POST() définie est au moins aussi efficace qu'un mysql_real_escape_string() pour des accès à une base de données. Avec les même limites aussi !
Entre autre, rien ne te protège des blind sql injections si la valeur postée est un int non protégé par des quotes dans la requête SQL :
$id=POST($_POST['$id']);
suivi de :
$result=mysql_query('SELECT * FROM xxx WHERE id='.$id);

si un utilisateur poste un truc comme id=123 AND ord(very_sensitive_field)=65
bah dans un cas comme dans l'autre, rien ne l'empêchera d'avoir des infos sur le contenu d'un champs. Pour éviter ça, il faudrait que les htmlentities ou les mysql_real_escape_string échappent aussi les parenthèses (ce qui n'est évidemment pas le cas, il faut donc trouver autre choses).

Cela dit je ne suis qu'un pratiquant de NC, je n'ai aucune compétence personnelle en développement php/sql, web ou autres, je parle donc sous le contrôle de ceux qui connaissent ^^


Titre: Re : Re : Fonction Post (php) securisée ?
Posté par: sabaknogaara le 17 Mai 2011 à 13:59:27
$id=POST($_POST['$id']);
suivi de :
$result=mysql_query('SELECT * FROM xxx WHERE id='.$id);

O_O

C'est exactement ce que je fais !!!!

Merci de m'avoir indiqué où était la faille !!  :D
(ou au moins une d'entre elles)

Edit: en fait non meme pas parce-que je vérifie toujours que c'est bien numérique ou alors je fais $id =  (int) POST('id');

Donc la faille n'était pas là... :(