Manual:Security/tr


 * MediaWiki'de veya Wikimedia'nın web sitelerinden birinde bir güvenlik sorunu bulduğunuza inanıyorsanız, bir hata düzeltme sürümü hazırlayabilmemiz için iletişim bilgileri için sayfasına bakın.



Güncel kalın
Atabileceğiniz en önemli güvenlik adımı, yazılımınızı güncel tutmaktır. Hem MediaWiki hem de bağlı olduğu yazılım, zaman zaman sizi etkileyebilecek yeni keşfedilen güvenlik açıklarını düzelten yeni sürümler üretecektir.

MediaWiki geliştiricileri, MediaWiki çalıştıran herkesin mediawiki-announce posta listesine abone olmasını şiddetle tavsiye eder. Bu, yalnızca yeni sürüm duyurularını gönderen düşük trafikli bir listedir.

MediaWiki'nin sürüm yaşam döngüsü uyarınca, her sürüm bir yıllık güvenlik güncellemelerini alacaktır. Daha eski sürümler, bilinen ancak yamalanmamış güvenlik açıkları içerebilir.

Ayrıca Apache, PHP, MySQL/ MariaDB ve sunucularınızda çalışan diğer yazılımlar hem işletim sistemi hem de diğer web uygulamaları için güncellemeleri takip etmeyi unutmayın.

Birkaç kişinin MediaWiki 1.3.x yüklemeleri 2004 Sonbaharında phpBB'deki bir kusura saldıran bir solucandan etkilendi; diğer istemcilerin yamalanmamış phpBB sitelerine girdikten sonra, MediaWiki 1.3'ün kullandığı derlenmiş şablonlar da dahil olmak üzere sistemdeki diğer yazılabilir .php dosyalarına bir "hacklendiniz" mesajı ekledi.

Kullandığınız uzantılara dikkat edin
MediaWiki için çok çeşitli uzantılar mevcuttur. Ne yazık ki bu uzantılar aynı zamanda çok çeşitli kalite seviyelerine sahiptir. MediaWiki ile düşük kaliteli bir uzantı kullanmak, MediaWiki için güvenlik sorunlarının en yaygın nedenlerinden biridir.

Bir uzantıyı kullanmaya karar vermeden önce, uzantı üzerinde temel bir araştırma yapmalısınız. MediaWiki geliştirme topluluğunun önde gelen üyeleri tarafından yapılan uzantılar genellikle oldukça güvenlidir. Benzer şekilde, Wikimedia Vakfı tarafından işletilen bir vikide kullanılan herhangi bir uzantı muhtemelen dikkatlice incelenmiştir ve muhtemelen güvenlidir (Elbette hiçbir garantisi yoktur). Bununla birlikte, GitHub'da uzun yıllardır dokunulmamış ve web geliştirme konusunda az deneyimi olan biri tarafından geliştirilmiş bir uzantı bulursanız, muhtemelen oldukça yüksek risklidir.

Günün sonunda, bir uzantı yüklemenin güvenlik riskini, başka herhangi bir yazılım parçasını yüklemenin güvenlik riskini değerlendirdiğiniz şekilde değerlendirmelisiniz.

Uzantıların da diğer herhangi bir yazılım parçası gibi güncel tutulması gerekir. MediaWiki ile birlikte gelen uzantıların, mediawiki duyurusu posta listesine yapılan güvenlik duyuruları vardır, ancak diğer uzantılar yoktur. Bazı uzantılar, ancak kesinlikle tüm uzantılar, mediawiki-l posta listesindeki güvenlik sorunlarını bildirmez.

Dosya izinleri
MediaWiki kurulumunuzun güvenliğini sağlamaya yardımcı olmak için yapabileceğiniz önemli şeylerden biri, php olarak çalıştırdığınız kullanıcının (debian kullanıyorsanız genellikle www-data) ve mysql olarak çalıştırdığınız kullanıcının hiçbirine php etkinleştirilmiş web erişilebilir dizini yazma erişimine sahip olmadığından emin olmaktır.

