使用php copy命令上载文件
我有一个公共网站,用户可以选择上传pdf文件,并在需要时阅读该pdf文件 我使用php命令使用php copy命令上载文件,php,copy,Php,Copy,我有一个公共网站,用户可以选择上传pdf文件,并在需要时阅读该pdf文件 我使用php命令 $error = copy($tmp_name, $fpath); 要将文件保存到服务器 我面临的问题是 任何人都可以上传任何类型的(.exe,bat)文件,但我只需要pdf 当尝试浏览pdf文件时,若有人将其(.exe、.bat)文件扩展名更改为.pdf,如何降低该脚本在服务器上执行的风险 过去几天我一直在努力解决这个问题,但没有成功 谢谢使用来获取mimetype(+您需要的任何其他内容)以检查它是
$error = copy($tmp_name, $fpath);
要将文件保存到服务器
我面临的问题是
application/pdf
1)要解决这个问题,您需要逻辑来检查文件,例如使用模块来计算文件的MIME类型。另外,请确保始终以.pdf文件扩展名保存文件,并阻止所有扩展名错误的文件(以防止用户下载任何可执行文件)。但这并不是100%安全的。如果你想完全保护自己免受病毒侵害,你需要在服务器上安装一个防病毒程序,并检查所有上传的文件
2) 这比较容易。只需在web服务器配置中禁用上载文件夹的所有脚本执行。这将因web服务器而异
哦,如果您的web服务器允许在目录中使用配置文件,如Apache的.htaccess,请确保文件名不是
.htaccess
或任何其他神奇的文件名。不要使用copy()
,请使用获取上传的文件。使用copy()
如何降低在服务器上执行该脚本的风险
这很简单:只是不要把它放在任何可以执行的地方:)说真的,你可以在你的服务器上存储最邪恶的病毒——只要它们在一个无法运行的目录中,你就没有问题
真正的问题是人们下载文件时会发生什么。您可以使用其他答案中概述的fileinfo
来确定它是否为PDF。除此之外,还需要安装服务器端病毒扫描器,例如检查PDF文件中是否存在恶意黑客攻击(其中有一些)
除此之外,运行病毒扫描程序是用户的责任。这里没有100%的安全措施。使用本机PDF库打开和重新保存每个PDF文档可能会带来总体安全性,但我不知道是否有PHP库可以做到这一点。您可以使用类似的工具验证PDF,但使用许多不同版本的PDF,您会面临误报的风险,尤其是对于较新的软件包。关于bobince在。他的回答带来了一些我以前从未想过的问题。这确实值得一读
正如Pekka已经说过的,不要只使用copy()
,使用move\u uploaded\u file()
函数,该函数用于从tmp目录中移动上传的文件。我有PHP版本5.3.2,但是当我使用这个命令$finfo=finfo\u open(FILEINFO\u MIME\u TYPE)。。。我得到错误未定义的函数。。。我在php文件上读到这个扩展名默认情况下是可用的,如果不是从哪里下载的话。。。