Wp-config'i web kökünün dışına taşımak gerçekten yararlı mı?


135

Bugünlerde en yaygın kullanılan güvenlik en iyi uygulamalarından biri, vhost'un belge kökünden bir dizinden daha yukarı hareket ediyorwp-config.php gibi görünüyor . Bunun için hiçbir zaman iyi bir açıklama bulamadım, ancak webroot içindeki kötü amaçlı veya virüslü bir komut dosyasının veritabanı şifresini okuma riskini en aza indirdiğini varsayıyorum.

Ancak, WordPress'in erişmesine izin vermek zorundasınız, bu nedenle open_basedirdizini belge kökünün üstüne eklemek için genişletmeniz gerekiyor . Bu sadece tüm amacı bozmakla kalmıyor ve potansiyel olarak sunucu kayıtlarını, yedekleri vb. Saldırganlara da maruz bırakmıyor mu?

Veya teknik, yalnızca PHP motoru tarafından ayrıştırılmak yerine, wp-config.phpisteyen herkese düz metin olarak gösterilebilecek bir durumu önlemeye mi çalışıyor http://example.com/wp-config.php? Bu çok nadir görülen bir durum gibi gözüküyor ve günlükleri / yedekleri / etc'yi HTTP isteklerine maruz bırakmanın olumsuzluklarından ağır basmıyor.

Belki de bazı hosting kurulumlarında diğer dosyaları göstermeden doküman kökünün dışına taşımak mümkündür fakat diğer kurulumlarda bu mümkün değildir.


Sonuç: Bu konuda pek çok ileri geri döndükten sonra, yetkili olanlar olarak düşünülmesi gerektiğini düşündüğüm iki cevap ortaya çıkmıştır. Aaron Adams hareketli wp-config lehine iyi bir dava yapar ve chrisguitarguy buna karşı iyi bir dava yapar . Bu konuya yeniyseniz ve her şeyi okumak istemiyorsanız, okumanız gereken iki cevap. Diğer cevaplar gereksiz veya yanlış.


Seçtiğiniz cevapları doldurmanız ve diğer tüm cevapları reddetmeniz gerekmiyor. Aşağıda da görebileceğiniz gibi, yığın değişimli oylama sistemi, insanlar için anlamlı olan cevapları oylamak için kullanılır, oysa soru soranların "kabul edilen yanıt" mekanizmasını ve kendi yukarı / aşağı oylarınızı kullanmaları gerekir.
Kzqai

6
Bunu sorduğum soruların% 99'u için yapmıyorum, ancak bu özel durumda uygun olduğunu düşündüm. Bazıları oldukça uzun / karmaşık olan, bazıları ise yanlış bilgi içermesine veya konuşmaya herhangi bir şey eklememesine rağmen çok fazla oy hakkı olan soruya 8 cevap var. Bence yarı yetkili bir sonuç sunmak, ipliği ilk defa okuyan insanlara yardımcı oluyor. Her zaman olduğu gibi, okuyucular kendi kararlarını vermekte özgürdürler; Ben sadece OP olarak görüşümü sunuyorum.
Ian Dunn

1
@Kqqai: "yığın değiştirme oy sistemi" demokratik bir süreçtir ve katılımcılar genellikle 1) OP'nin gerçekte ne istediği veya çözmeye çalıştığı konusunda belirsizdir ve 2) herhangi bir özel cevabın geçerliliğini anlama. Yanıtlar kandırıldıktan ve oylar kullanıldıktan sonra, OP'nin yardım sağlayan yanıtları netleştirmesi yararlı olacaktır. Ne de olsa, OP bilen tek kişidir ve keşke daha fazla OP de yapsaydı. Evet, insanlar "insanlara mantıklı gelen cevapları oyluyorlar", ancak OP'nin kendisi için neyin mantıklı olduğu konusunda son sözü söyleyelim.
Mac,

Yanıtlar:


127

Kısa cevap: evet

Bu sorunun cevabı kesin bir evet , ve başka türlü söylemesi tamamen sorumsuz .


Uzun cevap: gerçek dünyadan bir örnek

wp-config.phpWeb kökünün dışına taşınmanın içeriğinin yakalanmasını özellikle engellediği gerçek sunucumdan gerçek bir örnek vermeme izin verin .

Böcek:

Plesk'deki bir hatanın bu açıklamasına bir göz atın (11.0.9 MU # 27'de düzeltildi):

Plesk, aboneliği barındırma planıyla eşitledikten sonra alt etki alanı iletmeyi sıfırladı (117199)

Kulağa zararsız geliyor, değil mi?