Unix benzeri sistemlerde bunu, mediawiki dizininin/dosyalarının web sunucusu kullanıcınız (www-data) veya mysql sunucusu kullanıcınız dışında başka birine ait olmasını sağlayarak yapabilirsiniz. MediaWiki'yi nasıl kurduğunuza bağlı olarak bu durum zaten olabilir, ancak eğer kullanıcı adı web sunucusu veya mysql kullanıcısı dışında bir kullanıcı olduğunda  yaparak gerçekleştirilemez (genellikle mysql ve php olarak sağlanan kendi kullanıcı adınızı kullanırsınız) kullanıcı adınız olarak çalışmıyor. Bu adımı uyguladıktan sonra, yüklenen dosyaların oraya gitmesi gerektiğinden, resim dizininin sahibini tekrar php kullanıcısı olarak değiştirmeniz gerekebilir, bu nedenle MediaWiki'nin oraya yazabilmesi gerekir (örn. ). Daha sonra, dosya sahiplerinin yanı sıra diğer tüm kullanıcıların yazma erişimini kaldırmak için  ile çalıştırırsınız. Bu adımı uyguladıktan sonra, resimler dizinine yazma erişimini yeniden etkinleştirmeniz gerekebilir.

MediaWiki'nin yazma erişimine ihtiyaç duyduğu dizinler (bu özellik etkinleştirilmişse $wgCacheDirectory gibi) web kökünün dışında yer almalıdır. Bunun istisnası, web kökünde olması gereken resimler dizinidir. Ancak, resimler dizininde php'yi devre dışı bırakmak önemlidir. Bunun nasıl yapılacağına ilişkin ayrıntılar web sunucusuna göre değişir, ancak Apache'de bazen bir .htaccess dosyasında  kullanılarak gerçekleştirilebilir. Bunu images dizininin içindeki bir yapılandırma dosyası aracılığıyla gerçekleştirirseniz, yapılandırma dosyasının web sunucusu tarafından yazılabilir olmadığından emin olmalısınız. Daha fazla ayrıntı için yükleme güvenliği ile ilgili aşağıdaki bölüme bakın.

LocalSettings.php dosyanız php kullanıcısı tarafından okunabilir olmalıdır, ancak diğer işlemlerin veritabanı parolanızı ve diğer hassas bilgileri keşfetmesini önlemek için herkes tarafından okunabilir olmamalıdır. Tüm MediaWiki dosyaları gibi, php kullanıcısı LocalSettings.php ile yazamamalıdır.

TLS
Firesheep tarzı saldırılara ve genel gizlilik sızıntılarına karşı korunmak için, sitenizi TLS (HTTPS) kullanarak barındırmanız önerilir. TLS'yi kurma kılavuzu bu belgenin kapsamı dışındadır, ancak letsencrypt.org ücretsiz sertifikalar sağladığından, bunun artık çok daha ucuz olduğu unutulmamalıdır.

TLS'yi kurarsanız, TLS'yi yanlışlıkla yanlış yapılandırmak kolay olduğundan, düzgün kurulduğundan emin olmak için sitenizi ssllabs.com/ssltest/ ile test etmeniz önemlidir.

TLS'yi etkinleştirirseniz, web sunucunuzu  başlığını gönderecek şekilde yapılandırmak isteyebilirsiniz. Bu, web sitenizin gizli dinleyicilere karşı güvenliğini biraz artıracaktır, ancak dezavantajı, belirli bir süre için TLS'yi kullanmayı bırakmaya karar veremeyeceğiniz anlamına gelir.

Genel PHP önerileri

 * Lütfen OWASP PHP Güvenlik Hile Sayfasına bakın

Bu tavsiyeler hemen hemen tüm PHP ortamları için geçerlidir ve mutlaka MediaWiki'ye özgü değildir.

