PHP 8.4.1 Released!

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.

    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.

add a note

User Contributed Notes 1 note

up
2
theking2(at)king.ma
8 months ago
It is important to realize that session.cookie_lifetime=0 will delete the cookie when the browser closes but nowadays browers tend to never close even after the last windows or tab was closed.

For startup speed purposes and to retrieve push traffic browser drop to the background hence the cookie stays put.
To Top