Accueil > Forum > > > > Encore des questions sur la sécurité en PHP ...
Encore des questions sur la sécurité en PHP ...
lundi 21 juillet 2008 à 18:25:28 |
Encore des questions sur la sécurité en PHP ...

shinnokamui
|
Bonjour, J'ai encore quelques question sur la sécurité en PHP. Jusqu'à présent, j'utilisais des variable sensibles (GET/POST/...) de type numériques, donc un simple "intval" suffisais à les protéger... J'ai maintenant besoin de l'utilisation de variables type chaine de caractères. On m'a proposer sur ce forum d'utiliser des str_replace, avec tous les caractères malicieux remplacé par le vide. Le problème c'est qu'il est difficile de connaître tous ces caractères (avec en plus unicode etc.). J'ai donc pensé a faire l'inverse : copier uniquement les caractères valides avec une regex : $test2 = preg_replace('#[^0-9a-zA-Z]#u', ' ', $test); Cette fonction va créer une chaine de caractères qui contient uniquement des chiffres et des lettres (min et maj). Je voulais avoir votre avis sur cette fonction ; si je l'utilise je serais tranquille en ce qui conserne les problèmes d'injection ? SQL, et autre ? Une dernière question ; j'ai un switch de ce type : switch($_GET['p']) { case 'nouvelles': include('/nouvelles.php'); break; ... } en gros il permet, en récupérant la variable GET 'p' (donc modifiable par l'user), et de charger la page correspondante avec un include. est ce qu'il est necessaire de protéger la variable GET['p'] ? ou je peut directement l'utiliser dans le switch comme ça sans problème ? Merci :)
|
|
mardi 22 juillet 2008 à 09:34:17 |
Re : Encore des questions sur la sécurité en PHP ...

pysco68
|
bonjour, de cette façon ton switch est relativement sur (enfin moi tout de suite je ne vois pas vraiment de façon d'exploiter ça (bon signe?  )... les injections SQL ne peuvent qu'êtres exploitées si une variable récupèrée va directemenet sans vérification dans une requête, ce qui ne semble pas être le cas ici (enfin sauf si je me trompe, la requête dans les différentes pages (du moins dans nouvelles.php) est invariante (??) Donc de mon point de vue rien de critique  Bonne journée!
|
|
mardi 22 juillet 2008 à 10:14:45 |
Re : Encore des questions sur la sécurité en PHP ...

JoJo738
|
Salut ^^ Je vais commencer par le SwitchLe switch, étant une sorte de " if/else" vérifie les valeurs avec celle passé en paramètre ... donc, si ta variable n'est pas protégé, rien de grave ! Puisque si c'est une variable hacker, elle ne sera pas demandée dans le Switch, et donc ira dans default:Toutefois, vérifie quand même l'existance de ta variable, c'est le minimum requis ;) Dans ce cas là, je ferais ça : $get_switch = isset($_GET['p']) ? urldecode($_GET['p']) : null; // On décode quand même les caratères spéciaux ;) switch(strtolower($get_switch)) { case '': break; default : echo 'Vilain méchant !'; break; }
Après, pour protéger ton code, il existe différentes manières : - preg_replace('`[^a-zA-Z0-9]`', ' ', $var);
Quand tu as besoin d'une variable qui ne contient que des lettres et chifres, avec leur case (min/maj). Ca limite beaucoup ! Au pire, on peut rajouter certains caractères comme [^0-9A-Za-z_\+-] - htmlentities()et htmlspecialchars()
Vont convertir (selon la focntion) certains ou tous les caractères spéciaux en leur équivalent Html. Permet de protèger efficassement. - addslashes()
La protection minimum qu'il existe ... Permet d'ajouter des slashes pour éviter par exemple des Injections SQL ... - mysql_real_escape_string()
The protection ! Permet d'éviter toute injecion SQL en convertissants les caractères qui doivent être encodés.
' SELECT bla, bla, bla FROM table WHERE bla = "' . mysql_real_escape_string($_GET['p']) . '" '; // if isset($_GET['p'])
Si ma reponse te convient, merci de l'accepter ! 
|
|
mardi 22 juillet 2008 à 12:36:59 |
Re : Encore des questions sur la sécurité en PHP ...

shinnokamui
|
Bonjour, et merci pour vos réponses :)
Donc pour le switch c'est bon, j'ai juste oublié de verifier si la variable existe :p Maintenant pour la fonction Regex :
En fait, j'utilisais déjà jusqu'à présent htmlspecialchars() et mysql_real_escape_string(), mais j'ai rencontré un problème : magic_code_gpc, qui ajoute automatiquement des "\" si ON, ou pas si OFF. Le problème est qu'il faut vérifier ça sur chaque serveur, ce qui complique les choses.
Et je pari qu'il ne s'ajit pas du seul cas à connaitre, personnelement je suis débutant en PHP, et je pense qu'il y aura toujours des choses à savoir ; des évolutions avec les version à venir de PHP etc.
Donc j'ai pensé à faire une fonction ...
$test2 = preg_replace('#[^0-9a-zA-Z]#u', ' ', $test);
... qui marche à tous les coups, quel que soit les évolution a venir des fontions PHP, ou les connaissances techniques qui me manque. C'est sur que faire une Regex juste pour ça, ça doit ralentir la génération de la page, mais au moins avec cette fonction je suis tranquille, du moins je l'espère :p donc je voulais juste savoir si c'est vraiment sure dans 100% des cas (SQL, echo, etc.)
Merci :)
|
|
mardi 22 juillet 2008 à 12:41:49 |
Re : Encore des questions sur la sécurité en PHP ...

