Oturumlar ve Güvenlik
Dış bağlantı: Oturum Tespiti
HTTP oturum yönetimi, site güvenliğinin özünü temsil eder. Oturumların
güvence altına alınmasını sağlamak için tüm olası etki azaltma önlemlerinin
alınması zorunludur. Geliştiricilerin ayrıca uygulanabilir
güvenlik önlemlerini etkinleştirmesi ve kullanması gerekir.
Oturum Yönetiminin TemelleriOturum Güvenliği
Oturum modülü bir oturumda saklanan verinin sadece oturumun kullanıcısı
tarafından görüldüğünü garanti edemez. Oturumun bütünlüğünü etkin olarak
korumak için oturumun önemine bağlı olarak ek tedbirler alınması gerekir.
Oturumlarınız tarafından taşınan verinin önemine ve konuşlandırdığınız ek
korumalara bağlı olarak ki, bunun bir fiyatı vardır, kullanıcının rahatı
azalır. Örneğin, kullanıcılarınızı basit sosyal mühendislik
taktiklerinden korumak için
session.use_only_cookies
yönergesi etkin kılınmalıdır. Bu durumda, çerezler kullanıcı tarafında
koşulsuz olarak etkin kılınmalıdır yoksa oturum çalışmayacaktır.
Bir mevcut oturum kimliğinin üçüncü şahıslara ifşa olmasının çeşitli
yolları vardır. Örneğin, JavaScript zerkleri, URL'lerdeki oturum
kimlikleri, paket koklama, cihaza fiziksel erişim vb. İfşa edilmiş bir
oturum kimliği, üçüncü tarafın o kimlik ile ilişkilendirilmiş tüm
özkaynaklara erişmesini mümkün kılar. İlk olarak oturum kimliğini taşıyan
URL'ler ifşa olur. Harici bir siteye bir bağ verilirse oturum kimliğini
içeren URL, harici sitenin günlük kayıtlarına geçebilir. İkinci olarak,
daha etkin bir saldırgan ağ trafiğini dinleyebilir. Eğer şifreleme
yapılmıyorsa oturum kimlikleri ağ üzerinden salt metin olarak akacaktır.
Bu noktada çözüm, sunucunuzun SSL bağlantılar kurmasını sağlamak ve bunu
kullanıcılarınız için zorunlu kılmaktır. Güvenliği arttırmak için HSTS
kullanılmalıdır.
HTTPS bile gizli verileri her zaman koruyamaz. Örneğin, CRIME ve Beast
güvenlik açıkları, bir saldırganın verileri okumasını sağlayabilir.
Ayrıca, birçok ağın denetim amacıyla HTTPS MITM vekilleri kullandığı
unutulmamalıdır. Saldırganlar da böyle bir vekil sunucu kurabilir.
Uyumsuz Oturum Yönetimi
PHP'nin oturum yöneticisi şu anda öntanımlı olarak uyarlanabilir
durumdadır. Uyarlanabilir bir oturum yöneticisi ek riskler içerir.
session.use_strict_mode
etkin olduğunda ve oturum kayıt işleyicisi
destekliyorsa, ilklendirilmemiş bir oturum kimliği reddedilir ve yenisi
oluşturulur. Bu, kullanıcıyı bilinen bir oturum kimliğini kullanmaya
zorlayan bir saldırıyı engeller. Bir saldırgan bağlantıları kopyalayabilir
ve oturum kimliği içeren bağlantıları epostalarda yollayabilir. Örneğin,
http://example.com/page.php?PHPSESSID=123456789 eğer
session.use_trans_sid
etkinse, kurban, saldırgan tarafından sağlanan oturum kimliğini kullanarak
bir oturum başlatacaktır.
session.use_strict_mode
bu riski azaltır.
Kullanıcı tanımlı kayıt işleyicileri, oturum kimliği doğrulaması
uygulayarak katı oturum kipini destekleyebilir. Tüm kullanıcı tanımlı
kayıt işleyicileri, oturum kimliği doğrulamasını gerçeklemelidir.
Oturum kimliği çerezine domain, path, httponly, secure ve PHP 7.3 ve
sonrasında SameSite öznitelikleri atanabilir.
Tarayıcılarda tanımlı öncelikler vardır. Öncelik kullanarak bir
saldırganın kalıcı olarak kullanılabilecek oturum kimliği ataması
mümkündür. session.use_only_cookies
kullanımı bu sorunu çözümlemez.
session.use_strict_mode
bu riski azaltır. session.use_strict_mode=On
ile ilklendirilmemiş bir oturum kimliği reddedilir.
session.use_strict_mode
uyarlanabilir oturum yönetimi riskini azaltsa da, bir saldırgan
yine de kullanıcıyı ilklendirilmemiş bir oturum kimliğini kullanmaya
zorlayabilir; böyle bir oturum kimliği saldırgan tarafından JavaScript
zerki ile oluşturulabilir. Bu saldırının riskleri bu kılavuzun
tavsiyelerine uyularak azaltılabilir.
Bu kılavuzu izleyerek, geliştiriciler, session.use_strict_mode
yönergesini etkin kılmalı, zaman damgalı oturum yönetimi kullanmalı ve
tavsiye edilen yordamlarla session_regenerate_id
kullanarak oturum kimliklerini yeniden üretmelidir. Geliştirici
yukarıdakilerin tümünü uyguladığı takdirde saldırgan üretimi oturum
kimliği silinecektir.
Eski oturuma erişim gerçekleştiğinde, bu bilgiler, müteakip bir
soruşturma için geçerli olacağından, geliştiriciler kullanıcının
tüm etkin oturum verilerini kaydetmelidir. Kullanıcının tüm oturumları
zorla kapatılmalı ve yeniden kimlik doğrulaması yapması istenmelidir.
Bu, saldırganların çalınan oturumları kötü amaçlarla kullanmasını
engeller.
Eski oturuma erişim, mutlaka bir saldırı anlamına gelmez. Kararsız
bir ağ ve/veya etkin oturumun derhal silinmesi, meşru kullanıcıların
eski oturumlarını kullanmasına sebep olacaktır.
PHP 7.1.0 ve sonrası için, session_create_id eklendi.
Bu işlev, bir kullanıcının oturum kimliklerinin önüne kullanıcı kimliği
eklenerek tüm etkin oturumlarına verimli bir şekilde erişmek için
çalıştırılabilir. session.use_strict_mode'u
etkinleştirmek bu gerçeklenim için çok önemlidir. Aksi takdirde, kötü
niyetli kullanıcılar diğer kullanıcılar için kötü amaçlı bir oturum
kimliği atayabilir.
PHP 7.1.0 öncesinde gelitiriciler yeni bir oturum kimliği üretmek için
/dev/urandom gibi CSPRNG veya aş
işlevlerini ve random_bytes işlevini kullanmalıdır.
session_create_id çakışma algılama özelliğine
sahiptir ve oturumun INI ayarlarına göre bir oturum kimliği üretir.
Oturum Kimliğinin Yeniden Üretilmesi
session.use_strict_mode
iyi bir acı azaltıcıdır ancak yetersizdir. Geliştiriciler oturum
güvenliğini sağlamak için aynı zamanda
session_regenerate_id işlevini de kullanmalıdır.
Oturum kimliğinin yenilenmesi oturum kimliklerinin çalınma riskini
azaltır, bu bakımdan session_regenerate_id belirli
aralıklarla sürekli çağrılmalıdır. Örneğin, güvenlik açısından hassas
içerik için oturum kimliği her 15 dakikada bir yeniden oluşturulmalıdır. Bir
oturum kimliğinin çalınması durumunda bile, hem meşru kullanıcının hem de
saldırganın oturumu sona erecektir. Başka bir deyişle, kullanıcı veya
saldırgan tarafından erişim, eski bir oturuma erişim hatası üretecektir.
Oturum kimlikleri, kullanıcı ayrıcalıkları yükseltildiğinde, kimlik
doğrulamasından sonra yapıldığı gibi yeniden
oluşturulmalıdır. Kimlik doğrulama bilgisi
$_SESSION dizisine atamadan önce
session_regenerate_id çağrılmalıdır.
(PHP 7.0.0'dan itibaren, session_regenerate_id, zaman
damgasını/ve benzerlerini geçerli oturuma kaydetmek için mevcut oturum
verilerini otomatik olarak kaydeder.) Yalnızca yeni oturumun doğrulanmış
bayrağı içerdiğinden emin olunmalıdır.
Geliştiriciler,
session.gc_maxlifetime
değerine göre oturum kimliğinin süresinin dolmasına güvenmemelidir.
Saldırganlar, süresinin dolmasını önlemek ve kimliği doğrulanmış bir oturum
da dahil olmak üzere oturumu kullanmaya devam edebilmek için bir kurbanın
oturum kimliğine düzenli aralıklarla erişebilir.
Bunun yerine, geliştiricilerin zaman damgasına dayalı oturum verisi
yönetimini gerçeklemesi gerekir.
Oturum yöneticisi zaman damgalarını şeffaf bir şekilde yönetebilse de bu
özellik uygulanmaz. Eski oturum verileri çöp toplayıcıya gidene kadar
saklanmalıdır. Aynı zamanda, geliştiriciler, eski oturum verilerinin
silindiğinden emin olmalıdır. Ancak geliştiriciler, etkin oturum
verilerini hemen silmemelidir.
Yani session_regenerate_id(true); ve
session_destroy etkin bir oturum için asla birlikte
çağrılmamalıdır. Bu çelişkili gelebilir, ancak bu zorunlu bir
gerekliliktir.
session_regenerate_id öntanımlı olarak eski
oturumları silmez. Eski kimliği doğrulanmış
oturumlar kullanım için mevcut olabilir. Geliştiriciler, eski oturumların
herkes tarafından tüketilmesini engellemeli, zaman damgalarını kullanarak
eski oturum verilerine kendi başlarına erişimi yasaklamalıdır.
Etkin bir oturumun aniden kaldırılması istenmeyen yan etkilere neden olur.
Sunucuya eşzamanlı bağlantılar olduğunda ve/veya ağ kararsız olduğunda
oturumlar kaybedilebilir.
Etkin oturumların aniden kaldırılmasıyla olası bir kötü amaçlı erişim
tespit edilemez.
Geliştiriciler, güncel olmayan oturumları hemen silmek yerine,
$_SESSION'da kısa süreli bir zaman aşımı (bir zaman
damgası) belirlemeli ve kulanıcıların oturum verilerine kendi başlarına
erişmesi engellenmelidir.
Geliştiriciler, session_regenerate_id işleminin
hemen ardından eski oturum verilerine erişimi yasaklamamalı, daha sonraki
bir aşamada yasaklamalıdır. Örneğin. kablolu ağ gibi kararlı ağlar için
birkaç saniye sonra ve cep telefonları veya Wi-Fi gibi kararsız ağlar
için birkaç dakika sonra.
Bir kullanıcı eski bir oturuma (süresi dolmuş oturum) erişirse, buna
erişim reddedilmelidir. Ayrıca, bir saldırıyı temsil etmesi muhtemel
olduğundan, kimlik doğrulamalı durumunun kullanıcının tüm oturumlarından
kaldırılması önerilir.
session.use_only_cookies ve
session_regenerate_id öğelerinin doğru kullanımı,
saldırganlar tarafından ayarlanan silinemeyen çerezlerle kişisel DoS'a
neden olabilir. Bu durumda geliştiriciler, kullanıcıları çerezleri
kaldırmaya davet edebilir ve bir güvenlik sorunundan etkilenebileceklerini
bildirebilir. Saldırganlar, güvenlik açığı bulunan bir web uygulaması,
açıkta kalan/kötü niyetli bir tarayıcı eklentisi, fiziksel olarak güvenliği
ihlal edilmiş bir cihaz vb. aracılığıyla kötü amaçlı çerezler atayabilir.
DoS riski yanlış anlaşılmasın.
session.use_strict_mode=On
genel oturum kimliği güvenliği için zorunludur! Tüm sitelerin
session.use_strict_mode'u
etkinleştirmesi önerilir.
DoS, yalnızca hesap saldırı altındayken gerçekleşebilir.
Bir uygulamadaki JavaScript zerki güvenlik açığı en yaygın sebeplerdendir.
Oturum Verisinin Silinmesi
Eski oturum verisi erişilemez ve silinmiş olmalıdır.
Geçerli oturum modülü bunu gerektiği gibi yerine getiremez.
Eski oturum verileri mümkün olan en kısa sürede silinmelidir. Ancak,
etkin oturumlar hemen kaldırılmamalıdır. Bu gereksinimleri karşılamak
için geliştiriciler, zaman damgasına dayalı oturum veri yönetimini kendi
başlarına uygulamalıdır.
$_SESSION içinde zaman aşımı damgası ayarlanmalı ve
yönetilmelidir. Güncel olmayan oturum verilerine erişim yasaklanmalıdır.
Eski oturum verilerine erişim tespit edildiğinde, kullanıcının
oturumlarından tüm kimliği doğrulanmış durumları kaldırıp yeniden kimlik
doğrulamaya zorlanması önerilir. Eski oturum verilerine erişim bir
saldırıyı temsil edebilir. Bunu başarmak için geliştiriciler, her
kullanıcının tüm etkin oturumlarını takip etmelidir.
Eski bir oturuma erişim, kararsız bir ağ ve/veya siteye eşzamanlı erişim
nedeniyle de gerçekleşebilir. Örneğin, sunucu bir çerez aracılığıyla yeni
bir oturum kimliği belirlemeye çalışmış, ancak bağlantının kesilmesi
nedeniyle Set-Cookie paketi istemciye ulaşmamış olabilir. Bir bağlantıya
session_regenerate_id tarafından yeni bir oturum
kimliği verilebilir, ancak başka bir eşzamanlı bağlantı henüz yeni oturum
kimliğini almamış olabilir. Bu nedenle, geliştiriciler daha sonraki bir
aşamada eski oturuma erişimi yasaklamalıdır. Yani zaman damgası tabanlı
oturum yönetimi zorunludur.
Özetle, oturum verileri ne session_regenerate_id
ne de session_destroy ile yok edilmeli, oturum
verilerine erişimi denetlemek için zaman damgaları kullanılmalıdır.
session_gc'nin oturum veri deposundaki eski verileri
silmesine izin verilmelidir.
Oturum Kilitleme
Yarış koşullarından kaçınmak için oturum verileri öntanımlı olarak
kilitlenir. Oturum verilerinin istekler arasındaki tutarlılığını sağlamak
için kilitleme zorunludur.
Ancak oturum kilitleme, saldırganlar tarafından DoS saldırıları
gerçekleştirmek için kötüye kullanılabilir. Oturum kilitleyerek DoS
saldırısı riskini azaltmak için kilitler en aza indirilmelidir. Oturum
verilerinin güncellenmesi gerekmediğinde salt okunur oturumlar kullanılmalıdır.
session_start işlevi 'read_and_close' seçeneği ile
kullanılmalıdır: session_start(['read_and_close'=>1]);session_commit kullanarak $_SESSION
güncellendikten hemen sonra, mümkün olan en kısa sürede oturum
kapatılmalıdır.
Geçerli oturum modülü, oturum etkin olmadığında $_SESSION
üzerinde herhangi bir değişiklik algılamaz. Oturum etkin değilken
$_SESSION üzerinde değişiklik yapmamak geliştiricinin
sorumluluğundadır.
Etkin Oturumlar
Geliştiriciler, her kullanıcı için tüm etkin oturumları izlemelidir. Ve
kullanıcılara kaç tane etkin oturum, hangi IP'den (ve alandan), ne kadar süredir
etkin oldukları vs. bildirilmelidir. PHP bunları takip etmez. Bunu
geliştiricilerin yapacağı varsayılır.
Bunu uygulamak için çeşitli yollar mevcuttur. Olası bir uygulama, gerekli
verileri takip eden ve ilgili tüm bilgileri depolayan bir veritabanı
oluşturmaktır. Geçersiz oturum verileri çöp toplayıcıya gittiğinden,
geliştiricilerin etkin oturum veritabanı tutarlılığını korumak için çöp
toplayıcı verileriyle de ilgilenmesi gerekir.
En basit uygulamalardan biri "oturum kimliği ile öncelenmiş kullanıcı
kimliği"dir ve gerekli bilgiler $_SESSION içinde saklanır.
Birçok veritabanı, bu öneki seçebilmektedir. Geliştiriciler bunun için
session_regenerate_id ve
session_create_id kullanabilir.
Gizli verileri asla önek olarak kullanmayın. Kullanıcı kimliği gizliyse
hash_hmac önerilir.
Bu uygulama için session.use_strict_mode
yönergesinin etkinleştirilmesi zorunludur. Etkin olduğundan emin olun.
Aksi takdirde aktif oturum veritabanı tehlikeye girebilir.
Eski oturumlara erişimi tespit etmek için zaman damgasına dayalı oturum
yönetimi zorunludur. Eski bir oturuma erişim tespit edildiğinde,
kullanıcının tüm etkin oturumlarından kimlik doğrulama bayrakları
silinmelidir. Bu, saldırganların çalınan oturumlardan yararlanmaya
devam etmesini önler.
Oturum ve Otomatik Oturum Açmak
Oturumun çalınma riskini artırdığından, geliştiriciler otomatik oturum
açma için uzun ömürlü oturum kimlikleri kullanmamalıdır. Otomatik giriş
özelliğini geliştirici gerçeklemelidir.
setcookie kullanarak otomatik oturum açma anahtarı
olarak tek seferlik güvenli bir aşlama anahtarı kullanın. SHA-2'den daha
güçlü bir aşlama algoritması kullanın. Örneğin, /dev/urandom
veya random_bytes'dan rastgele verilerle SHA-256 veya üstü.
Kullanıcının kimliği doğrulanmamışsa, tek seferlik otomatik giriş
anahtarının geçerli olup olmadığına bakılmalıdır. Geçerli olması durumunda,
kullanıcının kimliği doğrulanmalı ve yeni bir güvenli tek seferlik aşlama
anahtarı atanmalıdır. Otomatik oturum açma anahtarı yalnızca bir kez
kullanılmalıdır, yani bir otomatik oturum açma anahtarının asla yeniden
kullanılmaması gerekir. Her zaman yeni bir tane oluşturulmalıdır.
Otomatik oturum açma anahtarı, uzun ömürlü bir kimlik doğrulama
anahtarıdır, mümkün olduğunca korunması gerekir. Güvenli hale getirmek
için path/httponly/secure/SameSite çerezinin öznitelikleri kullanılmalıdır.
Yani otomatik giriş anahtarı, gerekmedikçe asla aktarılmamalıdır.
Geliştirici, otomatik oturum açmayı devre dışı bırakan ve gereksiz
otomatik oturum açma anahtarı tanımlama bilgisini kaldıran özellikleri
uygulamalıdır.
CSRF (Siteler Arası Talep Sahtekarlıkları) Saldırıları
Oturumlar ve kimlik doğrulama, CSRF saldırılarına karşı koruma sağlamaz.
Geliştiriciler, CSRF korumasını kendileri gerçeklemelidir.
CSRF koruması için output_add_rewrite_var
kullanılabilir. Daha fazla bilgi işlevin sayfasında bulunabilir.
PHP 7.2.0 öncesinde, şeffaf oturum kimliği ile aynı çıktı tamponu ve
INI ayarı kullanılırdı. Bu nedenle, 7.2.0 öncesi PHP sürümleri ile
output_add_rewrite_var kullanılması önerilmez.
Çoğu sayfa uygulama çerçevesi CSRF korumasını destekler. Daha fazla
ayrıntı için sayfa uygulama çerçevesi kılavuzunuza bakılabilir.
PHP 7.3'ten itibaren, oturum çerezi için SameSite özniteliği
ayarlanabiliyor. Bu, CSRF güvenlik açıklarını azaltabilecek ek bir
önlemdir.
Oturum INI Ayarlarının Güvenliği
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.
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.
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.
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.
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.