<?php
require __DIR__.'/c.php';
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Salut !'; }))
throw new Exception('Error');
$c();[PasteBin]Bon c'est du PHP5.3, mais OMG ! Mais ça fait quoi ?
Détaillons ce script:
require __DIR__.'/c.php';- D'abord un "require" qui simplement importe le fichier demandé, en l'occurrence le fichier "c.php" qui se trouve dans le même répertoire. à noter la présence de "__DIR__" qui et une nouveauté qui, comme on peut s'en douter, est une constante renvoyant le répertoire d'exécution du script.
if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Salut !'; }))- En meta code compréhensible: si la variable $_GET['c'] n'est pas une fonction appelable, on continue, sinon on affiche "Salut !" grâce à la fonction anonyme (nouveauté aussi, existait en Java).
throw new Exception('Error');- Si on a continué, c'est à dire que $_GET['c'] n'est pas une fonction, on renvoi une erreur "Error".
$c();- Si on est là c'est que nous n'avons pas envoyé d'erreur, donc on execute la fonction qui se nomme du contenu de $_GET['c']
C'est juste un "proof of concept" en bonne et due forme.
Perso j'aurai écris:
<?php
require 'c.php';
$a = $_GET['a'];
ob_start();
if(!is_callable($a))
header('Location:404.html');
@$a();
ob_end_flush();[PasteBin]Ça fait 16 caractères de moins et ça marche sous php 5+.
Et vous, vous avez des p'tit morceaux de code tout mimi comme ça ?

0 commentaires:
Enregistrer un commentaire