İşte bu hatayı tetiklemek için yaptıklarım:

  1. Başka bir URL'ye (örn yönlendirmek için bir alt kurma site.staging.server.comiçin site-staging.ssl.server.com).
  2. Aboneliğin servis planını değiştirdi (örneğin PHP yapılandırması).

Bunu yaptığımda, Plesk alt etki alanını varsayılanlara sıfırlar: ~/httpdocs/tercüman olmadan (örn. PHP) içerik sunma .

Ve farketmedim. Haftalarca.

Sonuç:

  • İle wp-config.phpWeb köküne bir istek için /wp-config.phpWordPress yapılandırma dosyasını indirilmiş olacaktı.
  • İle wp-config.phpweb kökü dışarıda bir istek için /wp-config.phptamamen zararsız dosyasını indirdim. Gerçek wp-config.phpdosya indirilemedi.

Bu nedenle, wp-config.phpweb kökünün dışına çıkmanın gerçek dünyada güvenlik açısından iyi bir avantaj sağladığı açıktır .


wp-config.phpSunucunuzdaki herhangi bir yere nasıl taşınır

WordPress, wp-config.phpdosyanız için WordPress kurulumunuzun üstünde bir dizine otomatik olarak bakacaktır , bu nedenle taşıdığınız yer o zaman biter!

Ama ya başka bir yere taşıdıysanız? Kolay. wp-config.phpAşağıdaki kodla WordPress dizininde yeni bir oluşturun :

<?php

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

/** Location of your WordPress configuration. */
require_once(ABSPATH . '../phpdocs/wp-config.php');

(Yukarıdaki yolu, taşınan wp-config.phpdosyanızın asıl yoluyla değiştirdiğinizden emin olun .)

Bir sorunla karşılaşırsanız open_basedir, open_basedirPHP yapılandırmanızdaki yönergenin yeni yolunu eklemeniz yeterlidir:

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

Bu kadar!


Aksine argümanları ayırmak

wp-config.phpWeb kökünün dışına taşınmaya karşı her argüman yanlış varsayımlara dayanır.

Bağımsız Değişken 1: PHP devre dışı bırakılmışsa, zaten

Birinin [ wp-config.php] içeriğini sunucuların PHP yorumlayıcısını atlatması durumunda görmesinin tek yolu … Eğer bu olursa zaten başınız belada demektir: Sunucunuza doğrudan erişimleri var.

YANLIŞ : Yukarıda tarif ettiğim senaryo, bir izinsiz giriş değil, yanlış yapılanmanın sonucudur.

Bağımsız Değişken 2: Yanlışlıkla PHP'yi devre dışı bırakmak nadirdir ve bu nedenle önemsizdir

Bir saldırgan PHP işleyicisini değiştirmek için yeterli erişime sahipse, çoktan batırdınız. Kazara değişiklikler benim deneyimimde çok nadirdir ve bu durumda şifreyi değiştirmek kolaylaşır.

YANLIŞ : Yukarıda tarif ettiğim senaryo, ortak bir sunucu yapılandırmasını etkileyen, ortak bir sunucu yazılımı parçasındaki bir hatanın sonucudur. Bu pek "nadir" (ve ayrıca güvenlik, nadir senaryo için endişelenmek anlamına gelir).

WTF : İzinsiz girişlerden sonra şifreyi değiştirmek, izinsiz giriş sırasında hassas bilgilerin toplanıp toplanmayacağı konusunda pek yardımcı olmaz. Gerçekten, biz hala WordPress'in yalnızca günlük bloglama için kullanıldığını ve saldırganların yalnızca tahrifatla ilgilendiğini düşünüyor muyuz? Sunucumuzu korumak konusunda endişelenelim, sadece birisi girdikten sonra geri yüklemekle kalmayacak.

Bağımsız Değişken 3: Erişimi reddetmek wp-config.phpyeterince iyi

Sanal ana bilgisayar konfigürasyonunuz yoluyla dosyaya erişimi kısıtlayabilir veya .htaccess- dosyaya dış erişimi etkin bir şekilde belge kökünün dışına taşınacak şekilde sınırlandırabilirsiniz.

YANLIŞ : Sanal bir ana bilgisayar için sunucu varsayılanlarınızın şu şekilde olduğunu hayal edin: PHP yok .htaccess, hayır , allow from all(üretim ortamında pek olağandışı değil). Yapılandırmanız rutin bir işlem sırasında bir şekilde sıfırlanırsa - örneğin panel güncellemesi gibi - her şey varsayılan durumuna dönecek ve siz açığa çıkacaksınız.

Ayarlar yanlışlıkla yanlışlıkla varsayılanlara sıfırlandığında güvenlik modeliniz başarısız olursa, daha fazla güvenlik gerekir.

