Kurulum güvenliği ipuçları
From LimeSurvey Manual
Genel
Güvenlik sorunlarını çok ciddiye aldığımızı ve hızlı tepki verdiğimizi lütfen unutmayın. Bu nedenle LimeSurvey içinde herhangi bir güvenlik sorunu fark ederseniz, hata takip sistemimizde bir hata raporu açarak bizi bilgilendirin (lütfen hatayı önem derecesi veya kategori olarak 'security' şeklinde işaretleyin).
Güvenlik sorunlarını/açıklarını bildirmeyle ilgili daha fazla ayrıntı için lütfen Güvenlik politikamızı inceleyin.
Web sunucusu kısıtlaması
Apache kullanıyorsanız LimeSurvey, kısıtlama için farklı htaccess dosyaları içerir. Dahil edilen htaccess dosyalarına AllowOverride ile izin verdiğinizden emin olun.
Başka bir web sunucusu kullanıyorsanız veya AllowOverride None kullanmak istiyorsanız şunları yapmalısınız:
- (isteğe bağlı) application, protected, framework ve themes/*/views içindeki tüm dosyalara erişimi devre dışı bırakın
- kullanıcılar tarafından yüklenen /upload/surveys/.*/fu_[a-z0-9] dosyalarına erişimi devre dışı bırakın
- (isteğe bağlı) upload dizinindeki çalıştırılabilir dosyalara erişimi devre dışı bırakın
nginx için bir örneği Genel SSS sayfamızda bulabilirsiniz.
Linux dosya izinleri
Linux sunucu kullanıyorsanız LimeSurvey kurulumunuzun güvenliğini sağlamak için dosya izinlerini uygun şekilde ayarlamanız gerekir.
Linux/*nix dosya izinleri hakkında temel bilgiler
Linux/*nix işletim sistemleri çok kullanıcılıdır. Bu, kişisel hesabınızın yanı sıra sistemde başka kullanıcı hesaplarının da bulunabileceği ve diğer kullanıcılara hangi izinleri verdiğinize dikkat etmeniz gerektiği anlamına gelir.
Süper yönetici kullanıcı olduğu için 'root' hesabının (hangi dosya izinlerini ayarlarsanız ayarlayın) dosyalarınıza erişim iznine her zaman sahip olacağını unutmayın.
LimeSurvey'i çalıştıran web sunucusu da belirli bir kimlik (kullanıcı) altında çalışır. Linux'ta bu genellikle 'www', 'www-data' (Debian/Ubuntu'da), 'apache' veya 'nobody' kullanıcısıdır. Ancak bazı barındırma şirketleri, LimeSurvey betiklerini kişisel kullanıcınızla çalıştırmanıza olanak tanıyan sistemler (suexec gibi) kullanır. Web sunucusu kullanıcısının LimeSurvey dosyalarını okuma yetkisi elbette olmalıdır. Ancak LimeSurvey alt dizinlerinin yalnızca küçük bir bölümü web sunucusu kullanıcısı tarafından yazılabilir olmalıdır.
Kendi yönettiğiniz bir Linux sisteminde dosya izinlerini ayarlama
Web sunucunuzun ve işletim sistemi yapılandırmanızın yönetimi size aitse (fiziksel sunucunun sahibiyseniz veya root erişiminiz olan bir sanal sunucu kiralıyorsanız) aşağıdaki önerileri dikkate alabilirsiniz.
Dosya izinlerinin ayarlanmasını kolaylaştırmak için önce LimeSurvey dosyalarının sahibini ve grubunu ayarlayabilirsiniz. Olası bir strateji, LimeSurvey dosyalarının sahibini kişisel kullanıcı adınız, grubunu ise web sunucusu grubu olarak ayarlamaktır. Bu web sunucusu grubu genellikle yalnızca web sunucusu hesabını (ve muhtemelen başka bir web yöneticisi hesabını) içerir. Örneğin kullanıcı adınız 'myaccount' ve web sunucusu kullanıcısı 'apache' grubundaki 'apache' ise, kabuk erişimiyle şu komutu kullanabilirsiniz: $ chown -R myaccount:apache limesurvey/. Ardından dosya ve alt dizin izinlerini ayarlayın.
Betiğin düzgün çalışması için bazı dizinlere yazma erişimi gerekir:
- /limesurvey/application/config dizini, uygulama yapılandırma ayarlarını kaydetmek için Okuma ve Yazma izni gerektirir
- /limesurvey/tmp dizini ve alt dizinleri içe/dışa aktarma ve yükleme işlemleri için kullanılır ve web sunucunuz için Okuma ve Yazma olarak ayarlanmalıdır
- upload/ dizini ve tüm alt dizinleri de resim ve medya dosyalarının yüklenebilmesi için Okuma ve Yazma izinlerine sahip olmalıdır
- Diğer tüm dizinler ve dosyalar Salt Okunur olarak ayarlanabilir
Barındırılan bir web sunucusunda dosya izinlerini ayarlama
Barındırılan ortamlar birçok bakımdan farklılık gösterdiğinden, bu ortamda bir web uygulamasının güvenliğini sağlamak için standart bir yöntem izlemek oldukça zordur.
Yönetilen sunucu durumunda, betiğin düzgün çalışması için sunucunun bazı dizinlere yazma erişimine ihtiyacı vardır:
- /limesurvey/tmp dizini içe/dışa aktarma ve yükleme işlemleri için kullanılır ve web sunucunuz için Okuma ve Yazma olarak ayarlanmalıdır
- upload/ dizini ve tüm alt dizinleri de resim ve medya dosyalarının yüklenebilmesi için web sunucunuz adına Okuma ve Yazma iznine sahip olmalıdır
- Diğer dizinler ve dosyalar Salt Okunur olarak ayarlanmalıdır
- Web sunucusu yapılandırmanıza bağlı olarak, yazılabilir klasörlerin web sunucusu tarafından yazılabilmesi için haklarını chmod ile 755 veya 777 olarak ayarlamanız gerekebilir. Önce 755'i deneyin, çalışmazsa 777'ye 'yükseltin'
- config.php dosyasının izinlerini 750 olarak ayarlayarak diğer kullanıcıların bu dosyaya okuma erişimini kaldırmayı da deneyebilirsiniz - çalışmazsa 755'e 'yükseltin'
Windows dosya izinleri
Windows sunucu kullanıyorsanız admin klasörünün, web sunucusu işleminin sahibine bu dizine dosya yazma izni verdiğinden emin olmalısınız. Diğer dosyalar salt okunur ve çalıştırılabilir olarak ayarlanabilir.
Diğer güvenlik sorunları
Aşağıdakiler yalnızca önerilerdir. LimeSurvey, bu ek önlemler olmadan da genel olarak çok güvenlidir. Ancak son derece hassas veriler topluyorsanız biraz ek güvenlik yardımcı olabilir:
SSL kullanımı
Hassas anket verileri için genel olarak SSL kullanımını öneriyoruz. SSL'yi genellikle web sunucunuzu doğru yapılandırarak ve bir SSL sertifikası kullanarak etkinleştirirsiniz. SSL'yi etkinleştirdiyseniz, LimeSurvey'in Genel ayarlar bölümünden SSL'yi her zaman zorunlu kılmalısınız. Ayrıca config.php dosyasındaki ilgili seçeneği düzenleyerek yalnızca 'secure' çerezlerin kullanılmasını sağlayabilirsiniz.
config.php dosyasına erişim
/application/config/config.php dosyası, veri tabanı sunucunuz için bir kullanıcı adı ve parola içerir. Bu durum, özellikle veri tabanınıza yüksek düzeyde yönetici erişimi olan bir oturum açma bilgisi kullanıyorsanız bazı güvenlik sorunlarına yol açar. Bir hata nedeniyle bu PHP dosyasının içeriğinin kullanıcının tarayıcısına gönderilmesi durumunda, veri tabanı parolanız ve diğer bilgileriniz ele geçirilebilir (ancak bu çok düşük bir olasılıktır). Riski en aza indirmenin en iyi yolu, yalnızca LimeSurvey veri tabanınız üzerinde belirli haklara sahip özel bir oturum açma bilgisi oluşturmaktır.
Bu bilgileri güvence altına almanın bir başka yolu, /application/config/config.php dosyasındaki bilgileri web dışı bir dizine taşımaktır. Apache kullanıcıları için bu dizin, htdocs (public_html veya www olarak da bilinir) klasörünün bir üst dizinidir. Temel olarak config.php dosyasını kullanmaya devam edersiniz, ancak içinde yalnızca tek bir satır bulunur: GERÇEK yapılandırma bilgilerini içeren dosyayı dahil eden bir satır (örn: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>). Tüm gerçek yapılandırma bilgilerini /application/config/config.php dosyasından kaldırın ve /application/config/config.php dosyasında belirtilen diğer dosyaya (configreal.php) yapıştırın. Bu diğer dosya web dışı bir dizinde bulunmalıdır. Böylece /application/config/config.php dosyası veritabanı parolalarını vb. içermez; yalnızca veritabanı bilgilerini İÇEREN dosyanın adını içerir.
Bu sayede, /application/config/config.php dosyasını dahil eden diğer tüm dosyaları değiştirmek zorunda kalmazsınız; çünkü config.php, bunları gerçek yapılandırma bilgilerinin tamamını içeren ve web dışı bir dizinde bulunan yapılandırma dosyasına 'yönlendirir'.
Ayrıca varsayılan kullanıcı olarak "admin" veya "administrator" kullanmayın. MySQL veritabanınıza (veya LimeSurvey'i kurduğunuz veritabanına) gidin ve varsayılan Kullanıcı adı olan "admin" değerini istediğiniz bir değerle (örn. "admin_xyz") değiştirin. Böylece yöneticinin yeni kullanıcı adını tahmin etmek çok daha zor olur. Unutmayın, bu, saldırganların erişim sağlamak için kullanabileceği iki değişkenden biridir. Yönetici parolası ise diğer değişkendir. Bu nedenle ikisini de son derece dikkatli seçin.
İçerik Güvenliği Politikası (CSP)
SORUMLULUK REDDİ - Burada verilen CSP yalnızca bir örnektir ve olduğu gibi kullanılmak üzere hazırlanmamıştır. Bir başlangıç noktası olarak sunulmuştur; bunu ihtiyaçlarınıza göre uyarlamanız ve kapsamlı biçimde test etmeniz ZORUNLUDUR.
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript)|application\/pdf|xml#i"
</IfModule>