上传的目录不应该有任何"执行"许可

时间:2017-06-29 09:23:48

标签: php security

我是PHP的新手。如果文件是可执行的,我如何在PHP中检查上传文件?我找到了这个函数is_executable但是我不确定这个函数是否只检查文件名...如果我在upload.txt中更改upload.exe的名称怎么办?谢谢!

1 个答案:

答案 0 :(得分:1)

在类Unix系统(macOS,所有Linux版本和其他一些版本)上,如果文件的{execute}位设置为is_executable()TRUE将返回x ls -l }})。当需要确定文件是否可执行时,文件名不会对系统起任何作用。

新上传的文件永远不会设置此位;该文件由PHP解释器生成,没有理由设置它。

在Windows上,is_executable()询问操作系统文件是否可执行。操作系统查看文件头以查看它是否看起来像PE executable format。这包括.exe.dll文件以及其他一些文件类型。通过将实际可执行文件重命名为is_executable(),无法在Windows上欺骗upload.txt

但是,在Windows上,通过在资源管理器中双击它们可以打开的所有文件格式都可以“执行”。 .html个文件,f.e。在默认浏览器中打开。即使is_executable()FALSE返回$data = array(); foreach ($row as $rowk) { $data[] = array( 'message' => $row['traditionalmessage'], 'phone' => $row['telMobile'] ); break; } echo json_encode($data); ,也可以使用任何PHP functions that execute a program“启动”它们。