Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.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 - Fatal编程技术网

php安全问题-文件上载

php安全问题-文件上载,php,security,Php,Security,一天,我的客户找我检查并修复被黑客攻击的网站。该网站是由另一个开发人员开发的,非常缺乏经验的开发人员甚至连基本的安全都没有考虑 问题是PHP文件被写入了images文件夹。黑客还编写了一个index.html,显示网站被黑客入侵。当我检查图像文件夹时,它有777权限。所以我得出了一个粗略的结论,这是因为文件夹权限。Hosting support guy说,一些PHP文件的脚本编写得很糟糕,允许任何扩展文件上传到服务器,然后黑客执行文件以获得访问权限或做任何他们想做的事情 我有几个问题: 是否只

一天,我的客户找我检查并修复被黑客攻击的网站。该网站是由另一个开发人员开发的,非常缺乏经验的开发人员甚至连基本的安全都没有考虑

问题是PHP文件被写入了images文件夹。黑客还编写了一个index.html,显示网站被黑客入侵。当我检查图像文件夹时,它有777权限。所以我得出了一个粗略的结论,这是因为文件夹权限。Hosting support guy说,一些PHP文件的脚本编写得很糟糕,允许任何扩展文件上传到服务器,然后黑客执行文件以获得访问权限或做任何他们想做的事情

我有几个问题:

  • 是否只有通过上传功能才能上传其他PHP文件? 由于文件夹权限为777,是否可以通过其他方式从远程写入文件
  • Sit有一些fckeditors编辑器和一些上传功能。我检查了它们,有足够的验证,所以当尝试上传图像或PDF以外的扩展时,它们只返回false
  • 未将文件夹权限设置为较低级别是否解决了此问题
我要求支持人员更改文件夹权限,这样可以解决问题,但他说有一些PHP文件是通过这些文件编写的,他希望这些文件得到修复,否则网站无法上线。他说,即使文件夹权限被更改,黑客也可以再次将其更改为777,并执行他想要的任何操作,因为该PHP文件编写得很糟糕


我应该如何找到这样的PHP文件?任何帮助或提示都将不胜感激。

除非您使用CGI,否则更改文件夹权限将无法解决问题,因为PHP可能需要能够写入上载文件夹,而您的web服务器可能需要能够从中读取。检查所有上传文件的扩展名

(因此,不,0777权限并不意味着任何人都可以上传任何内容。)

777意味着系统上的任何用户(对所有父目录都具有执行权限)都可以向该目录添加任何内容。不过,Web用户不是系统用户,而且大多数Web服务器(包括Apache)都不允许随机客户端直接在那里编写文件。你必须明确地告诉服务器允许这样做,我很确定事情并不是这样的

但是,如果您允许任何文件上载,则上载文件夹至少需要可由web服务器的用户写入(如果您使用的是SUPPP之类的工具,则需要由网站的用户写入)。如果web服务器可以写入该目录,那么任何PHP代码都可以写入该目录。您不能将权限设置得足够高,以允许上传,而将权限设置得足够低,以防止PHP代码运行,除非使目录只写(这对于fckeditor之类的工具来说非常无用)

几乎可以肯定的是,由于网站本身存在漏洞,所以发生了这种妥协。很有可能,要么是一个文件上传脚本没有正确地检查它的写入位置,要么是一个脚本盲目地接受要包含的内容的名称。由于PHP代码通常作为web服务器的用户运行,因此它对web服务器具有写访问权限的所有内容都具有写访问权限。(也有可能是有人通过FTP进入,在这种情况下,你最好更改密码。但web服务器出现故障的可能性充其量也很小。)

至于此时要做什么,最好的选择是擦除站点并从备份中恢复--正如前面几次提到的那样,一旦攻击者在您的服务器上运行了任意代码,您就再也无法信任它了。如果你不能做到这一点,至少要找到最近修改过的文件并删除它们。(利用漏洞几乎从未经历过如此多的麻烦来掩盖他们的行踪。)

无论哪种方式,然后设置任何非上传、非临时、非会话目录的权限——以及所有现有脚本——以禁止写入,尤其是web服务器。如果站点的代码以拥有文件的同一用户的身份运行,您将希望使用555作为目录,444作为文件;否则,您可能只能使用755/644。(网络服务器只有在严重错误配置的情况下才能编写这些内容,而一家不称职的托管公司很快就会倒闭。)

坦白地说,“支持人员”的想法是正确的——我当然不会让一个网站在我的服务器上运行,因为它会执行陌生人的任意代码。(即使它不能向本地文件系统写入任何内容,它仍然可以用来对其他服务器发起攻击。)目前最好的选择是暂时取消所有上传文件的功能。很明显,有人不知道如何安全地处理文件上传,现在有人知道你很容易受到攻击,你很可能会一直被黑客攻击,直到你找到漏洞并将其堵住


至于要寻找什么……不幸的是,它是半模糊的,因为我们讨论的是单语句级别以上的概念。查找
包含
要求
、或写入以任何方式从$\u GET、$\u POST或$\u COOKIE派生的文件名的任何PHP脚本。

正如神秘提到的,一旦黑客可以在您的服务器上运行代码,您就必须假设所有文件都有潜在危险。您不应该尝试自己修复此问题-从备份(从客户端或原始开发人员)恢复是唯一安全的解决方法


备份文件准备好后,删除网站上的所有内容并上传备份-如果是共享主机,您也应该与他们联系,以防其他文件受损[但这种情况很少发生].

您已经确定了两个问题:权限和缺少扩展检查。但是,您是否有证据表明这些是系统被破坏的手段?你没有提供任何支持t