Le déplacement de wp-config en dehors de la racine Web est-il vraiment avantageux?
-
-
Iln'est vraimentpasnécessaire debrancher votre choix de réponseset de rejetertoutes les autres réponses,à l'intérieur de votre question.Comme vouspouvez le voir ci-dessous,c'est à cela que sert le système de vote stackexchange,voterpour les réponses qui ont un senspour lesgens,alors que lesposeurs de questions devraient utiliser lemécanisme de «réponse acceptée»et vospropres votes de haut/bas.It's really not necessary to plug your choice of answers and reject all other answers, inside your question. As you can see below, that's what the stackexchange voting system is for, to vote up the answers that make sense to people, whereas the question askers should be using the "accepted answer" mechanism and your own up/down votes.
- 2
- 2014-01-20
- Kzqai
-
Jene faispas celapour 99% des questions quej'aiposées,maisj'aipensé que c'était approprié dans ce casprécis.Il y a 8 réponses à la question,dont certaines sont assez longues/complexes,et dont certaines ontbeaucoup de votespositifsmalgré lefait qu'elles contiennent desinformationsinexactes oun'apportent rien à la conversation.Jepense qu'offrir une conclusion semi-officielleest utile auxpersonnes lisant lefilpour lapremièrefois.Commetoujours,les lecteurs sont libres de sefaire leurpropre opinion;J'offrejustemon opinionen tant que PO.I don't do that for 99% of the questions I've asked, but I thought it was appropriate in this specific case. There are 8 answers to the question, some of which are fairly lengthly/complex, and some of which have a lot of upvotes despite despite containing inaccurate info or not adding anything to the conversation. I think offering a semi-authoritative conclusion is helpful to people reading the thread for the first time. As always, readers are free to make up their own mind; I'm just offering my opinion as the OP.
- 7
- 2014-01-21
- Ian Dunn
-
@Kzqai: Le «système de voteparpile d'échange»est unprocessus démocratique,et lesparticipants sont souvent 1)peu clairs quant à ce que le PO demande ouessaie de résoudre,et 2)ne comprenantpas la validité d'une réponseparticulière.Unefois les réponses reçueset les votesexprimés,ilest **plus qu'utile ** que le PO clarifie les réponses qui ontfourni une assistance.Aprèstout,le POest le seul à savoir,et j'aimerais queplus de PO lefassent.Oui,lesgens «votentpour les réponses qui ont du senspour lesgens»,mais laissons le PO avoir le derniermot sur ce qui a du senspour lui.@Kzqai: The "stackexchange voting system" is a democratic process, and the participants are often 1) unclear as to what the OP is actually asking or trying to solve, and 2) uncomprehending of any particular answer's validity. After the responses have trickled in and the votes have been cast, it is **more than helpful** to have the OP clarify those responses that provided assistance. After all, the OP is the only one who knows, and I wish more OPs did so. Yes, people "vote up the answers that make sense to people," but let's let the OP have the last word as to what makes sense to him.
- 2
- 2017-07-14
- Mac
-
8 réponses
- votes
-
- 2012-07-18
Leplusimportantest que le
wp-config.php
contient desinformations sensibles: votrenom d'utilisateur/mot depasse debase de données,etc.Donc l'idée: déplacez-le hors de la racine du document,et vousn'aurez à vous soucier de rien. Un attaquantne pourrajamais accéder à cefichier depuis une sourceexterne.
Voici le hic,cependant:
wp-config.php
n'imprimejamais rien à l'écran. Ilne définit que diverses constantes utiliséestout au long de votreinstallation WP. Ainsi,la seulefaçonpour quelqu'un de voir le contenu de cefichierest de contourner l'interpréteur PHP de votre serveur -il obtient lefichier.php
à restituer sousforme detextebrut. Si cela seproduit,vous avez déjà desproblèmes:ils ont un accès direct à votre serveur (etprobablement des autorisations root)et peuventfaire ce qu'ils veulent.Je vais continueret dire qu'iln'y a aucun avantage à déplacer
wp-config
en dehors de la racine du document dupoint de vue de la sécurité -pour les raisons ci-dessuset celles-ci :- Vouspouvez restreindre l'accès aufichier via votre configuration d'hôte virtuel ou .htaccess -en limitantefficacement l'accèsextérieur aufichier de lamêmemanière que lefait de sortir de la racine du document
- Vouspouvez vous assurer que les autorisations defichier sont strictes sur
wp-config
pourempêchertout utilisateur sansprivilèges suffisants de lire lefichiermême s’il obtient un accès (limité) à votre serveur via SSH. - Vosinformations sensibles,lesparamètres debase de données,ne sont utilisées que sur un seul site. Ainsi,même si un attaquant avait accès à cesinformations,le seul site concerné serait l'installation de WordPress à laquelle appartient lefichier
wp-config.php
. Plusimportantencore,cet utilisateur debase de donnéesn'a que des autorisationspour lireet écrire dans labase de données de cetteinstallation WPet rien d'autre - aucun accèspour accorder des autorisations à d'autres utilisateurs. Autrement dit,si un attaquant accède à votrebase de données,il s'agit simplement de restaurer àpartir d'une sauvegarde (voirpoint 4)et de changer l'utilisateur de labase de données - Vous sauvegardez souvent. Souvent unterme relatif: si vouspubliez 20 articles chaquejour,vousferiezmieux de sauvegardertous lesjours outous les quelquesjours. Si vouspostez unefoispar semaine,une sauvegarde unefoispar semaineestprobablement suffisante.
- Vous avez votre site sous contrôle de version ( comme celui-ci ),ce qui signifie quemême si un attaquant a obtenu l'accès,vouspouvez détecterfacilement lesmodifications de codeet les annuler. Si un attaquant a accès à
wp-config
,il aprobablementjoué avec autre chose. - Lesinformations de labase de données sont vraiment les seules choses sensibles dans
wp-config
,et parce que vous yfaites attention (voir lespoints 3et 4),cen'estpas ungrosproblème. Les selset autrespeuvent êtremodifiés àtoutmoment. La seule chose qui seproduitest que celainvalide les cookies des utilisateurs connectés.
Pourmoi,déplacer
wp-config
hors de la racine du documentpue la sécuritépar l'obscurité - ce quiest vraiment un homme depaille.The biggest thing is the
wp-config.php
contains some sensitive information: your database username/password, etc.So the idea: move it outside the document root, and you don't have to worry about anything. An attacker will never be able to access that file from an external source.
Here's the rub, however:
wp-config.php
never actually prints anything to the screen. It only defines various constants that are used throughout your WP install. Thus the only way someone is going to see that contents of that file is if they circumvent your servers PHP interpreter -- they get.php
file to render as just plain text. If that happens, you're already in trouble: they have direct access to your server (and probably root permissions) and can do whatever they like.I'm going to go ahead and say there's no benefit to moving
wp-config
outside the document root from a security perspective -- for the reasons above and these:- You can restrict access to the file via your virtual host config or .htaccess -- effectively limiting outside access to the file in the same way that moving outside the document root would
- You can ensure the file permissions are strict on
wp-config
to prevent any user without sufficient privileges from reading the file even if they gain (limited) access to your server via SSH. - Your sensitive information, database settings, are only used on a single site. So even if an attacker gained access to that information, the only site it would affect would be the WordPress install to which the
wp-config.php
file belongs. More importantly, that database user only has permissions to read and write to that WP install's database and and nothing else -- no access to grant other users permissions. Meaning, in otherwords, if an attacker gains access to your database, it's simply a matter of restoring from a backup (see point 4) and changing the database user - You backup often. Often being a relative term: if you post 20 article every day, you better back up every day or every few days. If you post once a week, backing up once a week is likely sufficient.
- You have your site under version control (like this), which means even if an attacker gained access, you can easily detect code changes and roll them back. If an attacker has access to
wp-config
, they've probably messed with something else. - The database information is really the only sensitive stuff in
wp-config
, and because you're careful about it (see point 3 and 4), it's not a huge deal. Salts and such can be changed any time. The only thing that happens is that it invalidates logged in users' cookies.
To me, moving
wp-config
out of the document root reeks of security by obscurity -- which is very much a straw man.-
Ouais,c'est àpeuprès ce à quoije pensais.Je suis heureux de savoir queje ne suispas le seul :) Je voudrais laisser la question ouvertependant un ou deuxjours au cas où quelqu'un aurait un contre-argument convaincant,maisjusqu'àprésent,cela semble être labonne réponse àmoi.Yeah, that's pretty much what I've been thinking. I'm glad to know I'm not the only one :) I'd like to leave the question open for another day or two just in case somebody has a compelling counter-argument, but so far this seems like the right answer to me.
- 2
- 2012-07-18
- Ian Dunn
-
Correctionmineure:iln'y a aucun avantage de * sécurité * à déplacer lefichier wp-config.php hors de la racine du document.Ilexiste d'autres avantages quine sontpas liés à la sécuritéet quine s'appliquent qu'aux configurationsinhabituelles.Minor correction: There's no *security* benefit to moving the wp-config.php file out of the document root. There are other benefits, which are not security related, and which only apply to unusual setups.
- 3
- 2012-08-12
- Otto
-
Bon appel.Édité.Good call. Edited.
- 0
- 2012-08-12
- chrisguitarguy
-
Justepour démystifier un éventuelmythe -n'est-cepaspossible,quelque chosepourraitmaltourner côté serveur - auquel cas le code PHPestimprimé à l'écran?Just to get a possible myth debunked - is it not possible, something might go wrong server side - in which case php code is printed to the screen?
- 4
- 2012-08-12
- Stephen Harris
-
Sûr.Simod_phpne fonctionnaitpas ou si lesfichiers PHPne sontpastransmis à l'interpréteur PHP,c'estpossible.Si vousexécutez une configuration FCGI,lamême choseestpossible si lesfichiers PHPne sontpastransmis auprocessusfcgipourinterprétation.Ces deux élémentsmettent en évidence desproblèmes assezimportants quine seproduirontprobablementpas.Sure. If mod_php wasn't working or PHP files don't get passed to the PHP interpreter, it's possible. If you're running a FCGI set up, the same thing is possible if PHP files don't get handed off to the fcgi process for interpretation. Both of those point to some pretty large issues that aren't likely to happen, however.
- 0
- 2012-08-12
- chrisguitarguy
-
Jepense que la questionfondamentaleicin'estpas de savoir s'il y a un avantage à le déplacer,mais si ces avantages l'emportent ounon sur le risque d'étendre laportée openbase_dirpourinclure le répertoireparent,qui contient souvent desfichiersjournaux,des sauvegardes,unfichierprivérépertoire de stockage,etc.Donc,à ce stade,je prends leur silencepour signifier que les avantagesne valentpas le risque.I think the core question here isn't whether or not there's some benefit to moving it, but whether or not those benefits outweigh the risk of expanding the openbase_dir scope to include the parent directory, which often contains log files, backups, a private file storage directory, etc. I keep asking about that, and none of the proponents of moving wp-config have ever given me an answer. So, at this point I'm taking their silence to mean that the benefits aren't worth the risk.
- 0
- 2012-09-13
- Ian Dunn
-
@IanDunn Mais lesmeilleures réponsespréconisent de le déplacer hors de cette hiérarchie vers une hiérarchie distincte,ce qui répond à votrepréoccupation concernant lesjournaux,etc.d'autresmesures de sécurité sontbénéfiqueset essaient de vous rassurer dene pas vous soucier de la sécurité.Tout lemondepense que samaisonesten sécuritéjusqu'à ce qu'il soit cambriolé.Après cela,ilsfont unmeilleurtravail.Certainespersonnesne sontjamais cambriolées,même si leur sécuritéestfaible,mais celane signifiepas que c'est unbon conseil d'avoir une sécuritéinférieure.@IanDunn But the best answers advocate moving it out of that hierarchy altogether into a separate one, which does address your concern about logs etc. This answer doesn't answer your question title "is moving ... really beneficial", it just says other security measures are beneficial, and tries to reassure you into not worrying about security. Everyone thinks their house is secure until they get burgled. After that they do a better job. Some people never get burgled, even though their security is low, but it doesn't mean it's good advice to have lower security.
- 3
- 2012-12-05
- AndrewC
-
AFAIK,iln'estpaspossible de le déplacer ailleurs que dans un répertoire au-dessus d'ABSPATH,car c'est le seulemplacement que WP le recherchera.AFAIK, it's not possible to move it anywhere except one directory above ABSPATH, because that's the only location WP will search for it.
- 0
- 2012-12-05
- Ian Dunn
-
Nevermind,Aaron amis àjour sa réponse avec une solution de contournementpour cela,en utilisant unfichier wp-config.phpfacticepourinclure () le vrai.Nevermind, Aaron updated his answer with a workaround for that, by using a dummy wp-config.php file to include() the real one.
- 1
- 2012-12-06
- Ian Dunn
-
Ce sont debonspoints,maismonplusgrosproblème avec ceux-ciest que ce sont des arguments correctifs,pas des argumentspréventifs.Laplupart d'entreeuxparlent dufait que cen'estpas unproblème car A) vous supposez que quelqu'un agéré correctement l'utilisateur de labase de donnéeset B) vous avez des sauvegardes.Que sepasse-t-il lorsque vous utilisez quelque chose comme woocommerce ou que vous stockez desinformations sensibles dans votrebase de données?Alorstuesfoutu.These are good points, but my biggest problem with these is that they're remedial arguments, not preventative arguments. Most of these talk about how it's not a huge deal because A) you assume someone handled the db user correctly and B) you have backups. What happens when you're using something like woocommerce or storing sensitive information in your database? Then you're screwed.
- 4
- 2014-06-16
- Goldentoa11
-
- 2012-07-13
Jepense que Max'sest une réponsebien informée,et c'est un aspect de l'histoire.Le WordPress Codex aplus de conseils :
Deplus,assurez-vous que seul vous (et le serveur Web)pouvez lire cefichier (cela signifiegénéralement unepermission de 400 ou 440).
Si vous utilisez un serveur avec .htaccess,vouspouvez lemettre dans cefichier (à touten haut)pour refuser l'accès à quiconque surfepour lui:
<files wp-config.php> order allow,deny deny from all </files>
Notez que la définition d'une autorisation 400 ou 440 sur wp-config.phppeutempêcher lesplugins d'écrire ou de lemodifier.Un cas authentique,parexemple,serait lamiseen cache desplugins (W3 Total Cache,WP Super Cache,etc.) Dans ce cas,j'irais avec 600 (l'autorisationpar défautpour lesfichiers dans
/home/user
répertoire).I think Max's is a knowledgeable answer, and that's one side of the story. The WordPress Codex has more advise:
Also, make sure that only you (and the web server) can read this file (it generally means a 400 or 440 permission).
If you use a server with .htaccess, you can put this in that file (at the very top) to deny access to anyone surfing for it:
<files wp-config.php> order allow,deny deny from all </files>
Note that setting 400 or 440 permission on wp-config.php may prevent plugins from writing to or modifying it. A genuine case for example would be, caching plugins (W3 Total Cache, WP Super Cache, etc.) In that case, I'd go with 600 (the default permission for files in
/home/user
directory).-
Maxest la réponse.+1pour lui.J'essaie simplement de l'étendre.Max's is the answer. +1 to him. I am simply trying to extend it.
- 5
- 2012-07-13
- its_me
-
Aahan Krish,vous avezfrappé dans lemille.Mercipour l'ajout.Aahan Krish, you've hit the bull's eye. Thanks for the addition.
- 1
- 2012-07-13
- Max Yudin
-
Donc,si vous utilisez htaccesspour refuser les requêtes HTTP à wp-config.php,celan'aboutit-ilpas aumême résultat que de le déplaceren dehors de la racine du document,mais sansexposer lesjournaux/sauvegardes/etc?So if you use htaccess to deny HTTP requests to wp-config.php, doesn't that achieve the same result as moving it outside the document root, but without exposing logs/backups/etc?
- 0
- 2012-07-13
- Ian Dunn
-
@IanDunn Dépend de la racine du document— ** (1) ** Si wordpressest hébergé dans un répertoire dans `public_html`,déplacer` wp-config.php` hors du répertoire signifie qu'il sera dans `public_html`annuaire.Dans ce cas,vous devrez utiliser les règles htaccesspour refuser les requêtes HTTP à wp-config.php.** (2) ** Si WordPressestinstallé directement dans le répertoire `public_html`,unniveau supérieur=> vous le déplacerez dans le répertoire`/home/user`Dans ce cas,vous êtes assez sûr car lefichieresten dehors de la racine du document.Vouspouveztoujours définir les autorisations dufichier sur 600 (oumêmeplus strictes 440 ou 400).@IanDunn Depends on what the document root is— **(1)** If wordpress is hosted in a directory in `public_html`, moving `wp-config.php` outside the directory means that it's going to be in `public_html` directory. In this case, you'll have to use the htaccess rules to deny HTTP requests to wp-config.php. **(2)** If WordPress is installed directly under `public_html` directory, one level up => you'll be moving it into `/home/user` directory. In this case you are pretty safe as the file is outside the document root. You can still set the file's permissions to 600 (or even stricter 440 or 400).
- 4
- 2012-07-13
- its_me
-
@IanDunn Commeje l'ai dit,c'estma compréhension debase,et jene suispas unexperten sécurité.:)@IanDunn Like I said, this is my basic understanding, and I am no security expert. :)
- 0
- 2012-07-13
- its_me
-
Dans le casn ° 1,vousn'obtenezpas l'avantage de sécuritéprévu.Lebutest de le déplaceren dehors de la racine du document,pas seulement d'unniveau supérieur.In case #1 you don't get the intended security benefit. The whole point is to move it outside the document root, not just up one level.
- 0
- 2012-07-14
- Ian Dunn
-
Dans le casn ° 2,vous devrez étendre laportée de `open_basedir`pourpermettre à PHP d'accéder àtout dans/home/user,ce quime semble être un énormeproblème.Tout ce qui yest stocké (journaux,sauvegardes,.bash_history,etc.) serait accessible àtout script PHPinfecté s'exécutant dans/home/user/public_html.Il semble qu'il seraitpréférable de laisser wp-config dans/home/user/public_html/wp-config.phpet d'utiliser les règles htaccesspourbloquer les requêtes HTTP.Vousbénéficieztoujours dublocage de l'accès dans le cas (peuprobable) oùilest affichéen textebrut,mais vousn'exposezpas lesfichiers au-dessus depublic_html.In case #2, you'd have to expand the `open_basedir` scope to let PHP access everything in /home/user, which seems like a huge problem to me. Anything stored there (logs, backups, .bash_history, etc) would be accessible to any infected PHP script running in /home/user/public_html. It seems like it'd be better to leave wp-config at /home/user/public_html/wp-config.php and use htaccess rules to block HTTP requests to it. You still get the benefit of blocking access in the (unlikely) event that it's displayed in plain-text, but you don't expose files above public_html.
- 0
- 2012-07-14
- Ian Dunn
-
- 2012-09-12
Quelqu'unnous a demandé debrilleret je répondraiici.
Oui,il y a des avantages de sécurité àisoler votre wp-config.php du répertoire racine de votre site.
1- Si votregestionnaire PHPest cassé oumodifié d'unemanière ou d'une autre,vosinformations DBne serontpasexposées. Et oui,j'ai vu cela seproduireplusieursfois sur des hôtespartagés lors desmises àjour du serveur. Oui,le site serainterrompupendant cettepériode,mais vosmots depasse serontintacts.
2- Lesmeilleurespratiques recommandenttoujours d'isoler lesfichiers de configuration desfichiers de données. Oui,c'est difficile de lefaire avec WordPress (oun'importe quelle application Web),mais le déplacer vers le haut crée unpeu d'isolement.
3- Souvenez-vous de la vulnérabilité PHP-CGI,oùn'importe quipouvaitpasser les? -s à unfichieret voir la source. http://www.kb.cert.org/vuls/id/520827
À lafin,ce sont depetits détails,maisils aident àminimiser les risques. Surtout si vous êtes dans unenvironnementpartagé,oùn'importe quipeut accéder à votrebase de données (tout ce dontils ontbesoinest un utilisateur/pass).
Maisne laissezpas depetites distractions (optimisationsprématurées)prendre le dessus sur ce quiest vraimentnécessairepour sécuriser correctement un site:
1- Gardez-letoujours àjour
2- Utilisez desmots depasseforts
3- Restreindre l'accès (via lespermissions). Nous avons un article à ce sujetici:
http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html
merci,
Someone asked us to shine in, and I will reply here.
Yes, there are security benefits from isolating your wp-config.php from the root directory of your site.
1- If your PHP handler gets broken or modified in some way, your DB information will not be exposed. And yes, I saw this happen a few times on shared hosts during server updates. Yes, the site will be broken during that period, but your passwords will be intact.
2- Best practices always recommend isolating configuration files from data files. Yes, it is hard to do that with WordPress (or any web app), but moving it up does a bit of isolation.
3- Remember the PHP-CGI vulnerability, where anyone could pass the ?-s to a file and view the source. http://www.kb.cert.org/vuls/id/520827
At the end, those are small details, but they do help to minimize risk. Specially if you are on a shared environment, where anyone can access your database (all they need is a user/pass).
But don't let small distractions (premature optimizations) get in front of what is really necessary to get a site properly secure:
1- Keep it always updated
2- Use strong passwords
3- Restrict access (via permissions). We have a post about it here:
http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html
thanks,
-
Hé lesgars,merci d'avoir ajouté vospensées.Jepense quenous abordons déjà laplupart de cespoints dans les autres réponseset leurs commentaires.1) Oui,c'estpossible,mais rare;2) Oui,celaprésente des avantages,maisils sontminimes;3) Oui,c'estpossible,maisilestpeuprobable que cetype de vulnérabilité se reproduise,et seprotéger contre cela,c'est unpeu commejouer au whac-a-mole,ou obliger lesgens àenlever leurs chaussures dans les aéroportsparce qu'un crétin a caché unebombe dans sonchaussure unefois.C'est réactionnaireet peu susceptible d'avoir des avantagesfuturs.Hey guys, thanks for adding your thoughts. I think we already hits on most of those points in the other answers and their comments. 1) Yes, this is possible, but rare; 2) Yes, this has benefits, but they're minimal; 3) Yes, this is possible, but that type of vulnerability is unlikely to happen again, and protecting against it is kind of like playing whac-a-mole, or making people remove their shoes at airports because some jackass hid a bomb in his shoe once. It's reactionary and unlikely to have future benefits.
- 0
- 2012-09-12
- Ian Dunn
-
Au cours des différentes discussions,la question a été affinée àpartir de "Y a-t-il des avantages?""Ok,il y a des avantages,mais l'emportent-ils sur les risques?"Leprincipal risque auquelje fais référenceest lefait que vous devez étendre laportée openbase_dir afin depermettre à PHP d'accéder aux scriptsen dehors de la racine Web.Denombreuses configurations d'hébergement - y compris celles qui utilisent Plesk,ce quiestbeaucoup - stockent lesjournaux,les sauvegardes,les zones FTPprivées qui sont censées êtreisolées de la racine Web,etc. dans le répertoire au-dessus de la racine Web.Ainsi,donner à PHP l'accès à ce répertoirepeut être une vulnérabilité sérieuse.In the various discussions, the question was refined from "Are there any benefits?" to "Ok, there are some benefits, but do they outweigh the risks?" The main risk I'm referring to is the fact that you have to expand the openbase_dir scope in order to let PHP access scripts outside the web root. Many hosting setups -- including those that use Plesk, which is a lot -- store logs, backups, private FTP areas that are supposed to be isolated from the web root, etc in the directory above the web root. So, giving PHP access to that directory can be a serious vulnerability.
- 0
- 2012-09-12
- Ian Dunn
-
- 2012-07-13
Certainement OUI.
Lorsque vous déplacez wp-config.php en dehors du répertoirepublic,vous leprotégez de la lecture à l'aide dunavigateur lorsque legestionnairephpestmodifié demanièremalveillante (ou accidentelle!).
La lecture de votre login/mot depasse DBestpossible lorsque le serveurest àpeine infectépar unefaute d'un administrateurboiteux.Facturez une amende à l'administrateuret obtenez un hôte de serveurmieuxentretenuet plusfiable.Bien que celapuisse êtreplus cher.
Definitely YES.
When you move wp-config.php outside public directory you protect it from reading using browser when php handler gets maliciously (or accidentally!) changed.
Reading your DB login/password is possible when server is hardly infected through a fault of lame administrator. Charge the administrator a fine and get a better-tended and more reliable server host. Though that may be more expensive.
-
Si un attaquant a suffisamment d'accèspour changer legestionnaire PHP,vous êtes déjàfoutu.Les changements accidentels sonttrès rares dansmonexpérience,et dans ce cas,il seraitfacile de changer lemot depasse.À la lumière de ces choses,pensez-voustoujours que cela vaut le risque d'exposer lesjournaux/sauvegardes/etcen raison de laportée étendue de `open_basedir`?If an attacker has enough access to change the PHP handler, you're already screwed. Accidental changes are very rare in my experience, and in that case it'd be easy to change the password. In light of those things, do you still think it's worth the risk of exposing logs/backups/etc because of the expanded `open_basedir` scope?
- 4
- 2012-07-13
- Ian Dunn
-
Jen'aijamaiseu d'accès `-rwx` aux répertoires supérieurs à`public_html` doncje n'aijamais étéfamilier avec `open_basedir`.Mesjournaux sont dans un répertoire séparé,donc les sauvegardes lefont.Jepense que c'est ce quetous les hôtespartagés ont.I've never had `-rwx` access to directories higher than `public_html` so I never was familiar with `open_basedir`. My logs are in separate directory, so backups do. I think that's what all shared hosts have.
- 1
- 2012-07-13
- Max Yudin
-
Les hôtes varient énormément;iln'y apas de structure de répertoire standard.Plesk (l'un despanneaux de contrôle lespluspopulairespour les hôtespartagés)place lesjournaux dans/var/www/vhosts/example.com/statistics/logset la racine du documentest/var/www/vhosts/example.com/httpdocs.Déplacer wp-config.php vers/var/www/vhosts/example.com/wp-config.phpnécessiterait de donner aux scripts l'accès à l'ensemble du répertoireexample.com.Hosts vary wildly; there's no standard directory structure. Plesk (one of the most popular control panels for shared hosts) puts logs in /var/www/vhosts/example.com/statistics/logs and the document root is /var/www/vhosts/example.com/httpdocs. Moving wp-config.php to /var/www/vhosts/example.com/wp-config.php would require giving scripts access to the entire example.com directory.
- 0
- 2012-07-14
- Ian Dunn
-
Justepar curiosité,où sont stockés vos logset sauvegardes,sinon dans l'annuaire du domaine?Sont-ils accessibles via unpanneau de contrôle ou quelque chose?Just out of curiosity, where are your logs and backups stored, if not in the domain's directory? Are they accessed through a control panel or something?
- 0
- 2012-07-14
- Ian Dunn
-
Oui,via unpanneau de contrôle.Yes, through a control panel.
- 1
- 2012-07-14
- Max Yudin
-
Jeme trompepeut-être à ce sujet,mais si votre serveurn'estpas sécurisé,une attaquepar lien symboliquepourrait lire votre wp-config.php où qu'il setrouve.Tout ce qu'un attaquant doit savoir,c'est où setrouve lefichieret si une liaison symboliqueestpossible.C'estpeut-être une question hors sujet,maisil semblerait que s'il y avait unmoyen de renommer le wp-config.php,ce serait unmoyen d'empêcher lephishing.I may be wrong about this, but if your server is not secure, a symlink attack could read your wp-config.php regardless of where it is. All an attacker has to know is where the file could possibly be and if symlinking is possible. This maybe an off topic question, but it would seem if there was a way to rename the wp-config.php, that would be a way to prevent phishing for it.
- 0
- 2012-07-14
- MickeyRoush
-
Lenom defichier `wp-config.php`est codéen dur dans` wp-load.php`,donc le changern'estpaspossible sansmodifier lenoyau.The filename `wp-config.php` is hardcoded into `wp-load.php`, so changing it isn't possible without modifying core.
- 0
- 2012-07-16
- Ian Dunn
-
- 2012-10-03
Je veuxjuste clarifier,pour des raisons d'argumentation,que déplacer votrefichier wp_config.phpne signifiepasnécessairement que vous devez le déplacer uniquement vers le répertoireparent. Disons que vous avez une structuretelle que/root/html,où html contient l'installation WPet tout votre contenu HTML. Au lieu de déplacer wp_config.php vers/root,vouspouvez le déplacer vers quelque chose comme/root/secure ... quiest à lafoisen dehors du répertoire htmlet égalementpas dans le répertoire racine du serveur. Bien sûr,vous devez vous assurer quephppeut égalementfonctionner dans ce dossier sécurisé.
Puisque WPne peutpas être configurépour rechercher wp_config.php dans un dossierfrèretel que/root/secure,vous devezfaire une étape supplémentaire. J'ai laissé le wp_config.php dans/root/html,et j'ai découpé lesparties sensibles (connexion à labase de données,sel,préfixe detable)et les ai déplacées vers unfichier séparé appelé config.php. Ensuite,vous ajoutez la commande PHP
include
à votre wp_config.php,comme ceci:include('/home/content/path/to/root/secure/config.php');
C'estessentiellement ce quej'aifait dansma configuration. Maintenant,sur labase de la discussion ci-dessus,j'évaluetoujours si c'estnécessaire oumême unebonneidée. Maisje voulaisjuste ajouter que la configuration ci-dessusestpossible. Iln'exposepas vos sauvegardeset autresfichiers racine,et tant que le dossier sécurisén'estpas configuré avec sapropre URLpublique,iln'estpasnavigable.
Deplus,vouspouvez limiter l'accès au dossier sécuriséen créant unfichier .htaccess avec:
order deny,allow deny from all allow from 127.0.0.1
I just want to clarify, for the sake of argument, that moving your wp_config.php file does not necessarily mean you have to move it only to the parent directory. Let's say you have a structure like /root/html, where html contains the WP installation and all of your HTML content. Instead of moving wp_config.php to /root, you could move it to something like /root/secure ... which is both outside the html directory and also not in the server root directory. Of course, you would need to make sure that php can run in this secure folder as well.
Since WP cannot be configured to look for wp_config.php in a sibling folder like /root/secure, you have to take an additional step. I left the wp_config.php in /root/html, and cut out the sensitive portions (database login, salt, table prefix) and moved them to a separate file called config.php. Then you add the PHP
include
command to your wp_config.php, like this:include('/home/content/path/to/root/secure/config.php');
This is essentially what I've done in my setup. Now, based on the above discussion, I am still evaluating whether it is necessary or even a good idea. But I just wanted to add that the above configuration is possible. It does not expose your backups and other root files, and so long as the secure folder is not set up with its own public URL, it is not browsable.
Furthermore, you can limit access to the secure folder by creating an .htaccess file in there with:
order deny,allow deny from all allow from 127.0.0.1
-
Hey Michael,merci d'avoirpartagé ça.L'avez-vousessayé dans unenvironnement réelpour vérifier que celafonctionne?Jepense que la directive `open_basedir`prend un * arbre *entier,doncpour accéder à`/root/secure` depuis `/root/html`,vous devez définir` open_basedir` sur `/root`.Hey Michael, thanks for sharing that. Have you tried it out in a real environment to verify it works, though? I think the `open_basedir` directive takes an entire *tree*, so in order to access `/root/secure` from `/root/html`, you'd have to set `open_basedir` to `/root`.
- 0
- 2012-10-03
- Ian Dunn
-
Afin defairefonctionner votreidée,je pense que vous devez configurer la structure de répertoire comme `/root/httpdocs/config/accessible`,où` httpdocs` contient lesjournaux,les sauvegardes,etc.`config` contient` wp-config.php`,et `accessible` contient WordPresset tout le contenu.Vous devrezmodifier la configuration de vhost,etc.pour remapper la racine du document sur «accessible».Cependant,je ne vois aucun avantage à refuser simplement les requêtes HTTP à wp-config dans la configurationpar défaut.In order to make your idea work, I think you'd need to setup the directory structure like `/root/httpdocs/config/accessible`, where `httpdocs` holds logs, backups, etc; `config` holds `wp-config.php`, and `accessible` holds WordPress and all content. You'd have to modify the vhost config, etc to remap the document root to `accessible`. I don't see any benefit over just denying HTTP requests to wp-config in the default setup, though.
- 0
- 2012-10-03
- Ian Dunn
-
Selon http://www.php.net/manual/en/ini.core.php#ini.open-basedir: "Sous Windows,séparez les répertoirespar unpoint-virgule. Surtous les autres systèmes,séparez les répertoirespar deux-points. Entant quemodule Apache,les chemins open_basedir des répertoiresparents sont désormais automatiquement hérités. "Ainsi,vouspouvez définirplusieurs répertoires,pasbesoin qu'ils soient dans une seule arborescence.According to http://www.php.net/manual/en/ini.core.php#ini.open-basedir: "Under Windows, separate the directories with a semicolon. On all other systems, separate the directories with a colon. As an Apache module, open_basedir paths from parent directories are now automatically inherited." So you can set multiple directories, no need for them to be in a single tree.
- 1
- 2012-10-03
- Michael
-
Je viens detester çaet il semble quetu as raison.Jene suistoujourspas sûr de l'avantage de sécurité que celaprésentepar rapport au simple refus d'accès aufichier via Apache.I just tested that out and it looks like you're right. I'm still not sure what security benefit this has over simply denying access to the file via Apache, though.
- 0
- 2012-10-03
- Ian Dunn
-
@IanDunn s'estbien adressé dans la réponse d'Aaron Adams@IanDunn addressed well in Aaron Adams' answer
- 0
- 2012-12-05
- AndrewC
-
Jene trouvepas son argumentpour cela convaincant.J'aiexpliquépourquoi dansmon commentaire sur sa réponse.I don't find his argument for that convincing. I've explained why in my comment on his answer.
- 0
- 2012-12-05
- Ian Dunn
-
- 2012-11-19
Il y abeaucoup demauvaisthèmeset plugins écrits quipermettent aux atatckers d'injecter du code (rappelez-vous leproblème de sécurité avec Timthumb). Sije devais être un attaquant,pourquoi devrais-je rechercher le wp-config.php? Injectez simplement ce code:
var_dump( DB_NAME, DB_USER, DB_PASSWORD );
Vouspouvezessayer demasquer votre wp-config.php. Tant que WordPress rendtoutes lesinformations sensibles accessibles auniveaumondial,iln'a aucun avantage à cacher le wp-config.php.
Lamauvaisepartie de wp-config.phpn'estpas qu'il contient des données sensibles. Lamauvaisepartieest de définir les données sensibles comme une constanteglobale accessible.
<❯Mise àjour
Je veux clarifier lesproblèmes avec
define()
et pourquoi c'est unemauvaiseidée de définir des données sensibles comme une constanteglobale.Ilexiste denombreusesfaçons d'attaquer un site Web. L'injection de scriptn'est qu'unmoyen d'attaquer un site Web.
En supposant que le serveur a une vulnérabilité quipermet à un attaquant d'accéder à un vidagemémoire. L'attaquanttrouvera dans le vidagemémoiretoutes les valeurs detoutes les variables. Si vous définissez une constante accessibleglobale,elle doit resteren mémoirejusqu'à lafin du script. En créant une variable au lieu d'une constante,il y a debonnes chances que legarbage collector écrase (ou libère) lamémoire unefois que la variablen'estplusnécessaire.
Unemeilleurefaçon deprotéger les données sensiblesest de les supprimerimmédiatement après leur utilisation:
$db_con = new stdClass(); $db_con->db_user = 'username'; $db_con->password = 'password'; $db_con->host = 'localhost'; $db_handler = new Database_Handler( $db_con ); $db_con = null;
Après avoir utilisé les données sensibles,l'attribution de
null
écrasera les donnéesen mémoire. Un attaquant doit récupérer le vidage de lamémoirejuste aumoment où$db_con
contient les données sensibles. Et c'est untempstrès court dans l'exemple ci-dessus (si la classe Database_Handlern'enenregistrepas une copie).There are a lot of bad written themes and plugins out there which allow atatckers to inject code (remember the security issue with Timthumb). If I would be a attacker, why should I search for the wp-config.php? Simply inject this code:
var_dump( DB_NAME, DB_USER, DB_PASSWORD );
You can try to hide your wp-config.php. As long as WordPress make all the sensitive information global accessible, it have no benefit to hide the wp-config.php.
The bad part in wp-config.php is not that it holds sensitive data. The bad part is to define the sensitive data as a global accessible constant.
Update
I want to clearify the problems with
define()
and why it is a bad idea to define sensitive data as a global constant.There are a lot of ways to attack a website. Script injection is only one way to atack a website.
Assuming the server has a vulnerability that let an attacker access a memory dump. The attacker will find in the memory dump all values of all variables. If you define a global accessible constant, it have to stay in memory until the script ended. Creating a variable instead of a constant, there is a good chance that the garbage collector will overwrite (or free) the memory after the variable is not longer needed.
A better way to protect sensitive data is to delete them immediately after using it:
$db_con = new stdClass(); $db_con->db_user = 'username'; $db_con->password = 'password'; $db_con->host = 'localhost'; $db_handler = new Database_Handler( $db_con ); $db_con = null;
After using the sensitive data, the assigning to
null
will overwrite the data in memory. An attacker have to get the memory dump just in the moment when$db_con
contains the sensitive data. And that is a very short time in the example above (if the class Database_Handler do not save a copy of it).-
Cette réponsene répondpas directement à la question.Tout auteur depluginpeutpasser unejournée sur leterrain avec WordPress s'il vous convainc d'installer son codeet d'avoir uneintentionmalveillante.Cen'estpas différent d'installer volontairement un virus sur votre système.Cet argumentpourne pas déplacer wp-config.phpestinutile.C'est comme dire que l'installation volontaire d'une voiturepiégée dans votre voiture rend le réglage de l'alarme de voitureinutile.Techniquement vraimais WTF?!?This response does not directly address the question. Any plugin author can have a field day with WordPress if they convince you to install their code and have malicious intent. It is no different than willingly installing a virus on your system. This argument to not move wp-config.php is pointless. This is like saying that willfully installing a car bomb in your car makes setting the car alarm useless. Technically true but WTF?!?
- 0
- 2012-12-06
- Lance Cleveland
-
Non,cen’estpasinutile.La questionest la suivante:puis-jeprotéger le compte debase de donnéesen masquant lefichier wp-config.php.Et la réponseest clairement:non. C'est lamême chose que si vous demandez "Puis-jeprotégerma voiture contre les voiturespiégées avec une alarme de voiture?" Iln'y apas d'autre avantage à cacher votre wp-config que deprotéger l'accès à labase de données ou l'accèsftp.Les deux sont dans laportéemondiale.Je suis sûr qu'ilexiste d'autresmoyenspour les attaquants d'accéder aux variablesglobales sansinjecter de code.No, it is not pointless. The question is: Can I protect the database account by hiding the wp-config.php. And the answer is clearly: No. It is the same as if you ask 'Can I protect my car against car bombs with a car alarm?' There is no other benefit by hiding your wp-config as of protecting database access or ftp access. Both are in the global scope. I'm sure there are more ways for attackers to get access to global vars without injecting code.
- 2
- 2012-12-06
- Ralf912
-
Jene voispas "puis-jeprotéger le compte debase de donnéesen masquant le wp-config.php" dans la question d'origine.La question originale était "est-iljudicieux de déplacer lefichier wp-config.php".La réponseest absolument oui,OMI.C'est comme demander si vous devez verrouiller votreporte d'entrée lorsque vous sortez.Dire «quelqu'unpeutfacilementbriser unefenêtreet entrer detoutefaçon,alorspourquoi s'embêter»ne répondpas aupointfondamental de la question.La questionposée à l'OMI était la suivante: "Vaut-il l'effort supplémentaire de déplacer wp-config.php? N'IMPORTE QUEL avantage de lefaire?".Oui.Àtout lemoins,celaempêche lespiratesparesseux d'entrer.I don't see "can I protect the database account by hiding the wp-config.php" in the original question. The original question was "does it makes sense to move the wp-config.php". The answer is absolutely yes, IMO. It is like asking if you should lock your front door when you go out. Saying "someone can easily break a window and get in anyway, so why bother" does not answer the fundamental point of the question. IMO the question asked was this, "Is it worth the extra effort to move wp-config.php? ANY benefit doing so?". Yes. At the very least it keeps out the lazy hackers.
- 0
- 2012-12-10
- Lance Cleveland
-
_Une desmeilleurespratiques de sécurité lesplus courantes ..._ Vous avezmanqué unpointtrès (très,très)important: à quoi un attaquant s'intéresse-t-il?Et cen'est *pas * comment stylisez-vous votre wp-config.php.Un attaquantestintéressépar les valeurs que vous avez définies dans votre wp-config.Prenez votreexemple avec laporte d'entrée: Cacher votre wp-config revient à verrouiller votreporte d'entrée,mais stockertout votre or sansprotection dans lejardin.Toutes les valeurs définies dans wp-config sont *globalement * définies.Ils sont donc *tous * accessiblesen dehors de wp-config.Même si vousmasquez votre wp-config,les valeurs sonttoujoursprésentes._One of the most common security best practices..._ You missed a very (very, very) important point: To what an attacker is interested? And it is *not* how do you styled your wp-config.php. An attacker is interessted in the values you defined in your wp-config. Grabbing your example with the front door: Hiding your wp-config is the same as if you will lock your front door, but store all your gold unprotected in the garden. All values defined in the wp-config are *globally* defined. So they are *all* accessible outside of wp-config. Even if you hide your wp-config, the values are still present.
- 2
- 2012-12-11
- Ralf912
-
Jepense que ceux quiplaidenten faveur du déplacementessaient de seprotéger contre des scénarios où wp-config.phppourrait être affichéen textebrut via une requête HTTP,plutôt que des scénarios oùilpourrait êtreexposé à un autre code PHPfonctionnant sur l'hôte.I think those that argue in favor of moving it are trying to protect against scenarios where wp-config.php could be displayed in plain text via an HTTP request, rather than scenarios where it could be exposed to other PHP code running on the host.
- 1
- 2012-12-11
- Ian Dunn
-
@ Ralf912 - cen'estpasexactementexact.Les définitionsglobales sont ACCESSIBLESpartous lesfichiersprogramme danstous les répertoiresmaisne sontpas affichées.Afin de VOIR les valeurs,vous devez êtreen mesure de réécrire le codemodifié sur le serveur.Alors qu'un serveurmal configuré avec wp-config.php dans doc root afficherafacilement ces valeurs sousforme detextebrut.C'est lepoint sous-jacent.Voir le code de l'un desplugins/thèmesne cause aucunmal.@Ralf912 - that is not exactly accurate. The global defines are ACCESSIBLE by all program files in all directories but not displayed. In order to SEE the values you would need to be able to write modified code back to the server. Whereas a mis-configured server with wp-config.php in doc root will readily display those values as plain text. That is the underlying point. Seeing the code for any of the plugins/themes causes no harm.
- 0
- 2012-12-12
- Lance Cleveland
-
Vraiment unbonpoint sur lafaçon dont «define»globaliseratout ce quiest défini.Really good point about how `define` globalizes whatever is being defined.
- 0
- 2014-06-16
- Goldentoa11
-
- 2020-07-21
Désolé demodifier un ancienmessage,maisn'y a-t-ilpas qu'une solution évidente àtout cela? Nous savons qu'il y a des avantages de sécurité à déplacer lefichier wp-config.php hors du répertoire de route wordpress. Certains diront que les avantages sontminimes,d'autresnon.
D'un autre côté,ilpeut y avoir desinconvénients à déplacer lefichier hors de sonemplacementpar défaut,comme la rupture de certainsplugins quin'ontpas lafonctionnalité de rechercher lefichier wp-config.php dans d'autresemplacements.
La chose laplus évidentepourmoiest de créer unfichier secret-info.phpen dehors du répertoire de route wordpress qui contient des variablespourtous vosnoms d'utilisateuret mots depasse,c'est-à-dire
$ userName=& quot; utilisateur & quot ;;
$ databasePassword=& quot; 12345 & quot ;;
Laissez lefichier wp-config.php dans le répertoire de route wordpresspar défaut,supprimez les valeurs denom d'utilisateuret demot depasse de wp-config.phpmais laisseztout le reste. Ensuite,faites simplement référence aux variables $ userNameet $ databasePassworden demandant secret-info.php dans wp-config.php,c'est-à-dire
< retourrequire('PATH-TO-FILE/secret-info.php');^
Semble la chose évidente àfaire,est-ce queje manque quelque choseici?
Sorry to bump an old post but is there not just an obvious solution to all this. We know there is some security benefits from moving the wp-config.php file out of the wordpress route directory. Some would argue that the benefits are minimal others would not.
On the flip side there can be some drawbacks to moving the file out of it's default location such as breaking some plugins that do not have functionality to look for the wp-config.php file in other locations.
Most obvious thing to me is to create a secret-info.php file outside of the wordpress route directory which contains variables for all your usernames and passwords i.e.
$userName = "user";
$databasePassword = "12345";
Leave the wp-config.php file in the default wordpress route directory, remove the username and password values from wp-config.php but leave everything else. Then just simply reference the $userName and $databasePassword variable by requiring secret-info.php in wp-config.php i.e.
require('PATH-TO-FILE/secret-info.php');
Seems the obvious thing to do, am I missing something here ?
-
C'esten fait unetrèsbonne chose d'ajouter une réponse à une vieille question,[il y amême unbadgepour cela] (https://wordpress.stackexchange.com/help/badges/44/necromancer).[WPSEest censé être un référentiel de connaissances] (https://wordpress.stackexchange.com/tour),plutôt qu'unforum.It's actually a really good thing to add an answer to an old question, [there's even a badge for it](https://wordpress.stackexchange.com/help/badges/44/necromancer). [WPSE is meant to be a repository of knowledge](https://wordpress.stackexchange.com/tour), rather than a forum.
- 1
- 2020-07-22
- Ian Dunn
-
- 2012-07-17
Outre les avantages de sécurité,il vouspermet également degarder votreinstance WordPress sous contrôle de versiontouten conservant lesfichiers WordPress debaseen tant que sous-module/externe.C'est ainsi que Mark Jaquith amisen place sonprojet WordPress-Skeleton.Voir https://github.com/markjaquith/WordPress-Skeleton#assumptions pourplus de détails.
Apart from the security benefits, it also allows you to keep your WordPress instance under version control while keeping the core WordPress files as a submodule/external. This is how Mark Jaquith has setup his WordPress-Skeleton project. See https://github.com/markjaquith/WordPress-Skeleton#assumptions for details.
-
Il l'a configuré dans la racine du document,pasen dehors,donc cen'estpaspertinentpour cette question.Latechnique àpropos de laquelle la question aposé la question spécifie que vous déplacez `wp-config.php` un répertoire au-dessus * de la racine du document de l'hôte virtuel *,pas seulement un répertoire au-dessus du dossier d'installation de WordPress.Lebutest de le sortir du dossier quipeut être lupar les requêtes HTTP.He has it setup in the document root, not outside of it, so it's not relevant to this question. The technique that the question asked about specifies that you move `wp-config.php` one directory above *the vhost's document root*, not just one directory above the WordPress installation folder. The whole point is to get it outside of the folder that can be read by HTTP requests.
- 8
- 2012-07-17
- Ian Dunn
L'une desmeilleurespratiques de sécurité lesplus courantes denosjours semble être de déplacer
wp-config.php
un répertoireplus haut que la racine du document de l'hôte virtuel . Jen'aijamais vraimenttrouvé unebonneexplication à cela,maisje suppose que c'estpourminimiser le risque qu'un scriptmalveillant ouinfecté dans la racine Webne lise lemot depasse de labase de données.Mais,vous deveztoujours laisser WordPress y accéder,vous devez donc développer
open_basedir
pourinclure le répertoire au-dessus de la racine du document. Celane va-t-ilpas simplement à l'encontre de l'objectifentier,et expose-t-ilpotentiellement lesjournaux de serveur,les sauvegardes,etc. aux attaquants?Ouest-ce que latechniqueessaie seulement d'éviter une situation où
wp-config.php
serait affichéen textebrut àtoutepersonne demandanthttp://example.com/wp-config.php
,au lieu d'être analysépar lemoteur PHP? Cela semble être une occurrencetrès rare,et celane compenseraitpas lesinconvénients d'exposer lesjournaux/sauvegardes/etc aux requêtes HTTP.Peut-êtreest-ilpossible de le déplacer hors de la racine du document dans certaines configurations d'hébergement sansexposer d'autresfichiers,maispas dans d'autres configurations?
Conclusion: Aprèsbeaucoup de va-et-vient sur cette question,deux réponses ont émergé qui,àmon avis,devraient être considérées commefaisant autorité. Aaron Adamsprésente unbon dossier dans faveur de déplacer wp-config,et chrisguitarguyfait unebonne affaire à sonencontre . Ce sont les deux réponses que vous devriez lire si vous êtesnouveau dans lefilet que vousne voulezpas le lireen entier. Les autres réponses sont soit redondantes,soitinexactes.