Geliştiriciler, oturumla ilgili INI ayarlarını güvenli duruma getirerek
oturum güvenliğini iyileştirebilir. Bazı önemli INI ayarlarında bir değer
önerilmez. Oturum ayarlarının güçlendirilmesinden geliştiriciler sorumludur.
-
session.cookie_lifetime=0
0
belirli bir anlama sahiptir. Tarayıcıları,
çerezi kalıcı depoya kaydetmemeleri konusunda bilgilendirir.
Bu nedenle, tarayıcı sonlandırıldığında, oturum kimliği çerezi hemen
silinir. Geliştiriciler yönergeye sıfırdan farklı bir değer atarsa,
diğer kullanıcıların oturum kimliğini kullanmasına izin verebilir.
Çoğu gerçeklenimde bunun için "0
" kullanılmalıdır.
Otomatik oturum açma özelliği gerekiyorsa, geliştiricilerin kendi
güvenli otomatik oturum açma özelliklerini gerçeklemeleri gerekir.
Bunun için uzun ömürlü oturum kimlikleri kullanmayın. Daha fazla
bilgiyi yukarıdaki ilgili bölümde bulabilirsiniz.
-
session.use_cookies=On
session.use_only_cookies=On
HTTP çerezleri bazı sorunlara yol açsa da çerezler oturum kimliklerini
yönetmek için tercih edilmeye devam etmektedir. Çerezleri yalnızca mümkün
olduğunda oturum kimliği yönetimi için kullanılmalıdır. Çoğu uygulama, oturum
kimliği için çerez kullanmaktadır.
session.use_only_cookies=Off
ise, oturum modülü, oturum kimliği çerezinin ilklendirilmemiş olması koşuluyla,
GET/POST/URL tarafından atanan oturum kimliği değerlerini kullanır.
-
session.use_strict_mode=On
Bununla birlikte, güvenli oturumlar için
session.use_strict_mode'un
etkinleştirilmesi zorunludur. Önatnımlı olarak devre dışıdır.
Bu, oturum modülünün ilklendirilmemiş oturum kimliği kullanmasını
engeller. Başka bir deyişle, oturum modülü yalnızca oturum modülü
tarafından üretilen geçerli oturum kimliklerini kabul eder. Kullanıcılar
tarafından sağlanan herhangi bir oturum kimliğini reddeder.
Çerez belirtiminden dolayı, saldırganlar JavaScript zerkleriyle veya
yerel olarak bir çerez veritabanı atayarak kaldırılamayan oturum kimliği
çerezleri yerleştirebilir.
session.use_strict_mode,
bir saldırganın ilklendirdiği oturum kimliğinin kullanılmasını
engelleyebilir.
Bilginize:
Saldırganlar, oturum kimliğini kendi cihazlarında ilklendirip kurbanın
oturum kimliğini atayabilir. Kötüye kullanım için oturum kimliğini
etkin tutmaları gerekir. Bu senaryoda bir saldırı gerçekleştirmek için
saldırganlara ek adımlar gerekir. Bu nedenle,
session.use_strict_mode
bir risk azaltıcı olarak çalışır.
-
session.cookie_httponly=On
Oturum çerezine JavaScript'ten erişimi reddeder. Bu yönerge, bir
JavaScript zerkiyle çerezlerin kaçırılmasını önler.
Bir oturum kimliğini CSRF dizgeciği olarak kullanmak mümkündür, ancak
bu önerilmez. Örneğin, HTML kaynakları kaydedilebilir ve diğer
kullanıcılara gönderilebilir. Geliştiriciler, daha iyi güvenlik için
oturum kimliklerini sayfaya yazmamalıdır. Hemen hemen tüm uygulamalarda,
oturum kimliği çerezi için httponly özniteliğini kullanılmalıdır.
Bilginize:
CSRF dizgeciği oturum kimliği gibi düzenli aralıklarla olarak
yenilenmelidir.
-
session.cookie_secure=On
Yalnızca protokol HTTPS olduğunda oturum kimliği çerezine erişime izin
verin. Bir sitenin yalnızca HTTPS üzerinden erişilebiliyorsa, bu ayarı
etkinleştirmesi gerekir.
HSTS, yalnızca HTTPS aracılığıyla erişilebilen siteler için
düşünülmelidir.
-
session.cookie_samesite="Lax" veya
session.cookie_samesite="Strict"
PHP 7.3'ten itibaren, oturum kimliği çerezi için
"SameSite"
özniteliği atanabilir. Bu özniteliğin
kullanımı, CSRF (Siteler Arası İstek Sahteciliği) saldırılarını
azaltmanın bir yoludur.
Lax ve Strict arasındaki fark, HTTP GET yöntemini kullanan başka bir
kaydedilebilir etki alanından kaynaklanan isteklerde çerezin
erişilebilirliğidir. Lax kullanan çerezlere başka bir kaydedilebilir
alandan gelen bir GET isteğinde erişilebilirken, Strict kullanan
çerezlerde erişilemez.
-
session.gc_maxlifetime=[en küçük olasılığı seç]
session.gc_maxlifetime,
eski oturum kimliğini silmek içindir. Bu ayara güvenilmemeli,
geliştiriciler, oturumların ömrünü bir zaman damgasıyla kendileri yönetmelidir.
Oturum çöp toplayıcısı en iyi şekilde session_gc()
kullanılarak gerçekleştirilir. session_gc() işlevi,
bir görev yöneticisi tarafından çağrılmalıdır. Örneğin, UNIX benzeri
sistemlerde cron kullanılabilir.
Çöp toplayıcı, öntanımlı olarak olasılıklara bağlı çalışır. Bu ayar, eski
bir oturumun silineceğini garanti etmez. Geliştiriciler bu ayara
güvenemese de, mümkün olan en küçük değerde belirtilmesi önerilir. session.gc_probability ve
session.gc_divisor
yönergelerinin, eski oturumlar uygun bir sıklıkta silinecek şekilde
ayarlanması önerilir. Otomatik oturum açma özelliği gerekliyse
geliştiricilerin kendi güvenli otomatik oturum açma özelliklerini
gerçeklemeleri gerekir, daha fazla bilgi için yukarıya bakın.
Bu özellik için asla uzun ömürlü oturum kimliği kullanılmamalıdır.
Bilginize:
Bazı oturum kayıt işleyici modülleri, olasılığa dayalı süre sonu için bu
ayarı kullanmaz. Örneğin, memcache'li memcache. Ayrıntılar için oturum
kayıt işleyici belgelerine bakın.
-
session.use_trans_sid=Off
Şeffaf oturum kimliği yönetiminin kullanılması yasaklanmıştır.
Geliştiriciler gerektiğinde kullanabilir. Ancak, şeffaf oturum kimliği
yönetimini devre dışı bırakmak, oturum kimliği ekleme ve/veya sızıntı
olasılığını ortadan kaldırarak genel oturum kimliği güvenliğini
iyileştirir.
Bilginize:
Oturum kimliği, yer imlerine kaydedilen ve e-postayla gönderilen
URL'lerden, kaydedilmiş HTML kaynağından vb. sızabilir.
-
session.trans_sid_tags=[sınırlı etiketler]
(PHP 7.1.0 ve üstü) Geliştiriciler, gereksiz HTML etiketlerini yeniden
yazmamalıdır. öntanımlı değer çoğu kullanım için yeterli olmalıdır. Daha
eski PHP sürümleri bunun yerine url_rewriter.tags kullanabilir.
-
session.trans_sid_hosts=[sınırlı konaklar]
(PHP 7.1.0 ve üstü) Bu INI, effaf oturum kimliğini yeniden yazmaya
izin veren beyaz listeli konakları tanımlar. Güvenilmeyen
konaklar asla eklenmemelidir. Oturum modülü yalnızca bu ayar boş olduğunda
$_SERVER['HTTP_HOST']
öğesine izin verir.
-
session.referer_check=[kaynaklanan URL]
session.use_trans_sid
etkinleştirildiğinde. Oturum kimliği zerk riskini azaltır. Site örneğin
http://example.com/
ise, yönergeye de
http://example.com/
atanmalıdır. HTTPS ile
tarayıcıların referrer
başlığını göndermeyeceği
unutulmamalıdır. Tarayıcılar, referrer
başlığını
yapılandırmaya göre gönderemez. Bu nedenle, bu ayar güvenilir bir
güvenlik önlemi değildir. Bu ayarın kullanılması önerilir.
-
session.cache_limiter=nocache
Kimliği doğrulanmış oturumlar için HTTP içeriğinin önbelleğe
alınmadığından emin olunmalıdır. Yalnızca içerik gizli olmadığında önbelleğe
alınmasına izin verilmelidir. Aksi takdirde, içerik açığa çıkabilir. HTTP
içeriği güvenlik açısından hassas veriler içermiyorsa
"private"
kullanılabilir. "private"
ataması nedeniyle, paylaşılan istemciler tarafından önbelleğe alınan
özel verilerin aktarılabileceği unutulmamalıdır. "public"
yalnızca HTTP içeriği hiçbir özel veri içermediğinde kullanılmalıdır.
-
session.sid_length="48"
(PHP 7.1.0 ve üstü) Oturum kimlikleri uzadıkça, daha güçlü oturum
kimlikleri haline gelir. Geliştiriciler, 32 karakter ve üstü oturum
kimliği uzunluklarını dikkate almalıdır. session.sid_bits_per_character="5"
olduğunda en az 26 karakter gerekir.
-
session.sid_bits_per_character="6"
(PHP 7.1.0 ve üstü) Bir oturum kimliği karakterinde ne kadar çok bit
varsa, oturum modülü tarafından oluşturulan oturum kimliği, aynı
uzunluktaki sıradan bir oturum kimliğinden daha güçlü olur.
-
session.hash_function="sha256"
(PHP 7.1.0 ve üstü) Daha güçlü bir aşlama işlevi, daha güçlü bir oturum
kimliği üretecektir. MD5 aşlama algoritmasında bile aş çakışması
olasılığı olmasa da, geliştiriciler SHA-2 veya sha384 ve hatta sha512
gibi daha güçlü bir aşlama algoritması kullanmalıdır. Geliştiriciler,
kullanılan aşlama işlevini yeterince uzun bir karmaşa ile beslediklerinden
emin olmalıdır.
-
session.save_path=[herkesçe-okunamayan-dizin]
Bu, /tmp (öntanımlıdır) gibi herkesçe okunabilir
bir dizine ayarlanırsa, sunucudaki diğer kullanıcılar bu dizindeki
dosyaların listesini alarak oturumları ele geçirebilir.