PHP yapılandırma önerileri, için veya başka şekilde ayarlayın:


 * devre dışı bırakın.
 * Çoğu PHP güvenlik saldırısı, küresel değişken değerlerin enjeksiyonuna dayanır, bu nedenle, kapalı olduğundan emin olmak birçok potansiyel güvenlik açığını dişsiz hale getirebilir.
 * Başka bir web uygulaması için  ihtiyaç duyuyorsanız, bunu yalnızca sanal konak veya onu gerektiren alt dizin için seçerek etkinleştirmeyi düşünün.
 * Bu açık olsa bile MediaWiki güvenli olmalıdır; bunu kapatmak, bilinmeyen güvenlik açıkları olasılığına karşı bir önlemdir.
 * Özellikle gerekmedikçe,  devre dışı bırakın.
 * Uzaktan PHP kodu yürütme güvenlik açıkları, bir URL'yi bir  veya   içine enjekte edebilmeye bağlı olabilir. Uzaktan dosya yüklemeye ihtiyaç duymuyorsanız, bunu kapatmak, savunmasız koda bu tür saldırıları önleyebilir.
 * MediaWiki, Lucene arama uzantısı, OAI biçerdöver uzantısı, TitleBlacklist uzantısı ve 1.5'teki Special:Import sayfasını belirli kullanımları için bu ayarın açık olmasını gerektirebilir. Bununla birlikte, tipik bir kurulumda gerekli olmamalıdır.
 * Bu açık olsa bile MediaWiki güvenli olmalıdır; bunu kapatmak, bilinmeyen güvenlik açığı olasılığına karşı bir önlemdir.
 * kapatın.
 * Bu açıksa, çerezler işlevini yerine getirmiyorsa bazen URL'lere oturum kimlikleri eklenebilir. Bu, oturum açma verilerini yönlendiren verileri veya bağlantıları kesip yapıştırarak üçüncü taraf sitelere sızdırabilir.
 * Açıksa bunu her zaman kapatmalısınız.

Örneğin php.ini içinde bu satırı görüyorsanız:

register_globals = On

Şununla değiştirin:

register_globals = Off

Alternatif olarak, register_globals ile dizin bazında kapatmak için bu apache yönergesini ekleyebilirsiniz:

php_flag register_globals off

Sonra değişiklikleri  veya   (SuSE) yeniden yüklemek için Apache'yi yeniden başlatın.

PHP'nin Apache modülü olarak kurulu olduğu çok kullanıcılı bir sistemde, tüm kullanıcıların betikleri aynı ayrıcalıklı kullanıcı hesabı altında çalışacaktır. Bu, diğer kullanıcılara yapılandırma dosyalarınızı (veritabanı parolaları dahil) okuma, oturum açma verilerinizi okuma ve değiştirme veya yükleme dizininize (etkinleştirilmişse) dosya yazma erişimi verebilir.

Çok kullanıcılı güvenlik için, her kullanıcının komut dosyalarının kendi hesapları altında çalıştığı bir CGI/FastCGI yapılandırması kullanmayı düşünün.

Genel MySQL ve MariaDB önerileri
Genel olarak, MySQL veya MariaDB veritabanınıza erişimi minimumda tutmalısınız. Yalnızca üzerinde çalıştığı tek makineden kullanılacaksa, ağ desteğini devre dışı bırakmayı veya yalnızca yerel ağ erişimini etkinleştirmeyi düşünün (geri döngü aygıtı üzerinden, aşağıya bakın), böylece sunucu yalnızca Unix etki alanı soketleri üzerinden yerel istemcilerle iletişim kurabilir.

Sınırlı sayıda istemci makineye sahip bir ağ üzerinden kullanılacaksa, IP güvenlik duvarı kurallarını, yalnızca bu makinelerden veya yalnızca yerel alt ağınızdan 3306 numaralı TCP bağlantı noktasına (MySQL/MariaDB bağlantı noktası) erişimi kabul edecek şekilde ayarlamayı ve daha büyük internetten tüm erişimleri reddetmeyi düşünün. Bu, veritabanı sunucusundaki bazı bilinmeyen kusurlar, yanlışlıkla aşırı geniş GRANT veya sızdırılmış bir parola nedeniyle sunucunuza erişimin yanlışlıkla açılmasını önlemeye yardımcı olabilir.

MediaWiki yükleyicisi üzerinden MediaWiki için yeni bir MySQL/MariaDB kullanıcısı oluşturursanız, yerel sunucunun yanı sıra ikinci bir sunucudan da çalışmasını sağlamak için ona biraz liberal erişim verilir. Bunu manüel olarak daraltmayı veya yalnızca ihtiyacınız olan yerlerden özel izinlerle kullanıcı hesabını kendiniz oluşturmayı düşünebilirsiniz. Veritabanı kullanıcısının yalnızca veritabanı için SELECT, INSERT, UPDATE ve DELETE izinlerine sahip olması gerekir.