banbanfr
|
Bonjour, regarde peut etre ce genre de fonction : [ Lien ]Sinon tu peux aussi passer tes variables via $_SESSION plus dur a modifier si on ne s'y connait pas malgrès ce que l'on peut penser $_SESSION contient des failles de sécurité. Pour ton switch je peux te proposer une autre solution : if(isset($_GET['p'])) { $chemin = './tondossier/'.$_GET['p'].'.fichier.php'; if(file_exists($chemin)) require_once $chemin; else require_once 'chemin par defaut'; } else require_once 'chemin par defaut'; Cordialement Banban --------------------------------------------------------------------------> Developpement sous MAC Firefox - Safarie - Internet Explorer - Opéra Mon site pro : www.wubart.net Mon site perso : www.mafiacity.fr
|
|
mardi 22 juillet 2008 à 18:19:07 |
Re : Encore des questions sur la sécurité en PHP ...

JoJo738
|
Hello ^^ Petite alternative à ton code, beaucoup plus sur ;) (mais le './tondossier/' permet une protection optimale ;) Note : Quand tu fais une include, vérifie toujours que le fichier existe sur le serveur, c'st à dire avoir au moins un './' . $url_fichier (quand c'est dynamique  ) ex : file_exists('./' . $url_fichier)
Ah concernant les foncitons html*() : http://fr.php.net/htmlentities (par exemple), tu peux spécifier le Quote_style
Constantes disponibles pour quote_style| Constante | Description |
|---|
| ENT_COMPAT | Convertit les guillemets doubles, et ignore les guillemets simples. | | ENT_QUOTES | Convertit les guillemets doubles et les guillemets simples. | | ENT_NOQUOTES | Ignore les guillemets doubles et les guillemets simples. |
Le code : if( isset($_GET['p']) ) { $path = realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR; $uri_file = $path . urldecode($_GET['p']); // . '.php' / . '/fichier.php'; / ... if( file_exists($uri_file) ) { include $uri_file; } else { include 'fichier_defauf.php'; } }
Et en version rapide : if( isset($_GET['p']) AND file_exists($path = realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . urldecode($_GET['p']) .'.php') ) { include $path; } else { include 'fichier_defauf.php'; }
Si ma reponse te convient, merci de l'accepter ! 
|
|
mardi 22 juillet 2008 à 18:22:12 |
Re : Encore des questions sur la sécurité en PHP ...

banbanfr
|
include_once plutot mais sinon ton code est mieux :)
Cordialement Banban --------------------------------------------------------------------------> Developpement sous MAC Firefox - Safarie - Internet Explorer - Opéra Mon site pro : www.wubart.net Mon site perso : www.mafiacity.fr
|
|
mardi 22 juillet 2008 à 19:03:01 |
Re : Encore des questions sur la sécurité en PHP ...

JoJo738
|
Mouef, include_once n'est pas vraiment approprié pour ce genre d'include ... Là on inclu un fichier dynamiquement, donc, logiquement on l'inclu à un endroit bien précis et une seule fois. Biensur, à l'intérieur de celui ci, et si jamais on inclus des fichiers annexes (class, fonctions, ...), là, on utilisera les (include|require)_once() ^__^ Si ma reponse te convient, merci de l'accepter ! 
|
|
Cette discussion est classée dans : variable, php, sécurité, get, caractères
Répondre à ce message
Sujets en rapport avec ce message
Questions de sécurité... [ par shinnokamui ]
Bonjour,J'utilise une variabe dans l'addresse d'une page PHP (type : fichier.php?page=1), j'ai put voir sur le net qu'il était necessaire de proteger
PHP & JAVASCRIPT [ par nassayagh ]
BonjourJ'ai un probléme au niveau de la création de mon site.J'ai une liste avec un montant.Je veux tout simplement, lorsque je modifie ma listele con
variable en php [ par theboubourse ]
bonjour voila j'ai un petit problème je voudrais savoir pourquoi easyPhp m'indique une erreur de varible non défini ? normalement les variable ne doiv
Rajouter qqch dans une chaine de caractères? [ par zut69 ]
Bonjour,J'ai un pti prob sur un traitement de chaine de caractères.En fait, j'ai un chemin dans une variable, de la forme: dossier/dossier2/dossier_n/
php variables avec un '->' [ par SuperChouquette ]
Bonjour, je débute en php et dans beaucoup de script je rencontre des variable de cette forme :$result->type = 'test';$result->add('xxx');J'ai compris
passage de variable html vers php [ par chartoire ]
bonjour voila ce que j'essaie de faire ! J'ai un fichier html dans lequel je voudrais appeler un fichier php je dois passer une variable au fichie
Mod rewrite, regex et autres joyeuseries [ par zmc ]
Bonsoir,J'utilise actuellement de la redirection d'URL via .htaccess, aucun problemes jusqu'ici, par exemple "site.com/avis=xxxx" est redirigé vers "s
Regex PHP [ par Yann2704 ]
Bonjours, Tous d'abord desoler si j'ai poster au mauvaise endroit, je savais pas ou poster alors j'ai mis dans divers... $OSuppr = fopen("Admin/DB/For
Mettre résolution d'écran en variable php [ par babatt92 ]
Bonjour,J'ai mis la résolution d'écran en variable php.Le problème est vraiment étrange (mon code est ci-dessous). Sur une résolution par exemple 1600
Récupérer une variable d'une méthode envoyer par un formulaire [ par Noizet ]
Hello,J'ai une fonction en javaScript qui me retourne un tableau et j'aimerai la récupèrer une fois que j'ai cliquer sur mon bouton et qu'il m'a amene
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|