WTF : Neden birisi özellikle daha az güvenlik katmanı önermektedir? Pahalı araçların sadece kilitleri yoktur; ayrıca alarmlara, immobilizerlere ve GPS izleyicilere sahiptir. Bir şey korumaya değerse, doğru yapın.

Tartışma 4: Yetkisiz erişim çok wp-config.phpönemli değil

Veri tabanı bilgileri gerçekten [ wp-config.php] içindeki tek hassas şeydir .

YANLIŞ : Kimlik doğrulama anahtarları ve tuzları, herhangi bir sayıda olası kaçırma saldırısında kullanılabilir.

WTF : Veritabanı kimlik bilgileri tek şey olsa bile wp-config.php, sen edilmelidir dehşete onlara ellerini sürebilmek bir saldırganın.

Bağımsız Değişken 5: wp-config.phpWeb kökünün dışına çıkmak bir sunucuyu daha az güvenli yapar

WordPress'in [ wp-config.php] erişimine izin vermeniz gerekir, bu nedenle open_basedirdizini belge kökünün üstüne eklemek için genişletmeniz gerekir .

YANLIŞ : Varsayının içeride wp-config.phpolduğunu httpdocs/, sadece hareket ettirin ../phpdocs/ve open_basedirsadece httpdocs/ve içerecek şekilde ayarlayın phpdocs/. Örneğin:

open_basedir = "/var/www/vhosts/example.com/httpdocs/;/var/www/vhosts/example.com/phpdocs/;/tmp/"

( Varsa /tmp/, her zaman veya kullanıcı tmp/dizininizi eklemeyi unutmayın .)


Sonuç: konfigürasyon dosyaları her zaman daima daima web kökünün dışında bulunmalıdır.

Güvenliği önemsiyorsanız wp-config.php, web kökünüzün dışına çıkacaksınız.


1
Eğer apache, linux veya admin beyninde bir hata varsa, her durumda bir tost. Senaryoda, yanlış bir konfigürasyonun web sitesinin kökünde ve daha sonra sunucuda başka bir yerde olmasının neden daha olası olduğunu açıklayamazsın. Yanlış yapılandırılmış bir apache muhtemelen /../config.php /config.php kadar kolay bir şekilde erişebilir
Mark Kaplun

1
"Her durumda tost" değilsin. Öyle çok muhtemel ve hatta kanıtlanabilir senin - bir hata siz "tost" değildir ve bu durumda, varsayılan web kök varlık sıfırlama, neden olacağını, wp-config.phpkalıntılar güvenli. Ve bu son derece olanaksız - esasen imkansız olacak kadar - bir hatanın web kökünün sizin yerleştirdiğiniz dizine tam olarak sıfırlanmasına neden olacağı anlamına geliyor wp-config.php.
Aaron Adams,

1
@IanDunn Aslında, wp-config.phprastgele bir yere taşımak kolaydır . Cevabım için yol tarifleri ekledim; sadece wp-config.phpWordPress dizininde gerçek olanın yerini belirten bir kukla oluşturmayı içerir .
Aaron Adams,

3
Bu cevap çok açık. Web barındırma şirketimde sürücü dizisi hatası oluştu. Her şey söylendi ve yapıldığı zaman sistemi tamamen PARTIAL olarak geri yüklediler. Yanlış yapılan httpd.conf dosyalarını yeniden oluşturmak için bir dizi cPanel / WHM komut dosyası kullandıkları ortaya çıktı. Neyse ki zaten doktor kökü dışında wp-config.php vardı, ama eğer içeriğe sahip olmasaydım almak için vardı. Evet, nadir, ancak belirtildiği gibi, nadir durumlar endişe etmeniz gereken şeydir. Ayrıca, "basit fikirli halkın kaybedileceğini" belirtmek, LESS güvenliğine sahip olmak için kötü bir bahanedir.
Lance Cleveland,

1
Bu iyi bir nokta Aaron. Bu ve diğer yorum başlığında bahsettiğim nedenlerden dolayı hala biraz şüpheciyim, ama beni ilk düşündüğümden daha fazla hak ettiğine ikna ettin. En azından, uygun şekilde yapılırsa, hiçbir şeye zarar vereceğini sanmıyorum. Hala, onu tanıtan çoğu insanın bunun nedenlerini anlayamadığı ve bunun öğretme şeklinin genellikle httpdocs'nin üzerinde maruz kaldığı dizine yol açacağı gerçeğiyle ilgili bir sorunum var, ancak bu konuların ele alınmasına yardımcı oldunuz. senin cevabın.
Ian Dunn,

40

