我无法想象我为什么要使用这个功能,而不是一个简单的重命名的。
该手册写道:
move_uploaded_file
此功能检查,以确保由filename指定的文件是一个有效的上传文件(即它是通过PHP的HTTP POST上传机制上传)。 如果该文件是有效的,它会被移动到目的地给出的文件名。
如果有任何机会,任何与上传的文件做可以揭示它们的内容给用户,甚至在同一个系统上的其他用户这种检查显得尤为重要。
能否请你写一个例子,为什么如此重要?
我无法想象我为什么要使用这个功能,而不是一个简单的重命名的。
该手册写道:
move_uploaded_file
此功能检查,以确保由filename指定的文件是一个有效的上传文件(即它是通过PHP的HTTP POST上传机制上传)。 如果该文件是有效的,它会被移动到目的地给出的文件名。
如果有任何机会,任何与上传的文件做可以揭示它们的内容给用户,甚至在同一个系统上的其他用户这种检查显得尤为重要。
能否请你写一个例子,为什么如此重要?
由于使用常规文件系统函数用于此目的可能会造成安全漏洞。 如果你在程序做到这一点:
rename($source, $destination);
并且攻击者能够控制的价值$source
,他们都获得了重新命名的能力(或移动- rename
也将文件移动跨目录),你的PHP程序可以访问任何文件。
如果他们也能影响$destination
或有被移动后,他们可以利用这个漏洞,至少是能够访问源代码,这通常会揭露身份验证凭据获得访问该文件的内容的一些方法。 而且这不难想象这样的情况:如果您接受用户上传,让他们在这个功能将已内置到应用程序中的URL访问。
在一般情况下,它是你必须考虑一个安全问题; 在_uploaded_file
功能是有帮助你在登陆成功的坑 。
更新 (材料注释拉):
文件上传的现代处理(通过$_FILES
)已经在很大程度上取得move_uploaded_file
技术上不必要的。 但不要忘了:
move_uploaded_files
在一个时间,推出了$_FILES
根本不存在和广泛使用register_globals
是现实的,而不是儿童的恐怖故事。 move_uploaded_file
实际上您的服务器上移动你上传的文件从tmp目录永久位置。 是的,因为你必须将文件到您的服务器移动在您指定的位置正确很重要?
检查代码片断例如move_uploaded_file
这里: http://www.developphp.com/view_lesson.php?v=449
你不应该使用重命名功能重命名功能,使用新名称重命名现有的文件。 而像move_uploaded_file和复制功能实际上被用于从tmp目录下的文件上传到目标目录。
重命名()应使用移动普通文件,而不是通过表单上传的文件。 这样做的原因是因为有一个特殊的功能,称为move_uploaded_file()以,检查以确保该文件确实已经在搬运前上传 - 这将停止人试图破解您的服务器为使私人文件可见。 您可以执行此检查自己,如果你通过调用is_uploaded_file()函数一样。