par
Idaho » 08 juin 2007, 01:17
Il pourrait essayer mais ça ne marcherai pas :p
Les fonctions peuvent etre toutes vérifiées, leur nom figure dans T_STRING, il suffit de le comparer à une liste de fonctions autorisées. Par contre il faut effectivement penser à interdire aussi create_function (et juste garder le mot function), je n'y avai pas pensé. Enfin cela rend ces trois là inutilisables :
call_user_func(create_function('', 'eval(\'exec("rm -rf /tout/ton/disque")\')'));
ob_start('eval');echo "exec('rm -rf /oh/no');";
Au passage je n'ai pas bien compris celui-ci, à aucun moment il n'est executé.. :
preg_replace('#.*#e', "eval('\\1');", "exec('rm -rf /oh/no');");
Par contre pour le dernier je m'avoue vaincu pour le moment :
$x = 'eval';
$x($code_malveillant);
Je devrait peut être faire l'inverse, et vérifier que les lignes correspondent à des masques, en imposant une action par ligne... mais c'est moins drôle.