有什么风险?
在配置不佳的共享主机上,每个客户的PHP将以同一用户身份执行(让我们apache
讨论)。这种设置非常常见。
如果您在这样的主机上,并且使用WordPress通过直接文件访问来安装插件,则所有插件文件都将属于apache
。同一服务器上的合法用户可以通过编写PHP脚本向您的插件文件注入恶意代码,从而攻击您。他们将脚本上传到自己的网站并请求其URL。您的代码已成功泄露,因为它们的脚本运行为apache
,即拥有您的插件文件的脚本。
是什么FS_METHOD 'direct'
有什么关系呢?
当WordPress需要安装文件(例如插件)时,它使用get_filesystem_method()函数来确定如何访问文件系统。如果未定义FS_METHOD
,它将为您选择一个默认值,否则,只要合理就将使用您的选择。
默认行为将尝试检测您是否处于上述危险环境中,如果它认为您安全,则将使用该'direct'
方法。在这种情况下,WordPress将直接通过PHP创建文件,从而使它们属于apache
用户(在此示例中)。否则,它将退回到一种更安全的方法,例如提示您输入SFTP凭据并在您创建文件时创建文件。
FS_METHOD = 'direct'
要求WordPress绕过该风险检测,并始终使用该'direct'
方法创建文件。
那为什么要用FS_METHOD = 'direct'
呢?
不幸的是,WordPress用于检测高风险环境的逻辑存在缺陷,并且会产生假阳性和假阴性。哎呀 该测试包括创建一个文件,并确保该文件与其所在目录属于同一所有者。假设是,如果用户相同,则PHP将作为您自己的帐户运行,并且可以安全地将插件安装为该帐户。如果它们不同,则WordPress会假定PHP以共享帐户运行,因此不安全地以该帐户安装插件。不幸的是,这两个假设都是有根据的猜测,通常是错误的。
您将define('FS_METHOD', 'direct' );
在这种错误肯定的情况下使用这种情况:您是一个受信任的团队的成员,该团队的成员都通过自己的帐户上传文件。PHP以其自己的独立用户身份运行。WordPress将假定这是一个有风险的环境,并且不会默认为'direct'
mode。实际上,它仅与您信任的用户共享,因此这种'direct'
模式是安全的。在这种情况下,您应该使用define('FS_METHOD', 'direct' );
强制WordPress直接写入文件的方法。