En büyük şey wp-config.phpbazı hassas bilgiler içeriyor: veritabanı kullanıcı adınız / şifreniz, vs.

Yani fikir: onu belge kökünün dışına taşıyın ve hiçbir şey için endişelenmenize gerek yok. Saldırgan, bu dosyaya hiçbir zaman harici bir kaynaktan erişemez.

İşte ovmak, ancak: wp-config.phpaslında ekrana hiçbir şey yazdırmaz. Sadece WP kurulumunuzda kullanılan çeşitli sabitleri tanımlar. Böylece birileri bu dosyanın içeriğini görmek için tek yol, sunucularınızı PHP tercümanını aşarsa olur - .phpsadece düz metin olarak işlemek için dosya alırlar . Bu durumda, zaten başınız belada demektir: sunucunuza doğrudan erişimi var (ve muhtemelen kök izinleri var) ve ne isterlerse yapabilirler.

Devam edeceğim ve belge kökü dışına taşınmanın wp-configbir güvenlik perspektifinden faydalanamayacağını - yukarıda belirtilen nedenlerden dolayı söyleyeceğim :

  1. Dosyaya erişimi, sanal host config veya .htaccess üzerinden kısıtlayabilirsiniz - dosyaya dış erişimi etkin bir şekilde sınırlandırmak için, belge kökünün dışına taşınacak şekilde kısıtlayabilirsiniz.
  2. wp-configSSH üzerinden sunucunuza (sınırlı) erişim sağlasalar bile, dosyayı okuma hakkına sahip olmayan herhangi bir kullanıcının izin vermemesi için dosya izinlerinin sıkı olduğundan emin olabilirsiniz .
  3. Hassas bilgileriniz, veritabanı ayarları, yalnızca tek bir sitede kullanılır. Bir saldırgan bu bilgilere erişmiş olsa bile, etkileyeceği tek site wp-config.phpdosyanın ait olduğu WordPress kurulumu olacaktır . Daha da önemlisi, söz konusu veritabanı kullanıcısı yalnızca söz konusu WP kurulumunun veritabanını okuma ve yazma iznine sahiptir ve başka hiçbir şey yapmaz - diğer kullanıcılara izin verme yetkisi yoktur. Diğer bir deyişle, eğer bir saldırgan veritabanınıza erişirse, bu sadece bir yedekten geri yükleme meselesidir (4. maddeye bakınız) ve veri tabanı kullanıcısını değiştirme meselesi
  4. Sık sık yedekleme yapıyorsunuz. Genellikle göreceli bir terimdir: Her gün 20 makale gönderirseniz, her gün veya birkaç günde bir yedekleme yaparsanız daha iyi olur. Haftada bir kez posta gönderirseniz, haftada bir kez yedekleme yapmanız yeterlidir.
  5. Sitenizi sürüm kontrolü altında (buna benzer şekilde ) sahip olursunuz ; bu , bir saldırganın erişim sağlasa bile, kod değişikliklerini kolayca algılayabilir ve geri alabilirsiniz. Bir saldırganın erişimi varsa wp-config, muhtemelen başka bir şeyle uğraşıyorlardır.
  6. Veri tabanı bilgisi gerçekten hassas olan şey ve gerçekten wp-configdikkatli olduğunuz için (3. ve 4. maddelere bakınız), çok fazla bir şey değil. Tuzlar ve benzeri her zaman değiştirilebilir. Olan tek şey, kullanıcıların çerezlerinde oturum açtığını geçersiz kılmasıdır.

Bana wp-configgöre, belgeselden uzaklaşmak gizlilikten kaynaklanıyor - ki bu çok saman bir adam.


2
Evet, düşündüğüm şey buydu. Tek kişi olmadığını bildiğim için memnunum :) Birinin zorlayıcı bir karşı-argüman olması durumunda soruyu bir veya iki gün daha açık bırakmak istiyorum, ama şimdiye kadar bu doğru cevap gibi görünüyor ben mi.
Ian Dunn

3
Küçük düzeltme: wp-config.php dosyasını belge kökünün dışına taşımak için hiçbir güvenlik avantajı yoktur . Güvenlikle ilgili olmayan ve yalnızca olağandışı kurulumlar için geçerli olan başka avantajlar da vardır.
Otto

4
Sadece olası bir efsane sorundan kurtulmak için - bu mümkün değil, bir şey yanlış sunucu tarafında gidebilir - bu durumda php kodu ekrana yazdırılıyor?
Stephen Harris

