fonction eval
La fonction eval () peut exécuter les valeurs des variables dans les paramètres. Elle est généralement utilisée pour traiter des modèles et charger dynamiquement du code PHP, mais elle est également souvent utilisée par des attaquants, comme un programme de porte dérobée:
<?php eval($_GET[cmd])?>
fonction assert ()
La fonction assert () est utilisée en PHP pour déterminer si une expression est vraie et renvoie vrai ou faux. Si le code PHP est transmis directement, il sera exécuté.
<?php assert($_GET["cmd"]);?>
Fonction preg_replace ()
Dans la fonction preg_replace (), lorsque l'expression régulière du premier paramètre a un modificateur e, la chaîne du deuxième paramètre est exécutée en tant que code PHP.
<?php
preg_replace("/pregStr/e",$_GET['cmd'],"cmd_pregStr");
?>
Fonction create_function ()
La fonction de la fonction create_function () est de créer une fonction anonyme à partir des paramètres passés et de renvoyer un nom unique. Lorsque PHP filtre incorrectement l'entrée passée à create_function (), un attaquant distant peut utiliser la vulnérabilité et les autorisations d'application privilégiées pour exécuter du code arbitraire.
<?php
$newfunc = create_function('$a,$b',$_GET['cmd']);
?>
Demande
? cmd =;} phpinfo (); / * phpinfo sera exécuté sans appeler la fonction
Autres fonctions qui conduisent facilement à des problèmes de sécurité
assert() pcntl_exex()
array_filter() preg_replace()
array_map() require()
array_reduce() require_once()
array_diff_uassoc() register_shutdown_function()
array_diff_ukey() register_tick_function()
array_udiff() set_error_handler()
array_udiff_assoc() shell_exec()
array_udiff_uassoc() stream_filter_register()
array_intersect_assoc() system()
array_intersect_uassoc() usort()
array_uintersect() uasort()
array_uintersect_assoc() uksort()
array_uintersect_uassoc() xml_set_character_data_handler()
array_walk() xml_set_default_handler()
array_walk_recursive() xml_set_element_handler()
create_function() xml_set_external_entity_ref_handler()
escapeshellcmd() xml_set_notation_decl_handler()
exec() xml_set_processing_instruction_handler()
include xml_set_start_namespace_decl_handler()
include_once() xml_set_unparsed_entity_decl_handler()
ob_start()
passthru()
Défense de l'exécution du code
Les fonctions escapeshell () et escapeshellcmd () sont utilisées pour garantir que les paramètres de la fonction d'exécution de commande entrante sont bien sous la forme de paramètres de chaîne et ne peuvent pas être injectés
<?php
system('ls ' . escapeshellarg($dir));
?>
escapeshellarg () ajoutera un guillemet simple à la chaîne, et peut citer ou transcoder tout guillemet simple existant pour garantir qu'une chaîne peut être directement passée dans la fonction shell et est sûre.
escapeshellcmd () échappe les caractères de la chaîne qui peuvent tromper la commande shell pour exécuter des commandes arbitraires. Cette fonction garantit que les données saisies par l'utilisateur sont échappées avant d'être transférées vers la fonction exec () ou la fonction système () ou l'opérateur d'exécution.
<?php
//故意允许任意数量的参数
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
La fonction escapeshellcmd () doit être utilisée sur la chaîne de commande complète. Même ainsi, un attaquant peut toujours transmettre n'importe quel nombre de paramètres. La fonction escapeshellarg () doit être utilisée pour échapper à un seul paramètre