Özellikle, FILE ayrıcalığı, güvenlik sorunlarının yaygın bir nedenidir. MySQL/MariaDB kullanıcısının bu ayrıcalığa veya "sunucu yönetimi" ayrıcalıklarından herhangi birine sahip olmadığından emin olmalısınız.

MediaWiki veritabanındaki  tablosunun karma kullanıcı parolaları içerdiğini ve kullanıcı e-posta adresleri içerebileceğini ve genellikle özel veri olarak kabul edilmesi gerektiğini unutmayın.

Bakım betikleri
Bakım betikleri için, daha fazla haklara sahip bir DB-admin-user oluşturmak isteyebilirsiniz. Bunun için, o hesabın veritabanı kimlik bilgileriyle aşağıdaki değişkenleri ayarlayın:



Gerekli MySQL/MariaDB haklarıyla ilgili ayrıntılar için Manual:Bakım betikleri#Yapılandırma bölümüne bakın.

MediaWiki yükseltmesi
Yükseltme sırasında daha fazla MySQL/MariaDB hakkı gerekebilir.

MySQL ve MariaDB hakkında daha fazla bilgi

 * mysql command-line options.
 * my.ini dosyanızda ( bölümü altında)   ayarlanması, MySQL/MariaDB'nin yalnızca geri döngü arayüzünü dinlemesine neden olur. Bu, Windows için EasyPHP kurulumunda varsayılandır. (Bir Unix makinesinde MySQL/MariaDB kullanıyorsanız, ayar my.cnf dosyası yerine   olabilir.)
 * GRANT ve REVOKE sözdizimi

MySQL veya MariaDB veritabanı sızdırılmışsa
Veritabanı halka sızdırılmışsa, LocalSettings.php cinsinden:


 * 1) $WgDBpassword o da sızdırılmışsa değiştirin
 * 2)  içindeki bazı harfleri değiştirin
 * 3) user_token sütunu kullanıcı tablonuzda kullanıcılarınızın kimliğine bürünmek ve kullanılamaması için sıfırlayın

LocalSettings.php sızdırılmışsa
LocalSettings.php herkese sızdırılmışsa, yeniden koruyun ve:


 * 1)  değiştirin
 * 2)  ile rastgele farklı bir harf ve sayı dizisiyle değiştirin
 * 3) Farklı bir  oluşturun (isteğe bağlı)
 * 4) Kullanıcı tablonuzdaki user_token sütununu, herhangi bir kullanıcının kimliğine bürünmek için kullanılmaması için sıfırlayın

Veritabanı parolaları
MySQL/MariaDB parolarının web'de sunulma riskini azaltmak için almak isteyebileceğiniz bazı önlemler için sayfasına bakın.

Alternatif dosya düzeni
MediaWiki, dağıtım arşivinden çıkarıldıktan sonra yerinde çalışacak şekilde tasarlanmıştır. Bu yaklaşım kullanışlıdır, ancak güvenliğin azalmasına veya gereksiz yere kopyalanan dosyalara neden olabilir.

Çeşitli dosyaları manüel olarak yeniden konumlandırarak veya birleştirerek toplu kurulumda yinelemelerden kaçınırsınız veya hassas dosyaları güvenlik için web kökünün dışında tutabilirsiniz.

Ana içerme ve görünüm dosyalarını taşımak,  dosyanızdaki   kümesini dikkatlice seçip değiştirmeyi gerektirebilir. Bununla istediğiniz gibi deney yapın.

Güvenliği artırmak için çalışıyorsanız,  dosyasının mevcut dizini temel olarak kullandığını unutmayın. Bu, yalnızca  ayarınızın kurulumunuzun güvenliğini artırmaya yardımcı olamayacağı anlamına gelir.

Hassas bilgileri taşıma
Veritabanı parolasını veya diğer potansiyel olarak hassas verileri  üzerinden web belgesi kökünün dışında bulunan başka bir dosyaya taşımayı ve bu dosyayı   üzerinden dahil etmeyi düşünün (  üzerinden). Bu, bir web sunucusu yapılandırma hatası PHP'nin yürütülmesini devre dışı bırakır ve dosyanın kaynak metnini ortaya çıkarırsa veritabanı parolanızın tehlikeye atılmamasını sağlamaya yardımcı olabilir.

