Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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文件上传/下载安全性_Php_Security_.htaccess_Upload_Download - Fatal编程技术网

PHP文件上传/下载安全性

PHP文件上传/下载安全性,php,security,.htaccess,upload,download,Php,Security,.htaccess,Upload,Download,我只是想确认我所做的事情是安全的 首先,我有一个GoDaddy共享托管帐户,但我有一个专用的IP地址 让我们调用我的服务器路径/path 我的站点的文件位于/path/mysite 当用户上载文件时,我将其移动到/path/uploads/file\u name 某人不可能通过URL访问该文件夹。 要添加,我在/path/uploads中有一个.htaccess文件,其中包含以下内容: order deny,allow deny from all allow from 1.1.1.1 #let'

我只是想确认我所做的事情是安全的

首先,我有一个GoDaddy共享托管帐户,但我有一个专用的IP地址

让我们调用我的服务器路径
/path

我的站点的文件位于
/path/mysite

当用户上载文件时,我将其移动到
/path/uploads/file\u name

某人不可能通过URL访问该文件夹。
要添加,我在
/path/uploads
中有一个.htaccess文件,其中包含以下内容:

order deny,allow
deny from all
allow from 1.1.1.1 #let's say 1.1.1.1 is my server's IP address.
然后,为了真正开始下载该文件,我的用户将通过一个链接访问
mysite.com/file.php?q=[file\u id]

file.php
中,我像这样下载:

$mime = mime_content_type($location);
header('Content-disposition: attachment; filename='.$name);
header('Content-type: '.$mime);
readfile($location);
据我所知,任何人上传的文件都不可能在我的服务器上运行,但我可能错了


我是否需要处理任何安全漏洞?

您可以使用完全禁用该目录的PHP解释器

php_标志引擎关闭

在您的.htaccess中。这将为您提供一个很好的保护,以防止目录中运行的内容

但是,您没有显示上载代码,因此很难判断您在那里做什么:您确实想检查您是否容易受到路径遍历的攻击,因为这将使您的保护完全失效


下载代码也可能有漏洞:如果您实际使用的是发布的代码段,攻击者只需使用“../../whater.php”作为文件名(同样是路径遍历),即可下载应用程序上的任何文件。或者将该脚本用作praxy等,因此您需要确保验证文件名值。

首先,您不需要1.1.1.1中的
允许,因为这将允许您通过Apache服务访问此目录。不,您只能从正在执行的程序/脚本访问此目录

其次,这是一个解决此类问题的标准模板。因此,它非常值得一看,并且被广泛使用的软件包(如MediaWiki)或BB引擎(如phpBB)采用了这种方法,并反映了它们的一些安全检查


我的第三个建议提到了Marc B的观点,您需要考虑您希望允许/支持的文件名和文件类型的限制,以及其他攻击的可能性。一种方法是简单地使用文件名和升序ID存储文件,并将ID/用户文件名作为映射保存在DB表中。您还需要考虑的不仅是对服务器的攻击,还包括恶意用户可能使用此上载工具实施的攻击和其他攻击

如果您的文档根目录为
/path/mysite
,而上载文件夹为
/path/uploads
,则url无法访问该文件夹,php tho始终可以访问文件,因此只需要
拒绝所有文件。还要检查名为
.htaccess
的上载。您还可以向.htaccess添加一些声明,如
选项-ExecCGI
,这些声明可能会有所帮助,具体取决于您希望上载和下载的文件类型。这可能有助于扩展您的问题,并说明您认为用户上传和下载哪种文件是合理的,这样我们就可以更好地了解哪些类型的文件可以轻松防范。此外,同样取决于您正在做什么,调整/path/upload目录上的权限可能是明智的。GoDaddy的托管功能很糟糕,更难找到更好的托管。如果
$location
只是
$\u GET['q']
,那么用户就可以抓取服务器上的任何文件。很抱歉,只有当php在mod\u php下运行时,php\u标志才起作用。Godady共享服务不会。但我同意必须拒绝该目录中的所有文件。最好像我上面建议的那样,在Apache中将几种已知脚本文件类型的mime类型设置为text/plain,这样它只会回显源代码,而不是直接执行源代码。PHP只会执行一组mime类型,我看不出设置text/plain有什么帮助。TerryE你是对的,不知道godaddy不是mod_php(CGI,坏主意)。/\1。我从
中删除了
允许。2.我去看看。3.我想有绝对没有什么可以上传的限制。当我存储文件时,我为它们分配一个ID。我将ID和文件名存储在MySQL数据库中。然后,当有人转到/file/?q=[file_id]时,我查询数据库以查找与文件id匹配的文件名。我真的不知道有人如何进行
XSS
攻击,因为用户除了下载之外无法访问这些文件。