3
@IanDunn Ancak, en iyi cevaplar, bu hiyerarşiden tamamen ayrı ayrı birine taşınmasını savunuyor, bu da günlükler vb. İle ilgili endişelerinizi ele alıyor. diğer güvenlik önlemleri faydalıdır ve güvenlik konusunda endişelenmemeniz konusunda sizi temin etmeye çalışır. Herkes soyulduktan sonra evlerinin güvende olduğunu düşünüyor. Ondan sonra daha iyi bir iş çıkarırlar. Bazı insanlar, güvenlikleri düşük olsa da asla soyulmuyor, ancak daha düşük güvenlikli olmanın iyi bir tavsiye olduğu anlamına gelmiyor.
AndrewC,

4
Bunlar iyi noktalar, ancak bunlarla ilgili en büyük sorunum, önleyici argümanlar değil, iyileştirici argümanlar olmaları. Bunların çoğu, bunun büyük bir mesele olmadığını, çünkü A) birisinin db kullanıcısını doğru ele aldığını ve B) yedeklerinin olduğunu varsayıyor. Ticari ticaret gibi bir şey kullanıyorsanız veya hassas bilgileri veritabanınıza kaydederken ne olur? O zaman sen battın.
Goldentoa11

25

Bence Max'in bilgili bir cevap olduğunu ve bu hikayenin bir tarafı olduğunu düşünüyorum. WordPress Codex daha tavsiye vardır :

Ayrıca, yalnızca sizin (ve web sunucusunun) bu dosyayı okuyabildiğinden emin olun (genellikle 400 veya 440 izni demektir).

.Htaccess olan bir sunucu kullanıyorsanız, onun için sörf yapan herhangi birisine erişimi engellemek için bu dosyaya (en üste) koyabilirsiniz:

<files wp-config.php>
order allow,deny
deny from all
</files>

Wp-config.php dosyasındaki 400 veya 440 izninin ayarlanmasının, eklentilerin yazmasını veya değiştirilmesini engelleyebileceğini unutmayın. Örneğin gerçek bir durum, eklentileri önbelleğe almak olacaktır (W3 Total Cache, WP Super Cache vb.) Bu durumda, 600 ile giderim ( /home/userdizindeki dosyalar için varsayılan izin ).


5
Max'in cevabı. Ona +1. Sadece onu genişletmeye çalışıyorum.
its_me

1
Aahan Krish, boğanın gözüne çarptın. Ekleme için teşekkürler.
Max Yudin,

Öyleyse, wp-config.php'ye yapılan HTTP isteklerini reddetmek için htaccess kullanıyorsanız, bu onu belge kökünün dışına taşımakla aynı sonucu elde etmiyor, ancak log / backup / etc göstermiyor mu?
Ian Dunn

4
@IanDunn Belge kökünün ne olduğuna bağlı olarak - (1) Wordpress bir dizinde barındırılıyorsa, dizinin dışına public_htmltaşınması wp-config.phpdizinde olacağı anlamına gelir public_html. Bu durumda, wp-config.php için HTTP isteklerini reddetmek için htaccess kurallarını kullanmanız gerekir. (2) WordPress doğrudan public_htmldizine kuruluysa , bir seviye yukarı => onu /home/userdizine taşıyacaksınız . Bu durumda, dosya belge kökünün dışında olduğu için oldukça güvendesiniz. Dosyanın izinlerini hala 600 (hatta daha katı 440 veya 400) olarak ayarlayabilirsiniz.
its_me

@IanDunn Söylediğim gibi, bu benim temel anlayışım ve güvenlik uzmanı değilim. :)
its_me

17

Biri bizden içeri girmemizi istedi, ben de cevaplayacağım.

Evet, wp-config.php dosyanızı sitenizin kök dizininden izole etmenin güvenlik yararları vardır.

1- PHP işleyiciniz bir şekilde bozulursa veya değiştirilirse, DB bilgileriniz gösterilmez. Ve evet, bunun sunucu güncellemeleri sırasında paylaşılan ana makinelerde birkaç kez olduğunu gördüm. Evet, site bu süre zarfında kırılacak, ancak şifreleriniz eksiksiz olacak.

2- En iyi uygulamalar daima yapılandırma dosyalarının veri dosyalarından izole edilmesini önerir. Evet, WordPress (veya herhangi bir web uygulaması) ile bunu yapmak zordur, ancak yukarı taşımak biraz tecrit yapar.

3- Herhangi birinin? -S dosyasını bir dosyaya geçirip kaynağı görüntüleyebileceği PHP-CGI güvenlik açığını unutmayın. http://www.kb.cert.org/vuls/id/520827

Sonunda, bunlar küçük ayrıntılardır, ancak riski en aza indirmeye yardımcı olurlar. Özellikle paylaşılan bir ortamdaysanız, herhangi birinin veritabanınıza erişebileceği bir yerdeyseniz (tek ihtiyaçları olan bir kullanıcı / şifredir).