Benzer şekilde,  ile bazı metin düzenleyicilerle düzenlemek, aynı dizinde değiştirilmiş bir dosya uzantısına sahip bir yedekleme dosyası bırakarak, biri   isterse kopyanın düz metin olarak sunulmasına neden olur. Böyle bir düzenleyici kullanıyorsanız, yedekleme oluşturmayı devre dışı bıraktığınızdan veya hassas verileri web kökü dışına taşıdığınızdan emin olun.

Hata ayıklama için kullanılan bir MediaWiki hata ayıklama günlük dosyası hassas veriler de içerir. Yetkili olmayan kişilerin ve halkın erişimine her zaman izin verdiğinizden emin olun, ihtiyaç duyulmadığında bu tür günlük dosyalarının kalıntılarını silin ve  dosyanızdaki günlük dosyası satırlarını yorumlayın veya temizleyin.

DocumentRoot'u /dev/null olarak ayarlayın
Apache Web Sunucusu için daha güvenli bir seçenek,  ile boş veya var olmayan bir dizine ayarlamak ve ardından Apache yapılandırmasında   yönergelerini kullanarak yalnızca gereken komut dosyalarını ve dizinleri açığa çıkarmaktır. Web'den erişilebilir olmalıdır.

Yükleyici betikleri
A PHP-only solution that will work with any web server is to write a series of scripts that explicitly  to a specific directory and then require one or more source files. For example:

User security
Anyone able to edit the user-interface system messages in the MediaWiki: namespace can introduce arbitrary HTML and JavaScript code into page output. This includes wiki users who have the editinterface permission, as well as anyone with direct write access to the text table in the database.

HTML is disabled on many system messages, particularly those displayed at the login screen, so the risk of password-snarfing JavaScript should be minimal. Malicious code could still attempt to exploit browser vulnerabilities (install spyware, etc), though, so, you should make sure that only trusted people can modify system messages.

Upload security

 * See also:

The main concern is: How do we prevent users from uploading malicious files?

File uploads are an optional feature of MediaWiki and are disabled by default. If you enable them, you also need to provide a directory in the web root which is writable by the web server user.

This has several implications for security:

If at all possible, make the directory writable only by the web server's account, don't make the directory world-writable.
 * The directory may have to be world-writable, or else owned by the web server's limited user account. On a multiuser system it may be possible for other local users to slip malicious files into your upload directory (see multiuser notes above).
 * While PHP's configuration sets a file size limit on individual uploads, MediaWiki doesn't set any limit on total uploads. A malicious (or overzealous) visitor could fill up a disk partition by uploading a lot of files.
 * Generated thumbnails and uploaded files held for overwrite confirmation may be kept in images/thumb and images/tmp without visible notice in the MediaWiki web interface. Keep an eye on their sizes as well.

The default configuration makes an attempt to limit the types of files which can be uploaded for safety:


 * By default, file extensions .png, .gif, .jpg, .jpeg and webp are white listed.
 * Various executable and script extensions are explicitly blacklisted even if you allow users to override the whitelist.
 * Several known image file extensions have their types verified using PHP's function.
 * Uploaded files are checked to see if they could trip file type detection bugs in Internet Explorer and Safari which might cause them to display as HTML.

As a precaution, you should explicitly disable server-side execution of PHP scripts (and any other scripting types you may have) in the uploads directory (by default, ).

For instance, an Apache .conf file fragment to do this if your MediaWiki instance is in /Library/MediaWiki/web might look something like:

If you don't have access to apache configuration files, but you can use .htaccess files to override configuration settings on specific directories, you can put an .htaccess file on the upload directory that looks like this:

Your exact configuration may vary. In particular, the use of options may complicate handling of uploads.

 Disable PHP solution for Nginx:  http://serverfault.com/a/585559/162909

For best security, you should also consider using a separate domain for uploaded files. For full security it is best to have uploads served from an entirely separate domain, not a subdomain, but even a subdomain will provide additional security. This is especially important if you allow uploading SVG files since that file format is so similar to HTML. MediaWiki checks SVG uploads for security, but it is best to have multiple layers of defense. See for configuring a different domain to serve media files.

External programs

 * may be executed for edit conflict merging.
 * If ImageMagick support for thumbnails or SVG images is enabled,  may be run on uploaded files.
 * If enabled, Math extension will call  executable, which calls ,  , and   (which calls  ).