Manual:Güvenlik

This page is a translated version of the page Manual:Security and the translation is 88% complete.
Outdated translations are marked like this.
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 Güvenlik sayfasına bakın.
Brian Wolff, EMWCon 2018'de bir MediaWiki kurulumunun nasıl güvenli hale getirileceğini anlatıyor

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.

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 kurulumunuzu güvence altına almak için yapmanız gereken bir diğer çok önemli şey: php çalıştıran kullanıcının, php'nin çalışmasına izin verilen web'den erişilebilen herhangi bir dosyaya veya dizine yazma erişimi olmadığından emin olun.

On Debian-based systems this means the www-data user should not own the php files.

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 chown -R <kullanıcıadıburaya> /path/to/MediaWiki/ 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. chown -R www-data /path/to/MediaWiki/images). Daha sonra, dosya sahiplerinin yanı sıra diğer tüm kullanıcıların yazma erişimini kaldırmak için chmod -R go-w /path/to/MediaWiki 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 php_flag engine off 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.


Taşıma Katmanı Güvenliği (TLS, HTTPS)

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 strict-transport-security 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, php.ini için veya başka şekilde ayarlayın:

    • Uzaktan PHP kodu yürütme güvenlik açıkları, bir URL'yi bir include() veya require() 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.
  • session.use_trans_sid 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:

allow_url_fopen = On

Şununla değiştirin:

allow_url_fopen = Off

Alternatif olarak, her dizin için allow_url_fopen ile kapatmak için bu apache yönergesini ekleyebilirsiniz:

php_flag allow_url_fopen off

