Quali problemi di sicurezza dovrei avere quando imposto FS_METHOD su "direct" in wp-config?
3 risposta
- voti
-
- 2015-05-27
Questo è soloilmodoin cui ho capito l'idea dell ' API difile WordPress . Se è sbagliato,perfavore downvote :)
Va bene. Se carichi unfile,questofile ha unproprietario. Se carichiiltuofile con FTP,effettuiil logine ilfile sarà diproprietà dell'utente FTP. Dato che hai le credenziali,puoimodificare questifiletramite FTP. Ilproprietario di solitopuòeseguire,eliminare,modificareecc. Ilfile. Ovviamentepuoi cambiare questaimpostazionemodificandoi autorizzazioni deifile .
Se carichi unfile usando PHP,l'utente linux,che staeseguendo PHP,èilproprietario delfile. Questo utentepuò oramodificare,eliminare,eseguireecc. Ilfile. Questo vabene fintanto che solotu sei l'utente,che staeseguendo PHP sultuo sistema.
Supponiamo chetu sia su un host condiviso "mal configurato". Moltepersonegestisconoi propri siti Web PHP su questo sistema. Diciamo che solo un utente Linux staeseguendo PHPpertutte questepersone. Uno dei webmaster su questo host condiviso ha cattiveintenzioni. Vede latuapaginae capisceilpercorsoper latuainstallazione di WordPress. Adesempio,WP_DEBUG èimpostato sutruee viene visualizzato unmessaggio dierrore come
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"Ah!" diceil cattivo ragazzo. Vediamo,se questo ragazzo haimpostato
FS_METHOD
sudirect
e scrive uno script come<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Poiché solo un utenteesegue PHPe questo utente è utilizzato anche dal cattivo ragazzo,puòmodificare/eliminare/eseguirei file sul sistema se li hai caricatitramite PHPe da questo allegato l'utente PHP comeproprietario.
Iltuo sito è stato compromesso.
Oppure,come diceil Codex:
Molti sistemi di hosting hannoil server webin esecuzione come un utente diverso rispetto alproprietario deifile WordPress. In questo caso,a ilprocesso di scrittura deifile dall'utente del server web avràil risultato file diproprietà dell'account utente del server webinvece dell'effettivo account dell'utente. Questopuòportare a unproblema di sicurezzanell'hosting condiviso situazioniin cuipiù utenti condividono lo stesso server webper siti diversi.
This is just, how I understood the idea of the WordPress File API. If it is wrong, please downvote :)
Okay. If you upload a file, this file has an owner. If you upload your file with FTP, you login and the file will be owned by the FTP user. Since you have the credentials, you can alter these files through FTP. The owner can usually execute, delete, alter etc. the file. Of course, you can change this by changing the file permissions.
If you upload a file using PHP, the linux user, which is executing PHP is owning the file. This user can now edit, delete, execute etc. the file. This is okay as long as only you are the user, who is executing PHP on your system.
Lets assume, you are on a "poorly" configured shared host. A lot of people run their PHP websites on this system. Lets say only one linux user is executing PHP for all these people. One of the webmasters on this shared host has bad intentions. He sees your page and he figures out the path to your WordPress installation. For example, WP_DEBUG is set to true and there is an error message like
[warning] /var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php on line 1
"Ha!" the bad boy says. Lets see, if this guy has set
FS_METHOD
todirect
and he writes a script like<?php unlink( '/var/www/vhosts/userxyz/wp-content/plugins/bad-plugin/doesnt-execute-correctly.php' ); ?>
Since only one user is running PHP and this user is also used by the bad boy he can alter/delete/execute the files on your system if you have uploaded them via PHP and by this attached the PHP user as the owner.
Your site is hacked.
Or, as it says in the Codex:
Many hosting systems have the webserver running as a different user than the owner of the WordPress files. When this is the case, a process writing files from the webserver user will have the resulting files owned by the webserver's user account instead of the actual user's account. This can lead to a security problem in shared hosting situations, where multiple users are sharing the same webserver for different sites.
-
- 2016-07-14
Qual èil rischio?
Su un host condivisomal configurato,il PHP di ogni cliente verràeseguito come lo stesso utente (diciamo
apache
per la discussione). Questa configurazione è sorprendentemente comune.Se sei su un host di questotipoe utilizzi WordPressperinstallareilplug-in utilizzando l'accesso diretto aifile,tuttii file delplug-in apparterranno a
apache
. Un utente legittimo sullo stesso serverpotrebbe attaccarti scrivendo uno script PHP cheinietta codicemalvagionei tuoifileplugin. Caricanoil loro script sulproprio sito webe ne richiedono l'URL. Iltuo codice è stato compromesso con successoperchéil loro script vieneeseguito comeapache
,lo stesso chepossiedei file deltuoplugin.Cosa c'entra
FS_METHOD 'direct'
?Quando WordPress habisogno diinstallarefile (come unplugin) utilizza get_filesystem_method () per determinare come accedere alfilesystem. Senon definisci
FS_METHOD
,sceglierà un valorepredefinitoperte,altrimenti utilizzerà latua selezionefintanto che ha senso.Il comportamentopredefinito proverà a rilevare seti troviin un ambiente a rischio come quello che ho descritto sopra,e sepensa chetu sia al sicuro utilizzeràil
'direct'
. In questo caso WordPress creerài file direttamentetramite PHP,facendoli appartenere all'utenteapache
(in questoesempio). Altrimenti ricadrà su unmetodopiù sicuro,come chiederti le credenziali SFTPe crearei file comete.FS_METHOD = 'direct'
chiede a WordPress di aggirareil rilevamento a rischioe di creare sempre file utilizzandoilmetodo'direct'
.Alloraperché usare
FS_METHOD = 'direct'
?Sfortunatamente,la logica di WordPressper rilevare un ambiente a rischio è difettosae produce siafalsipositivi chefalsinegativi. Ops. Iltestprevede la creazione di unfilee la verifica che appartenga allo stessoproprietario della directoryin cui risiede. Ilpresupposto è che segli utenti sonogli stessi,PHP èin esecuzione cometuo accounted è sicuroinstallareplug-in cometale account. Se sono diversi,WordPresspresume che PHP siain esecuzione come account condivisoe non è sicuroinstallareplug-in cometale account. Sfortunatamenteentrambi questipresupposti sonoipotesiplausibili che spesso saranno sbagliate.
Utilizzeresti
define('FS_METHOD', 'direct' );
in uno scenariofalsopositivo come questo:faiparte di unteamfidatoi cuimembri caricanotuttii filetramiteilproprio account . PHP vieneeseguito come un utente separato. WordPresspresumerà che questo sia un ambiente a rischioe nonpasserà automaticamente allamodalità'direct'
. In realtà è condiviso solo congli utenti di cuiti fidie cometale lamodalità'direct'
è sicura. In questo caso dovresti usaredefine('FS_METHOD', 'direct' );
perforzare WordPress a scrivere direttamentei file.What's the risk?
On a poorly configured shared host, every customer's PHP will execute as the same user (let's say
apache
for discussion). This setup is surprisingly common.If you're on such a host and use WordPress to install the plugin using direct file access, all of your plugin files will belong to
apache
. A legitimate user on the same server would be able to attack you by writing a PHP script that injects evil code into your plugin files. They upload their script to their own website and request its URL. Your code is successfully compromised because their script runs asapache
, the same one that owns your plugin files.What does
FS_METHOD 'direct'
have to do with it?When WordPress needs to install files (such as a plugin) it uses the get_filesystem_method() function to determine how to access the filesystem. If you don't define
FS_METHOD
it will choose a default for you, otherwise it will use your selection as long as it makes sense.The default behavior will try to detect whether you're in an at-risk environment like the one I described above, and if it thinks you're safe it will use the
'direct'
method. In this case WordPress will create the files directly through PHP, causing them to belong to theapache
user (in this example). Otherwise it'll fall back to a safer method, such as prompting you for SFTP credentials and creating the files as you.FS_METHOD = 'direct'
asks WordPress to bypass that at-risk detection and always create files using the'direct'
method.Then why use
FS_METHOD = 'direct'
?Unfortunately, WordPress' logic for detecting an at-risk environment is flawed and produces both false-positives and false-negatives. Whoops. The test involves creating a file and making sure it belongs to the same owner as the directory it lives in. The assumption is that if the users are the same, PHP is running as your own account and it's safe to install plugins as that account. If they're different, WordPress assumes that PHP is running as a shared account and it's not safe to install plugins as that account. Unfortunately both of these assumptions are educated guesses that will frequently be wrong.
You would use
define('FS_METHOD', 'direct' );
in a false positive scenario such as this one: you are part of a trusted team whose members all upload files through their own account. PHP runs as its own separate user. WordPress will assume that this is an at-risk environment and will not default to'direct'
mode. In reality it's only shared with users you trust and as such'direct'
mode is safe. In this case you should usedefine('FS_METHOD', 'direct' );
to force WordPress to write files directly. -
- 2017-02-23
Esiste una situazione "ben configurata"in cui "diretto"porterà aproblemi.
È anchepossibile configurare l'hosting WP condiviso con utenti diesecuzione PHPnon condivisi,diversi dagli utenti diproprietà difile/directory. Quinditi ritroverai coni file diproprietà di utente1e il codice PHP vieneeseguito comephp-utente1.
In quella situazione,i plugin oil codiceprincipale (a) compromessinonpossono scrivere (opersino leggere,a seconda delle autorizzazioni)nella directory di altri utenti;(b)non èpossibile scriverei file di questo utentee quindinon èpossibile aggiungere codicetrojan al codice core o al codice delplug-in.
Quindi,se l'hosting èimpostatoin questomodo,DEVI utilizzare FTPpergli aggiornamentie "diretto"nonfunzionerà.
Seimposti "diretto"in wp-config.phpe l'utente cheesegue PHPnon dispone deipermessi di scrittura,riceveraimessaggi di aggiornamentonon riuscitoe nessunpopup che richiede le credenziali FTP.
There is a 'well-configured' situation where 'direct' will lead to problems.
It is also possible to configure shared WP hosting with non-shared PHP execution users, different from the file/directory ownership users. So you end up with the files owned by user1 and the PHP code is executed as php-user1.
In that situation, hacked plugins or core code (a) can't write to (or even read from, depending on permissions) other users' directoriess; (b) can't write this user's files and so can't add trojan code to the core or plugin code.
So if the hosting is set up like that, you MUST use FTP for updates and 'direct' will not work.
If you set 'direct' in wp-config.php and the PHP execution user does not have write permission, you'll get Update Failed messages and have no pop-up asking for FTP credentials.
Recentemente ho riscontrato unproblemaper cuinon sono statoin grado diinstallareilplug-in WP Smush Properchénon sono disponibili le opzioni diinstallazionemanuale o diinstallazione con un clic.
Mi sonoimbattutoin questopost che ha suggerito dimodificare leimpostazioniin
wp-config.php
. Ho aggiunto leimpostazioni suggerite,tuttavia quella che sembraessere lapiùimportante è:define('FS_METHOD', 'direct');
Quello che vorrei sapere è quali realipreoccupazioni dovrei avere riguardo all'impostazione di
FS_METHOD
sudirect
? Esistono altre alternative all'installazione delplug-in?Questo è ciò che dice la documentazione ufficiale: