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

 *  Please refer to the OWASP PHP Security Cheat Sheet 

These bits of advice go for pretty much any PHP environment, and are not necessarily specific to MediaWiki.

PHP configuration recommendations, for or set otherwise:


 * Disable.
 * Many PHP security attacks are based on injection of global variable values, so making sure it's off can make many potential vulnerabilities toothless.
 * If you require  for another web application, consider enabling it selectively, only for the virtual host or subdirectory that requires it.
 * MediaWiki should be safe even if this is on; turning this off is a precaution against the possibility of unknown vulnerabilities.
 * Unless you require it specifically, disable.
 * Remote PHP code execution vulnerabilities may depend on being able to inject a URL into a  or  . If you don't require the use of remote file loading, turning this off can prevent attacks of this kind on vulnerable code.
 * MediaWiki may require this setting to be on for the Lucene search extension, the OAI harvester extension, the TitleBlacklist extension, and certain uses of Special:Import in 1.5. It should not however be required in a typical installation.
 * MediaWiki should be safe even if this is on; turning this off is a precaution against the possibility of unknown vulnerability.
 * Set  off.
 * If this is on, session IDs may be added to URLs sometimes if cookies aren't doing their thing. That can leak login session data to third-party sites through referrer data or cut-and-paste of links.
 * You should always turn this off if it's on.

For instance if you see this line in php.ini:

register_globals = On

Change it to:

register_globals = Off

Alternatively, you could add this apache directive to turn off register_globals on a per-directory basis:

php_flag register_globals off

Then restart Apache to reload the changes by  or   (SuSE).

On a multiuser system with PHP installed as an Apache module, all users' scripts will run under the same reduced-privilege user account. This may give other users access to read your configuration files (including database passwords), read and modify your login session data, or write files into your upload directory (if enabled).

For multiuser security, consider using a CGI/FastCGI configuration in which each user's scripts run under their own account.

General MySQL and MariaDB recommendations
In general, you should keep access to your MySQL or MariaDB database to a minimum. If it will only be used from the single machine it's running on, consider disabling networking support, or enabling local networking access only (via the loopback device, see below), so the server can only communicate with local clients over Unix domain sockets.

If it will be used over a network with a limited number of client machines, consider setting the IP firewall rules to accept access to TCP port 3306 (MySQL/MariaDB's port) only from those machines or only from your local subnet, and reject all accesses from the larger internet. This can help prevent accidentally opening access to your server due to some unknown flaw in the database server, a mistakenly set overly broad GRANT, or a leaked password.

If you create a new MySQL/MariaDB user for MediaWiki through MediaWiki's installer, somewhat liberal access is granted to it to ensure that it will work from a second server as well as a local one. You might consider manually narrowing this or establishing the user account yourself with custom permissions from just the places you need. The database user only needs to have SELECT, INSERT, UPDATE and DELETE permissions for the database.

In particular, the FILE privilege is a common cause of security issues. You should ensure that the MySQL/MariaDB user does not have this privilege or any of the "server administration" privileges.

Note that the  table in MediaWiki's database contains hashed user passwords and may contain user email addresses, and should generally be considered private data.

Maintenance scripts
For the maintenance scripts, you might want to create a DB-admin-user with more rights. For this, set the following variables with the database credentials of that account:



See Manual:Maintenance scripts#Configuration for details on the needed MySQL/MariaDB rights.

Upgrade of MediaWiki
During upgrade, more MySQL/MariaDB rights might be needed.

More about MySQL and MariaDB

 * mysql command-line options.
 * Setting  in your my.ini (under section  ) will cause MySQL/MariaDB to only listen on the loopback interface. This is the default in the EasyPHP install for Windows. (If you are using MySQL/MariaDB on a Unix machine, the setting may be   instead in the my.cnf file.)
 * GRANT and REVOKE syntax

If the MySQL or MariaDB database has leaked
If the database has leaked to the public, in LocalSettings.php:


 * 1) Change  if that leaked too
 * 2) Change some letters in
 * 3) Reset the user_token column in your user table so that it can't be used to impersonate your users

If LocalSettings.php has leaked
If LocalSettings.php has leaked to the public, reprotect it and:


 * 1) Change
 * 2) Replace  with a different random string of letters and numbers
 * 3) Make a different  (optional)
 * 4) Reset the user_token column in your user table so that it can't be used to impersonate any users

Database passwords
See for some precautions you may wish to take to reduce the risk of MySQL/MariaDB passwords being presented to the web.

Alternate file layout
MediaWiki is designed to run in-place after being extracted from the distribution archive. This approach is convenient, but can result in reduced security or unnecessarily duplicated files.

You avoid duplicates in a mass installation or to keep sensitive files out of the web root for safety by manually relocating or consolidating various files.

Moving the main includes and skin files may require carefully picking and choosing and altering the  set in your. Experiment with this as desired.

If working to improve security, keep in mind that  uses the current directory as a base. This means that only setting your  may not help to improve the security of your installation.

Move sensitive information
Consider moving the database password or other potentially sensitive data from  to another file located outside of the web document root, and including that file from   (through  ). This can help to ensure that your database password will not be compromised if a web server configuration error disables PHP execution and reveals the file's source text.

Similarly, editing  with some text editors will leave a backup file in the same directory with an altered file extension, causing the copy to be served as plain text if someone requests, for example,. If you use such an editor, be sure to disable backup generation or move sensitive data outside the web root.

A MediaWiki debug logfile as it is used for debugging also contains sensitive data. Make sure to always disallow access for non authorized persons and the public as explained, delete remains of such logfiles when they are not needed, and comment or clear the logfile lines in your.

Set DocumentRoot to /dev/null
A more secure option for the Apache Web Server is to set the  to an empty or non-existent directory, and then use   directives in the Apache configuration to expose only the scripts and directories that need to be web-accessible.

Loader scripts
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  ).