mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
812 lines
35 KiB
XML
812 lines
35 KiB
XML
<?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ı,
|
||
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.
|
||
</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
|
||
-->
|
||
|