1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 07:12:18 +01:00
Files
archived-doc-tr/reference/session/security.xml
2023-06-27 18:57:28 +03:00

812 lines
35 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: ccb379494533c9b7d63a81f0221231a9e526eee9 Maintainer: nilgun Status: ready -->
<chapter xml:id="session.security" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Oturumlar ve Güvenlik</title>
<para>
Dış bağlantı: <link xlink:href="&url.session-fixation;">Oturum Tespiti</link>
</para>
<para>
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ı <emphasis>zorunludur</emphasis>. Geliştiricilerin ayrıca uygulanabilir
güvenlik önlemlerini etkinleştirmesi ve kullanması gerekir.
</para>
<sect1 xml:id="features.session.security.management">
<title>Oturum Yönetiminin Temelleri</title>
<sect2 xml:id="features.session.security.management.basic">
<title>Oturum Güvenliği</title>
<para>
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.
</para>
<para>
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
<link linkend="ini.session.use-only-cookies">session.use_only_cookies</link>
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.
</para>
<para>
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.
</para>
<note>
<simpara>
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.
</simpara>
</note>
</sect2>
<sect2 xml:id="features.session.security.management.non-adaptive-session">
<title>Uyumsuz Oturum Yönetimi </title>
<para>
PHP'nin oturum yöneticisi şu anda öntanımlı olarak uyarlanabilir
durumdadır. Uyarlanabilir bir oturum yöneticisi ek riskler içerir.
</para>
<para>
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
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,
<literal>http://example.com/page.php?PHPSESSID=123456789</literal> eğer
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
etkinse, kurban, saldırgan tarafından sağlanan oturum kimliğini kullanarak
bir oturum başlatacaktır.
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
bu riski azaltır.
</para>
<warning>
<simpara>
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.
</simpara>
</warning>
<para>
Oturum kimliği çerezine domain, path, httponly, secure ve PHP 7.3 ve
sonrasında SameSite öznitelikleri atanabilir.
<!-- Not exactly sure what the meaning here is - girgias -->
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. <link
linkend="ini.session.use-only-cookies">session.use_only_cookies</link>
kullanımı bu sorunu çözümlemez.
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
bu riski azaltır. <link
linkend="ini.session.use-strict-mode">session.use_strict_mode</link>=On
ile ilklendirilmemiş bir oturum kimliği reddedilir.
</para>
<note>
<simpara><link
linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
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.
</simpara>
<simpara>
Bu kılavuzu izleyerek, geliştiriciler, <link
linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
yönergesini etkin kılmalı, zaman damgalı oturum yönetimi kullanmalı ve
tavsiye edilen yordamlarla <function>session_regenerate_id</function>
kullanarak oturum kimliklerini yeniden üretmelidir. Geliştirici
yukarıdakilerin tümünü uyguladığı takdirde saldırgan üretimi oturum
kimliği silinecektir.
</simpara>
<simpara>
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.
</simpara>
</note>
<warning>
<simpara>
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.
</simpara>
</warning>
<para>
PHP 7.1.0 ve sonrası için, <function>session_create_id</function> 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. <link
linkend="ini.session.use-strict-mode">session.use_strict_mode</link>'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.
</para>
<note>
<simpara>
PHP 7.1.0 öncesinde gelitiriciler yeni bir oturum kimliği üretmek için
<filename>/dev/urandom</filename> gibi <acronym>CSPRNG</acronym> veya aş
işlevlerini ve <function>random_bytes</function> işlevini kullanmalıdır.
<function>session_create_id</function> çakışma algılama özelliğine
sahiptir ve oturumun INI ayarlarına göre bir oturum kimliği üretir.
</simpara>
</note>
</sect2>
<sect2 xml:id="features.session.security.management.session-id-regeneration">
<title>Oturum Kimliğinin Yeniden Üretilmesi</title>
<para>
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
iyi bir acı azaltıcıdır ancak yetersizdir. Geliştiriciler oturum
güvenliğini sağlamak için aynı zamanda
<function>session_regenerate_id</function> işlevini de kullanmalıdır.
</para>
<para>
Oturum kimliğinin yenilenmesi oturum kimliklerinin çalınma riskini
azaltır, bu bakımdan <function>session_regenerate_id</function> 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.
</para>
<para>
Oturum kimlikleri, kullanıcı ayrıcalıkları yükseltildiğinde, kimlik
doğrulamasından sonra yapıldığı gibi <emphasis>yeniden
oluşturulmalıdır</emphasis>. Kimlik doğrulama bilgisi
<varname>$_SESSION</varname> dizisine atamadan önce
<function>session_regenerate_id</function> çağrılmalıdır.
(PHP 7.0.0'dan itibaren, <function>session_regenerate_id</function>, 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.
</para>
<para>
Geliştiriciler,
<link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>
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.
</para>
<para>
Bunun yerine, geliştiricilerin zaman damgasına dayalı oturum verisi
yönetimini gerçeklemesi gerekir.
</para>
<warning>
<simpara>
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 <code>session_regenerate_id(true);</code> ve
<function>session_destroy</function> etkin bir oturum için asla birlikte
çağrılmamalıdır. Bu çelişkili gelebilir, ancak bu zorunlu bir
gerekliliktir.
</simpara>
</warning>
<para>
<function>session_regenerate_id</function> öntanımlı olarak eski
oturumları <emphasis>silmez</emphasis>. 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.
</para>
<warning>
<simpara>
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.
</simpara>
<simpara>
Etkin oturumların aniden kaldırılmasıyla olası bir kötü amaçlı erişim
tespit edilemez.
</simpara>
<simpara>
Geliştiriciler, güncel olmayan oturumları hemen silmek yerine,
<varname>$_SESSION</varname>'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.
</simpara>
<simpara>
Geliştiriciler, <function>session_regenerate_id</function> 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.
</simpara>
<simpara>
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.
</simpara>
</warning>
<para><link
linkend="ini.session.use-only-cookies">session.use_only_cookies</link> ve
<function>session_regenerate_id</function> öğ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ı,
ı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.
</para>
<warning>
<simpara>
DoS riski yanlış anlaşılmasın.
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>=On
genel oturum kimliği güvenliği için zorunludur! Tüm sitelerin
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>'u
etkinleştirmesi önerilir.
</simpara>
<simpara>
DoS, yalnızca hesap saldırı altındayken gerçekleşebilir.
Bir uygulamadaki JavaScript zerki güvenlik açığı en yaygın sebeplerdendir.
</simpara>
</warning>
</sect2>
<sect2 xml:id="features.session.security.management.session-data-deletion">
<title>Oturum Verisinin Silinmesi</title>
<para>
Eski oturum verisi erişilemez ve silinmiş olmalıdır.
Geçerli oturum modülü bunu gerektiği gibi yerine getiremez.
</para>
<para>
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.
</para>
<para>
<varname>$_SESSION</varname> 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.
</para>
<note>
<simpara>
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
<function>session_regenerate_id</function> 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.
</simpara>
</note>
<para>
Özetle, oturum verileri ne <function>session_regenerate_id</function>
ne de <function>session_destroy</function> ile yok edilmeli, oturum
verilerine erişimi denetlemek için zaman damgaları kullanılmalıdır.
<function>session_gc</function>'nin oturum veri deposundaki eski verileri
silmesine izin verilmelidir.
</para>
</sect2>
<sect2 xml:id="features.session.security.management.session-locking">
<title>Oturum Kilitleme</title>
<para>
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.
</para>
<para>
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.
<function>session_start</function> işlevi 'read_and_close' seçeneği ile
kullanılmalıdır: <code>session_start(['read_and_close'=>1]);</code>
<function>session_commit</function> kullanarak <varname>$_SESSION</varname>
güncellendikten hemen sonra, mümkün olan en kısa sürede oturum
kapatılmalıdır.
</para>
<para>
Geçerli oturum modülü, oturum etkin olmadığında <varname>$_SESSION</varname>
üzerinde herhangi bir değişiklik algılamaz. Oturum etkin değilken
<varname>$_SESSION</varname> üzerinde değişiklik yapmamak geliştiricinin
sorumluluğundadır.
</para>
</sect2>
<sect2 xml:id="features.session.security.management.active-sessions">
<title>Etkin Oturumlar</title>
<para>
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.
</para>
<para>
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.
</para>
<para>
En basit uygulamalardan biri "oturum kimliği ile öncelenmiş kullanıcı
kimliği"dir ve gerekli bilgiler <varname>$_SESSION</varname> içinde saklanır.
Birçok veritabanı, bu öneki seçebilmektedir. Geliştiriciler bunun için
<function>session_regenerate_id</function> ve
<function>session_create_id</function> kullanabilir.
</para>
<warning>
<simpara>
Gizli verileri asla önek olarak kullanmayın. Kullanıcı kimliği gizliyse
<function>hash_hmac</function> önerilir.
</simpara>
</warning>
<warning>
<simpara>
Bu uygulama için <link
linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
yönergesinin etkinleştirilmesi zorunludur. Etkin olduğundan emin olun.
Aksi takdirde aktif oturum veritabanı tehlikeye girebilir.
</simpara>
</warning>
<para>
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.
</para>
</sect2>
<sect2 xml:id="features.session.security.management.session-and-autologin">
<title>Oturum ve Otomatik Oturum Açmak</title>
<para>
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.
</para>
<para>
<function>setcookie</function> 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, <filename>/dev/urandom</filename>
veya <function>random_bytes</function>'dan rastgele verilerle SHA-256 veya üstü.
</para>
<para>
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.
</para>
<para>
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.
</para>
<para>
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.
</para>
</sect2>
<sect2 xml:id="features.session.security.management.csrf">
<title>CSRF (Siteler Arası Talep Sahtekarlıkları) Saldırıları</title>
<para>
Oturumlar ve kimlik doğrulama, CSRF saldırılarına karşı koruma sağlamaz.
Geliştiriciler, CSRF korumasını kendileri gerçeklemelidir.
</para>
<para>
CSRF koruması için <function>output_add_rewrite_var</function>
kullanılabilir. Daha fazla bilgi işlevin sayfasında bulunabilir.
</para>
<note>
<simpara>
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
<function>output_add_rewrite_var</function> kullanılması önerilmez.
</simpara>
</note>
<para>
Çoğu sayfa uygulama çerçevesi CSRF korumasını destekler. Daha fazla
ayrıntı için sayfa uygulama çerçevesi kılavuzunuza bakılabilir.
</para>
<para>
PHP 7.3'ten itibaren, oturum çerezi için SameSite özniteliği
ayarlanabiliyor. Bu, CSRF güvenlik açıklarını azaltabilecek ek bir
önlemdir.
</para>
</sect2>
</sect1>
<sect1 xml:id="session.security.ini">
<title>Oturum INI Ayarlarının Güvenliği</title>
<para>
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.
</para>
<itemizedlist>
<listitem>
<para>
<link linkend="ini.session.cookie-lifetime">session.cookie_lifetime</link>=0
</para>
<para>
<literal>0</literal> 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 "<literal>0</literal>" kullanılmalıdır.
</para>
<para>
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.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.use-cookies">session.use_cookies</link>=On
</para>
<para>
<link linkend="ini.session.use-only-cookies">session.use_only_cookies</link>=On
</para>
<para>
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.
</para>
<para>
<link linkend="ini.session.use-only-cookies">session.use_only_cookies</link>=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.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>=On
</para>
<para>
Bununla birlikte, güvenli oturumlar için
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>'un
etkinleştirilmesi zorunludur. Önatnımlı olarak devre dışıdır.
</para>
<para>
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.
</para>
<para>
Çerez belirtiminden dolayı, saldırganlar JavaScript zerkleriyle veya
yerel olarak bir çerez veritabanı atayarak kaldırılamayan oturum kimliği
çerezleri yerleştirebilir.
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>,
bir saldırganın ilklendirdiği oturum kimliğinin kullanılmasını
engelleyebilir.
</para>
<note>
<para>
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,
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
bir risk azaltıcı olarak çalışır.
</para>
</note>
</listitem>
<listitem>
<para>
<link linkend="ini.session.cookie-httponly">session.cookie_httponly</link>=On
</para>
<para>
Oturum çerezine JavaScript'ten erişimi reddeder. Bu yönerge, bir
JavaScript zerkiyle çerezlerin kaçırılmasını önler.
</para>
<para>
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.
</para>
<note>
<para>
CSRF dizgeciği oturum kimliği gibi düzenli aralıklarla olarak
yenilenmelidir.
</para>
</note>
</listitem>
<listitem>
<para>
<link linkend="ini.session.cookie-secure">session.cookie_secure</link>=On
</para>
<para>
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.
</para>
<para>
HSTS, yalnızca HTTPS aracılığıyla erişilebilen siteler için
düşünülmelidir.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.cookie-samesite">session.cookie_samesite</link>="Lax" veya
<link linkend="ini.session.cookie-samesite">session.cookie_samesite</link>="Strict"
</para>
<para>
PHP 7.3'ten itibaren, oturum kimliği çerezi için
<literal>"SameSite"</literal> özniteliği atanabilir. Bu özniteliğin
kullanımı, CSRF (Siteler Arası İstek Sahteciliği) saldırılarını
azaltmanın bir yoludur.
</para>
<para>
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.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>=[en küçük olasılığı seç]
</para>
<para>
<link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>,
eski oturum kimliğini silmek içindir. Bu ayara <emphasis>güvenilmemeli</emphasis>,
geliştiriciler, oturumların ömrünü bir zaman damgasıyla kendileri yönetmelidir.
</para>
<para>
Oturum çöp toplayıcısı en iyi şekilde <function>session_gc</function>
kullanılarak gerçekleştirilir. <function>session_gc</function> işlevi,
bir görev yöneticisi tarafından çağrılmalıdır. Örneğin, UNIX benzeri
sistemlerde cron kullanılabilir.
</para>
<para>
Çö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. <link
linkend="ini.session.gc-probability">session.gc_probability</link> ve
<link linkend="ini.session.gc-divisor">session.gc_divisor</link>
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.
</para>
<note>
<para>
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.
</para>
</note>
</listitem>
<listitem>
<para>
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>=Off
</para>
<para>
Ş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.
</para>
<note>
<para>
Oturum kimliği, yer imlerine kaydedilen ve e-postayla gönderilen
URL'lerden, kaydedilmiş HTML kaynağından vb. sızabilir.
</para>
</note>
</listitem>
<listitem>
<para>
<link linkend="ini.session.trans-sid-tags">session.trans_sid_tags</link>=[sınırlı etiketler]
</para>
<para>
(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 <link
linkend="ini.url-rewriter.tags">url_rewriter.tags</link> kullanabilir.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.trans-sid-hosts">session.trans_sid_hosts</link>=[sınırlı konaklar]
</para>
<para>
(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
<literal>$_SERVER['HTTP_HOST']</literal> öğesine izin verir.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.referer-check">session.referer_check</link>=[kaynaklanan URL]
</para>
<para>
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
etkinleştirildiğinde. Oturum kimliği zerk riskini azaltır. Site örneğin
<literal>http://example.com/</literal> ise, yönergeye de
<literal>http://example.com/</literal> atanmalıdır. HTTPS ile
tarayıcıların <literal>referrer</literal> başlığını göndermeyeceği
unutulmamalıdır. Tarayıcılar, <literal>referrer</literal> 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.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.cache-limiter">session.cache_limiter</link>=nocache
</para>
<para>
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
<literal>"private"</literal> kullanılabilir. <literal>"private"</literal>
ataması nedeniyle, paylaşılan istemciler tarafından önbelleğe alınan
özel verilerin aktarılabileceği unutulmamalıdır. <literal>"public"</literal>
yalnızca HTTP içeriği hiçbir özel veri içermediğinde kullanılmalıdır.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.sid-length">session.sid_length</link>="48"
</para>
<para>
(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. <link
linkend="ini.session.sid-bits-per-character">session.sid_bits_per_character</link>="5"
olduğunda en az 26 karakter gerekir.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.sid-bits-per-character">session.sid_bits_per_character</link>="6"
</para>
<para>
(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.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.hash-function">session.hash_function</link>="sha256"
</para>
<para>
(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 <link
linkend="ini.session.entropy-length">karmaşa</link> ile beslediklerinden
emin olmalıdır.
</para>
</listitem>
<listitem>
<para>
<link linkend="ini.session.save-path">session.save_path</link>=[herkesçe-okunamayan-dizin]
</para>
<para>
Bu, <filename>/tmp</filename> (ö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.
</para>
</listitem>
</itemizedlist>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->