导读:PHP大量的文件系统函数,与shell命令只有少量区别。
详细:
1 文件系统跨越
如下面的代码:
$handle = fopen("/path/to/{$_GET['filename']}.txt", 'r');
一个方面:使用../../进行文件目录读取;
另一方面,使用NULL——在URL中表示为%00来使字符串终止,而去执行任何扩展名的文件。
2 远程文件风险
使用file_get_contents读取远程文件时候,坚持过滤输入。
3 命令注入
一般不建议使用exec。如果真心要用,需要使用escapeshellcmd 和 escapeshellarg 进行过滤。如下:
<?php $clean = array(); $shell = array(); $shell['cmd'] = escapeshellcmd($clean['cmd']); $shell['arg'] = escapeshellarg($clean['arg']); exec("{$shell['cmd'] $shell['arg']}", $output, $return);