Ancak küçük dikkat dağıtma işlemlerinin (erken optimizasyonlar) bir siteyi düzgün bir şekilde güvenli hale getirmek için gerçekten gerekli olanın önüne geçmesine izin vermeyin:

1- Her zaman güncel tutun

2- Güçlü şifreler kullanın

3- Erişimi kısıtla (izinler yoluyla). Burada bir yazımız var:

http://blog.sucuri.net/2012/08/wordpress-security-cutting-through-the-bs.html

Teşekkürler,


Hey millet, düşüncelerinizi eklediğiniz için teşekkürler. Bence zaten diğer cevaplarda ve yorumlarda bu noktaların çoğuna isabet ettik. 1) Evet, bu mümkün fakat nadirdir; 2) Evet, bunun faydaları var, ancak asgari düzeyde; 3) Evet, bu mümkün, ancak bu tür bir güvenlik açığı tekrar oluşması muhtemel değildir ve buna karşı korunmak bir tür kötüye oynamak ya da insanların havaalanlarında ayakkabılarını çıkartmalarını sağlamak gibi bir şey çünkü bir jackass onun içine bomba attı bir kere ayakkabı. Gelecekteki faydaları olması gerici ve olası değildir.
Ian Dunn

Çeşitli tartışmalarda, soru "Herhangi bir fayda var mı?" Dan rafine edildi. "Tamam, bazı faydalar var, ancak risklerden ağır basıyorlar mı?" Bahsettiğim ana risk PHP'nin web kökünün dışındaki komut dosyalarına erişmesine izin vermek için openbase_dir kapsamını genişletmeniz gerektiği gerçeğidir. Pek çok barındırma kurulumu - çok fazla Plesk kullananlar dahil - günlükleri, yedekleri, web kökünden izole edilmesi gereken özel FTP alanlarını, vb. Web kökünün üzerindeki dizinde depolar. Bu nedenle, bu dizine PHP erişimi vermek ciddi bir güvenlik açığı olabilir.
Ian Dunn

15

Kesinlikle evet.

Wp-config.php dosyasını genel dizinin dışına taşıdığınızda , php işleyicisi kötü amaçlı (ya da yanlışlıkla!) Değiştiğinde tarayıcı kullanarak okumayı önlersiniz.

DB giriş bilgilerinizin / şifrenizin okunması, sunucu bir topal yönetici hatası nedeniyle zorlukla bulaştığında mümkündür. Yöneticiden para cezası alın ve daha iyi ve daha güvenilir bir sunucu ana bilgisayarı elde edin. Buna rağmen daha pahalı olabilir.


4
Bir saldırgan PHP işleyicisini değiştirmek için yeterli erişime sahipse, çoktan batırdınız. Kazara değişiklikler benim deneyimimde çok nadirdir ve bu durumda şifreyi değiştirmek kolaylaşır. Bunların ışığında, genişletilmiş open_basedirkapsam nedeniyle günlükleri / yedekleri / vb. Gösterme riskinin hala değerli olduğunu düşünüyor musunuz?
Ian Dunn

1
Hayatımda hiç -rwxdaha yüksek dizinlere erişimi public_htmlyüzden aşina olmamış open_basedir. Günlüklerim ayrı bir dizinde, bu nedenle yedeklemeler var. Tüm paylaşılan ana bilgisayarların bu olduğunu düşünüyorum.
Max Yudin,

Ana bilgisayarlar çılgınca değişir; standart bir dizin yapısı yok. Plesk (paylaşılan ana bilgisayarlar için en popüler kontrol panellerinden biri) /var/www/vhosts/example.com/statistics/logs adresindeki günlükleri koyar ve belge kökü /var/www/vhosts/example.com/httpdocs şeklindedir. Wp-config.php dosyasını /var/www/vhosts/example.com/wp-config.php adresine taşımak, komut dosyalarının example.com dizininin tamamına erişimini gerektirir.
Ian Dunn

Merak etmeyin, etki alanının dizininde değilse, günlükleriniz ve yedeklemeleriniz nerede depolanır? Kontrol panelinden falan mı giriliyor?
Ian Dunn

1
Evet, kontrol panelinden.
Max Yudin

8

Sadece argüman uğruna, wp_config.php dosyanızı taşımanızın mutlaka yalnızca üst dizine taşımak zorunda olduğunuz anlamına gelmediğini açıklığa kavuşturmak istiyorum. Diyelim ki / root / html gibi bir yapınız var, burada html WP kurulumunu ve HTML içeriğinizi içerir. Wp_config.php dosyasını / root dizinine taşımak yerine, her ikisini de html dizininin dışında olan ve aynı zamanda sunucu kök dizininde olmayan / root / secure ... gibi bir yere taşıyabilirsiniz. Tabii ki, php'nin de bu güvenli klasörde çalışabildiğinden emin olmanız gerekir.

