Каковы риски?
На плохо сконфигурированном общем хосте 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'
режим по умолчанию . На самом деле он доступен только пользователям, которым вы доверяете, и поэтому такой 'direct'
режим безопасен. В этом случае вы должны использовать define('FS_METHOD', 'direct' );
WordPress для прямой записи файлов.