logo Homepage
+  NewbieContest
|-+  Divers» Hacking» Fonction Post (php) securisée ?
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Fonction Post (php) securisée ?  (Lu 36213 fois)
sabaknogaara

Profil challenge

Classement : 2198/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 15


Voir le profil
« 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 ?? 

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 ! 
Journalisée

Il me semble parfois que mon sang coule à flots,
Ainsi qu'une fontaine aux rythmiques sanglots.
Je l'entends bien qui coule avec un long murmure,
Mais je me tâte en vain pour trouver la blessure.
Iansus

Profil challenge

Classement : 50/54283

Membre Senior
****
Hors ligne Hors ligne
Messages: 262


Voir le profil WWW
« #1 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.
Journalisée
sabaknogaara

Profil challenge

Classement : 2198/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 15


Voir le profil
« #2 le: 11 Mai 2011 à 20:57:53 »

Merci pour ta réponse, donc ça veut dire que ma fonction actuelle a une faille ?
Journalisée

Il me semble parfois que mon sang coule à flots,
Ainsi qu'une fontaine aux rythmiques sanglots.
Je l'entends bien qui coule avec un long murmure,
Mais je me tâte en vain pour trouver la blessure.
_o_
Relecteur

Profil challenge

Classement : 42/54283

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #3 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.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
Spaulding

Profil challenge

Classement : 8/54283

Membre Complet
***
Hors ligne Hors ligne
Messages: 190


Voir le profil WWW
« #4 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 ^^
Journalisée

---------------
sabaknogaara

Profil challenge

Classement : 2198/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 15


Voir le profil
« #5 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 !! 
(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à...
« Dernière édition: 21 Mai 2011 à 12:29:12 par sabaknogaara » Journalisée

Il me semble parfois que mon sang coule à flots,
Ainsi qu'une fontaine aux rythmiques sanglots.
Je l'entends bien qui coule avec un long murmure,
Mais je me tâte en vain pour trouver la blessure.
Pages: [1]
  Imprimer  
 
Aller à: