Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php copy命令上载文件_Php_Copy - Fatal编程技术网

使用php copy命令上载文件

使用php copy命令上载文件,php,copy,Php,Copy,我有一个公共网站,用户可以选择上传pdf文件,并在需要时阅读该pdf文件 我使用php命令 $error = copy($tmp_name, $fpath); 要将文件保存到服务器 我面临的问题是 任何人都可以上传任何类型的(.exe,bat)文件,但我只需要pdf 当尝试浏览pdf文件时,若有人将其(.exe、.bat)文件扩展名更改为.pdf,如何降低该脚本在服务器上执行的风险 过去几天我一直在努力解决这个问题,但没有成功 谢谢使用来获取mimetype(+您需要的任何其他内容)以检查它是

我有一个公共网站,用户可以选择上传pdf文件,并在需要时阅读该pdf文件

我使用php命令

$error = copy($tmp_name, $fpath);
要将文件保存到服务器

我面临的问题是

  • 任何人都可以上传任何类型的(.exe,bat)文件,但我只需要pdf

  • 当尝试浏览pdf文件时,若有人将其(.exe、.bat)文件扩展名更改为.pdf,如何降低该脚本在服务器上执行的风险

  • 过去几天我一直在努力解决这个问题,但没有成功

    谢谢

    使用来获取mimetype(+您需要的任何其他内容)以检查它是否是pdf

    编辑:一个更简单的替代方法是使用,但自从php5以来,这种方法已被弃用

    PS:pdf mimetype应该是
    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文件上读到这个扩展名默认情况下是可用的,如果不是从哪里下载的话。。。