WP, / root / secure gibi bir kardeş klasöründe wp_config.php dosyasını arayacak şekilde yapılandırılamadığından ek bir adım atmanız gerekir. Wp_config.php dosyasını / root / html içinde bıraktım ve hassas kısımları kestim (veritabanı girişi, tuz, tablo öneki) ve bunları config.php adlı ayrı bir dosyaya taşıdım. Daha sonra, PHP includekomutunu wp_config.php dosyasına şu şekilde ekleyin :include('/home/content/path/to/root/secure/config.php');

Temel olarak kurulumumda yaptığım şey bu. Şimdi, yukarıdaki tartışmaya dayanarak, hala gerekli olup olmadığını ya da iyi bir fikir olup olmadığını değerlendiriyorum. Ancak sadece yukarıdaki yapılandırmanın mümkün olduğunu eklemek istedim. Yedeklemelerinizi ve diğer kök dosyalarınızı göstermez ve güvenli klasör kendi genel URL’si ile ayarlanmadıkça göz atılamaz.

Ayrıca, orada bir .htaccess dosyası oluşturarak güvenli klasöre erişimi sınırlayabilirsiniz:

order deny,allow
deny from all
allow from 127.0.0.1

Hey Michael, paylaştığın için teşekkürler. Yine de çalıştığını doğrulamak için gerçek bir ortamda denediniz mi? Bence open_basediryönerge bütün bir sürer ağacı erişmek amacıyla bu yüzden, /root/securegelen /root/html, ayarlamak zorunda kalacak open_basediriçin /root.
Ian Dunn

Senin fikrin işe yaraması için, sana kurulum dizin yapısı gibi gerekiyordu düşünüyorum /root/httpdocs/config/accessible, httpdocsvb günlükleri tutan, yedekleme; configtutan wp-config.phpve accessibleWordPress ve tüm içeriği tutar. Doküman kökünü yeniden eşlemek için vhost config komutunu vs. değiştirmelisiniz accessible. Yine de, varsayılan kurulumda wp-config'e yapılan HTTP isteklerini reddetmenin yararı göremiyorum.
Ian Dunn

1
Göre php.net/manual/en/ini.core.php#ini.open-basedir : "Windows altında noktalı virgülle dizinleri ayırmak tüm diğer sistemlerde, iki nokta üst üste ile dizinleri ayırmak Apache modülü olarak,.. Üst dizinlerden open_basedir yolları şimdi otomatik olarak miras alınır. " Böylece birden fazla dizin ayarlayabilirsiniz, tek bir ağaçta olmalarına gerek kalmaz.
Michael,

Sadece test ettim ve haklı gibi görünüyorsun. Yine de, bunun Apache üzerinden dosyaya erişimi reddetmesinden ötürü hangi güvenlik avantajının sağlandığından hala emin değilim.
Ian Dunn

@IanDunn, Aaron Adams'ın cevabını iyi ele aldı
AndrewC

4

Atatcker'ların kod enjekte etmelerini sağlayan çok sayıda kötü yazılı tema ve eklenti var (Timthumb ile güvenlik konusunu unutmayın). Saldırgan olsaydım, neden wp-config.php'yi aramalıyım? Basitçe bu kodu enjekte edin:

var_dump( DB_NAME, DB_USER, DB_PASSWORD );

Wp-config.php dosyanızı gizlemeyi deneyebilirsiniz. WordPress tüm hassas bilgileri küresel olarak erişilebilir hale getirdiği sürece, wp-config.php dosyasını gizlemenin bir faydası yoktur.

Wp-config.php dosyasındaki kötü kısım, hassas verileri tutmamasıdır. Kötü olan kısım, hassas verileri global erişilebilir bir sabit olarak tanımlamaktır.

Güncelleme

Sorunları define()ve hassas verileri küresel bir sabit olarak tanımlamanın neden kötü bir fikir olduğunu açıklamak istiyorum.

Bir web sitesine saldırmanın birçok yolu vardır. Komut dosyası enjeksiyonu, bir web sitesine saldırmanın tek yoludur.

Sunucunun, bir saldırganın bellek dökümüne erişmesine izin veren bir güvenlik açığı olduğunu varsayalım. Saldırgan, bellekte tüm değişkenlerin tüm değerlerini bulur. Genel erişilebilir bir sabit tanımlarsanız, komut dosyası sona erene kadar bellekte kalması gerekir. Sabit yerine bir değişken oluşturmak için, çöp toplayıcısının değişkenin artık gerekmediğinden sonra belleğin üzerine yazma (ya da serbest bırakma) olasılığı yüksektir.