Sonra değişiklikleri apachectl reload veya rcapache2 reload (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 user 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 --skip-networking.
  • my.ini dosyanızda ([mysqld] bölümü altında) bind-address=127.0.0.1 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 skip-networking 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. $wgSecretKey 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. $wgDBpassword değiştirin
  2. $wgSecretKey ile rastgele farklı bir harf ve sayı dizisiyle değiştirin
  3. Farklı bir $wgSpamRegex 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 Manual:Securing database passwords 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, LocalSettings.php dosyanızdaki include_path 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, WebStart.php dosyasının mevcut dizini temel olarak kullandığını unutmayın. Bu, yalnızca include_path 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 LocalSettings.php üzerinden web belgesi kökünün dışında bulunan başka bir dosyaya taşımayı ve bu dosyayı LocalSettings.php üzerinden dahil etmeyi düşünün (include() ü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, LocalSettings.php ile bazı metin düzenleyicilerle düzenlemek, aynı dizinde değiştirilmiş bir dosya uzantısına sahip bir yedekleme dosyası bırakarak, biri LocalSettings.php~ 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 LocalSettings.php dosyanızdaki günlük dosyası satırlarını yorumlayın veya temizleyin.

/**
 * The debug log file should never be publicly accessible if it is used, as it may contain private data.
 * But it must be in a directory writable by the PHP script running within your Web server. 
 */
# $wgDebugLogFile  = "c:/Logs/mediawiki/debug.log"; // Windows
$wgDebugLogFile  = "/var/log/mediawiki/{$wgSitename}-debug.log"; // Linux

DocumentRoot'u /dev/null olarak ayarlayın

Apache Web Sunucusu için daha güvenli bir seçenek, DocumentRoot ile boş veya var olmayan bir dizine ayarlamak ve ardından Apache yapılandırmasında Alias 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

Herhangi bir web sunucusuyla çalışacak yalnızca PHP'ye yönelik bir çözüm, belirli bir dizine açıkça chdir() olan ve ardından bir veya daha fazla kaynak dosyası gerektiren bir dizi betiği yazmaktır. Örneğin:

<?php
chdir('/path/to/wiki');
require('./index.php');

Kullanıcı güvenliği

Kullanıcı arayüzünü sistem mesajları düzenleyebilen herkes MediaWiki: ad alanı, sayfa çıkışına rastgele HTML ve JavaScript kodu ekleyebilir. Buna, editinterface iznine sahip viki kullanıcıları ile veritabanındaki metin tablosuna doğrudan yazma erişimi olan herkes dahildir.

Birçok sistem mesajında, özellikle de oturum açma ekranında görüntülenenlerde HTML devre dışı bırakılır, bu nedenle JavaScript'in parola yakalama riski minimum olmalıdır. Kötü amaçlı kod yine de tarayıcı güvenlik açıklarından yararlanmaya çalışabilir (casus yazılım yükleme, vb.), bu nedenle, yalnızca güvenilir kişilerin sistem mesajlarını değiştirebileceğinden emin olmalısınız.

Yükleme güvenliği

Ayrıca bakınız: Manual:Configuring file uploads

Asıl sorun şudur: Kullanıcıların kötü amaçlı dosyalar yüklemesini nasıl önleyebiliriz?

Dosya yüklemeleri, MediaWiki'nin isteğe bağlı bir özelliğidir ve varsayılan olarak devre dışıdır. Bunları etkinleştirirseniz, web kökünde web sunucusu kullanıcısı tarafından yazılabilen bir dizin de sağlamanız gerekir.

Bunun güvenlik için birkaç anlamı vardır:

  • Dizinin herkes tarafından yazılabilir olması veya web sunucusunun sınırlı kullanıcı hesabına ait olması gerekebilir. Çok kullanıcılı bir sistemde, diğer yerel kullanıcıların kötü amaçlı dosyaları karşıya yükleme dizininize eklemesi mümkün olabilir (yukarıdaki çok kullanıcılı notlara bakın). Mümkünse, dizini yalnızca web sunucusunun hesabı tarafından yazılabilir yapın, dizini herkes tarafından yazılabilir yapmayın.
  • PHP'nin yapılandırması bireysel yüklemelerde bir dosya boyutu sınırı belirlerken, MediaWiki toplam yüklemelerde herhangi bir sınır belirlemez. Kötü niyetli (veya aşırı hevesli) bir ziyaretçi, çok sayıda dosya yükleyerek bir disk bölümünü doldurabilir.
  • Oluşturulan küçük resimler ve üzerine yazma onayı için tutulan yüklenen dosyalar, MediaWiki web arayüzünde görünür bir bildirim olmaksızın resimler/küçük resim ve resimler/tmp olarak saklanabilir. Boyutlarına da dikkat edin.

Varsayılan yapılandırma, güvenlik için yüklenebilecek dosya türlerini sınırlamaya çalışır:

  • Varsayılan olarak, .png, .gif, .jpg, .jpeg ve webp dosya uzantıları beyaz listelenmiştir ($wgFileExtensions ).
  • Kullanıcıların beyaz listeyi ($wgStrictFileExtensions ) geçersiz kılmalarına izin verseniz bile, çeşitli çalıştırılabilir ve betik uzantıları açıkça kara listeye alınır ($wgProhibitedFileExtensions ).
  • Bilinen birkaç resim dosyası uzantısının türleri PHP'nin getimagesize() işlevi kullanarak doğrulanmıştır.
  • Yüklenen dosyalar, Internet Explorer ve Safari'de HTML olarak görüntülenmelerine neden olabilecek dosya türü algılama hatalarını engelleyip engellemeyeceklerini görmek için kontrol edilir. (It has been proposed to remove this check, see T309787).

Önlem olarak, karşıya yükleme dizininde (varsayılan olarak images) PHP betiklerin (ve sahip olabileceğiniz diğer betiği türlerinin) sunucu tarafında yürütülmesini açıkça devre dışı bırakmalısınız. You should also instruct browsers to not "sniff" files by setting a X-Content-Type-Options: nosniff header.

Örneğin, MediaWiki örneğiniz /Library/MediaWiki/web içindeyse bunu yapmak için bir Apache .conf dosyası parçası şuna benzer şekilde görünebilir:

<Directory "/Library/MediaWiki/web/images">
   # Ignore .htaccess files
   AllowOverride None
   
   # Serve HTML as plaintext, don't execute SHTML
   AddType text/plain .html .htm .shtml .phtml
   
   # Don't run arbitrary PHP code.
   php_admin_flag engine off

   # Tell browsers to not sniff files
   Header set X-Content-Type-Options nosniff
   
   # If you've other scripting languages, disable them too.
</Directory>

Apache yapılandırma dosyalarına erişiminiz yoksa, ancak belirli dizinlerdeki yapılandırma ayarlarını geçersiz kılmak için .htaccess dosyalarını kullanabiliyorsanız, yükleme dizinine şuna benzeyen bir .htaccess dosyası koyabilirsiniz:

# Serve HTML as plaintext, don't execute SHTML
AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7

# Old way of registering php with AddHandler
RemoveHandler .php

# Recent way of registering php with SetHandler
<FilesMatch "\.ph(p[3457]?s?|tml)$">
   SetHandler None
</FilesMatch>

# If you've other scripting languages, disable them too.

Tam yapılandırmanız değişebilir. Özellikle open_basedir seçeneklerinin kullanılması, yüklemelerin işlenmesini karmaşıklaştırabilir.

Yukarıdaki çözümlerden herhangi birini kullanırsanız, bu basit testle gerçekten çalışıp çalışmadığını kontrol edebilirsiniz.

  • Yükleme dizininde bir 'test.php' dosyası oluşturun.
  • <?php phpinfo(); dosyasında koyun
  • Bir web tarayıcısında dosya yolunu ziyaret edin. Dosyanın yalnızca metnini görüyorsanız, iyisinizdir, aksi takdirde bir yerlerde bir şeyler yanlıştır.

Nginx için PHP çözümünü devre dışı bırakın: http://serverfault.com/a/585559/162909

En iyi güvenlik için, yüklenen dosyalar için ayrı bir alan kullanmayı da düşünmelisiniz. Tam güvenlik için, yüklemelerin bir alt etki alanından değil, tamamen ayrı bir etki alanından sunulması en iyisidir, ancak bir alt etki alanı bile ek güvenlik sağlayacaktır. Bu dosya biçimi HTML'ye çok benzer olduğundan, SVG dosyalarının yüklenmesine izin verirseniz bu özellikle önemlidir. MediaWiki, SVG yüklemelerini güvenlik açısından kontrol eder, ancak en iyisi birden fazla savunma katmanına sahip olmaktır. Medya dosyalarını sunmak için farklı bir etki alanını yapılandırmak için $wgUploadPath sayfasına bakın.

Harici programlar

  • /usr/bin/diff3 düzenleme çakışması birleştirme için çalıştırılabilir.
  • Küçük resimler veya SVG görüntüler için ImageMagick desteği etkinleştirilirse, convert yüklenen dosyalarda çalıştırılabilir.
  • This list is incomplete.

You can use Shellbox to provide a more locked-down running environment for external commands.

Ayrıca bakınız