在wp-config中将FS_METHOD设置为“DIRECT”时,我应该有什么安全顾虑?

时间:2015-05-27 作者:crmpicco

我最近遇到了一个问题,我无法安装WP Smush Pro插件,因为我没有手动安装或一键安装选项。

我偶然发现this post 建议在中调整设置wp-config.php. 我添加了建议的设置,但最重要的是:

define(\'FS_METHOD\', \'direct\');

我想知道的是,我应该对设置有什么真正的担忧FS_METHODdirect? 除了安装插件,还有其他选择吗?

这就是官方文件所说的:

FS\\u方法强制使用文件系统方法。它只能是“direct”、“ssh2”、“ftpext”或“ftpsockets”。通常,只有在遇到更新问题时才应更改此选项。如果您更改了它,但没有任何帮助,请将其更改回/删除。在大多数情况下,如果自动选择的方法不起作用,则将其设置为“ftpsockets”将起作用。

(主要首选)“direct”强制它使用PHP内部的直接文件I/O请求,这会在配置不当的主机上引发安全问题,在适当的时候会自动选择。

3 个回复
最合适的回答,由SO网友:websupporter 整理而成

这就是我对WordPress File API. 如果错误,请投反对票:)

可以如果上载文件,则此文件有所有者。如果您使用FTP上载文件,则登录后文件将归FTP用户所有。由于您拥有凭据,因此可以通过FTP更改这些文件。所有者通常可以执行、删除、更改文件等。当然,您可以通过更改file permissions.

如果使用PHP上载文件,则执行PHP的linux用户拥有该文件。该用户现在可以编辑、删除、执行文件等。只要您是在您的系统上执行PHP的用户,这就可以了。

假设您所在的共享主机配置“不好”。很多人在这个系统上运行他们的PHP网站。假设只有一个linux用户在为所有这些人执行PHP。此共享主机上的一位站长有恶意。他看到了你的页面,找到了WordPress安装的路径。例如,WP\\u DEBUG设置为true,并且出现如下错误消息

[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
“哈!”坏孩子说。让我们看看,如果这家伙FS_METHODdirect 他写了一个剧本

<?php
unlink( \'/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php\' );
?>
由于只有一个用户在运行PHP,而这个用户也被坏人使用,如果您通过PHP上传了文件,那么他可以更改/删除/执行您系统上的文件,并附上PHP用户作为所有者。

你的网站被黑了。

或者,正如法典中所说:

许多托管系统的Web服务器运行的用户与WordPress文件的所有者不同。在这种情况下,从Web服务器用户写入文件的进程将使生成的文件由Web服务器的用户帐户而不是实际用户帐户拥有。这可能会导致共享托管情况下的安全问题,即多个用户为不同站点共享同一Web服务器。

SO网友:Mark

有什么风险

在配置不当的共享主机上,每个客户的PHP都将作为同一个用户执行(比如apache 供讨论)。这种设置非常常见。

如果您在这样的主机上,并使用WordPress通过直接文件访问来安装插件,那么您的所有插件文件都将属于apache. 同一服务器上的合法用户可以通过编写一个PHP脚本来攻击您,该脚本将邪恶代码注入到您的插件文件中。他们将脚本上传到自己的网站并请求其URL。您的代码已成功泄露,因为它们的脚本运行为apache, 与插件文件的所有者相同。

什么是FS_METHOD \'direct\' 跟这有关系吗

当WordPress需要安装文件(如插件)时,它会使用get_filesystem_method() 函数确定如何访问文件系统。如果您不定义FS_METHOD 它将为您选择一个默认值,否则只要有意义,它将使用您的选择。

默认行为将try 要检测您是否处于如上所述的风险环境中,如果它认为您安全,它将使用\'direct\' 方法在这种情况下,WordPress将直接通过PHP创建文件,使它们属于apache 用户(在本例中)。否则,它将返回到一种更安全的方法,例如提示您输入SFTP凭据并在您创建文件时创建文件。

FS_METHOD = \'direct\' 要求WordPress绕过风险检测,并始终使用\'direct\' 方法

那么为什么要使用FS_METHOD = \'direct\'?

您将使用define(\'FS_METHOD\', \'direct\' ); 在像这样的误报场景中:您是受信任团队的一部分,该团队的成员都通过自己的帐户上传文件。PHP作为自己的独立用户运行。WordPress将假定这是一个有风险的环境,不会默认为\'direct\' 模式实际上,它只与您信任的用户共享,因此\'direct\' 模式是安全的。在这种情况下,您应该使用define(\'FS_METHOD\', \'direct\' ); 强制WordPress直接写入文件。

SO网友:Danny

存在“配置良好”的情况,“直接”将导致问题。

还可以与非共享PHP执行用户配置共享WP宿主,不同于文件/目录所有权用户。因此,最终得到的文件是user1所有的,PHP代码以PHP-user1的形式执行。

在这种情况下,被黑客攻击的插件或核心代码(a)无法写入(甚至无法读取,取决于权限)其他用户的目录;(b) 无法写入此用户文件,因此无法将特洛伊木马代码添加到核心或插件代码。

因此,如果主机设置为那样,则必须使用FTP进行更新,“direct”将不起作用。

如果在wp config中设置“direct”。php和php执行用户没有写入权限,您将收到更新失败的消息,并且不会弹出请求FTP凭据的窗口。

结束

相关推荐

使用FTP上传图像并在媒体中显示

Hello,本周末,我的一个网站遭到黑客攻击,所有照片都被删除(文件夹上传)。这意味着我的网站中的图像无法正常工作:(我有该文件夹的备份,并已将其恢复。但Wordpress的媒体中缺少图像,我无法管理它们,也不会显示所有图像,但都在文件夹中。)。有没有办法在媒体中显示图像?还是我应该一张一张上传所有图片?非常感谢你!