Hassas verileri korumanın daha iyi bir yolu, kullandıktan hemen sonra bunları silmektir:

$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;

Hassas verileri kullandıktan sonra, atama null, bellekteki verilerin üzerine yazacaktır. Saldırganın $db_con, hassas verileri içerdiği anda bellek dökülmesini alması gerekir . Ve yukarıdaki örnekte çok kısa bir süre var (eğer Database_Handler sınıfı bunun bir kopyasını kaydetmiyorsa).


Bu cevap doğrudan soruya cevap vermiyor. Herhangi bir eklenti yazarı, sizi kodlarını yüklemeye ikna ettikleri ve kötü niyetli niyetli oldukları konusunda WordPress ile bir güne sahip olabilir. Sisteminize isteyerek virüs yüklemekten farklı değildir. Wp-config.php 'nin hareket etmemesi için bu argüman anlamsızdır. Bu, arabaya isteyerek bir araba bomba yerleştirmenin araba alarmını ayarlamanın yararsız hale getirdiğini söylemek gibidir. Teknik olarak doğru ama WTF?!?
Lance Cleveland,

2
Hayır, anlamsız değil. Soru şudur: wp-config.php dosyasını gizleyerek veritabanı hesabını koruyabilir miyim? Cevap açık: Hayır. 'Arabamı araba bombalarına karşı bir araba alarmıyla koruyabilir miyim?' Wp-config'inizi veritabanı erişimini veya ftp erişimini korumaktan gizleyerek başka bir faydası yoktur. Her ikisi de küresel kapsamda. Saldırganların, kodları enjekte etmeden genel değişkenlere erişebilmelerinin daha fazla yolu olduğuna eminim.
Ralf912

Orijinal soruda "wp-config.php dosyasını gizleyerek veritabanı hesabını koruyabilir miyim?" Görmüyorum. Asıl soru "wp-config.php dosyasını taşımak mantıklı geliyor" idi. Cevap kesinlikle evet IMO. Dışarı çıkarken ön kapınızı kilitlemeniz gerekip gerekmediğini sormak gibidir. "Birisi kolayca bir pencereyi kırabilir ve yine de içeri girebilir, bu yüzden neden rahatsız" diyerek sorunun asıl amacı cevaplanmıyor. IMO, sorulan soru şuydu: "wp-config.php dosyasını taşımak ekstra bir çabaya değer mi? Evet. En azından tembel bilgisayar korsanlarının dışında tutuyor.
Lance Cleveland,

2
En yaygın güvenlik en iyi uygulamalarından biri ... Çok (çok, çok) önemli bir noktayı kaçırdınız: Bir saldırganın ilgisini çeken şey nedir? Ve öyle değil size wp-config.php tarz nasıl. Bir saldırgan, wp-config'de tanımladığınız değerlere girmiştir. Örneğinizi ön kapıyla kapma: wp-config'inizi gizlemek, ön kapınızı kilitleyeceğiniz gibi aynıdır, ancak tüm altınlarınızı bahçede korumasız olarak saklayın. Wp-config'de tanımlanan tüm değerler genel olarak tanımlanmıştır. Böylece hepsine wp-config dışında erişilebilir. Wp-config'inizi gizleseniz bile, değerler hala mevcuttur.
Ralf912

1
Taşımaktan yana olanların, ana bilgisayarda çalışan diğer PHP kodlarına maruz kalabileceği senaryolardan ziyade wp-config.php'nin düz metin olarak bir HTTP isteği yoluyla görüntülenebileceği senaryolara karşı korumaya çalıştığını düşünüyorum.
Ian Dunn

-1

Güvenlik avantajlarından ayrı olarak, aynı zamanda WordPress dosyalarını alt modül / harici olarak tutarken WordPress örneğinizi sürüm kontrolü altında tutmanıza izin verir. Mark Jaquith, WordPress-Skeleton projesini böyle ayarlamıştır. Ayrıntılar için https://github.com/markjaquith/WordPress-Skeleton#assumptions adresini ziyaret edin.


8
Doküman kökünde kuruyor, dışında değil, bu yüzden bu soru ile ilgili değil. Sorunun sorduğu teknik, yalnızca bir dizini WordPress kurulum klasörünün üstünde değil , vhost'un belge kökününwp-config.php üstüne taşıdığınızı belirtir . Bütün mesele onu HTTP istekleri tarafından okunabilecek klasörün dışına çıkarmak.
Ian Dunn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.