Güvenlik Açıklarına Karşı Koruma
Zaman zaman önemli bir başka web sitesinde ciddi bir güvenlik açığı duyuruluyor, hatta kötüye kullanılıyor. Bu tatsız bir durum. Web uygulamalarınızın güvenliğine önem veriyorsanız, Nette Framework kuşkusuz en iyi seçimdir.
Cross-Site Scripting (XSS)
Cross-Site Scripting, kaçırılmamış çıktılardan yararlanarak web sitelerini bozma yöntemidir. Saldırgan böylece sayfaya kendi kodunu enjekte edebilir, sayfayı değiştirebilir, hatta ziyaretçiler hakkında hassas veri elde edebilir. XSS'e karşı korunmak, tüm çıktı dizelerinin tutarlı ve doğru biçimde kaçırılmasını gerektirir. Geliştiriciniz bunu bir kez bile unutursa, web sitesinin tamamı tehlikeye girebilir.
Bir saldırı örneği, kullanıcıya sayfaya kod enjekte eden, değiştirilmiş bir URL vermek olabilir. Uygulama çıktıları düzgün kaçırmıyorsa, betik kullanıcının tarayıcısında çalışır. Böylece örneğin kimliği çalınabilir.
https://example.com/?search=<script>alert('Başarılı XSS saldırısı.');</script>
Nette Framework, Cross-Site Scripting riskini kalıcı olarak ortadan kaldıran devrim niteliğindeki Bağlama Duyarlı Kaçış teknolojisini sunar. Tüm çıktıları bağlama göre otomatik kaçırır, dolayısıyla geliştirici yanlışlıkla bir şeyi unutamaz. Örnek mi? Bir geliştirici şu şablonu oluşturur:
<p onclick="alert({$message})">{$message}</p>
<script>
document.title = {$message};
</script>
{$message} yazımı, bir değişkenin yazdırılması anlamına gelir. Diğer framework'lerde her çıktıyı
açıkça kaçırmak gerekir, üstelik her yerde farklı biçimde. Nette Framework'te hiçbir şeyi kaçırmak gerekmez; her şey
otomatik, doğru ve tutarlı biçimde yapılır. $message = 'Genişlik 1/2"' değişkenini ayarlarsak, framework şu
HTML kodunu üretir:
<p onclick="alert("Genişlik 1\/2\"")">Genişlik 1/2"</p>
<script>
document.title = "Genişlik 1\/2\"";
</script>
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery saldırısında saldırgan, kurbanı; kurbanın tarayıcısında, kurbanın giriş yapmış olduğu bir sunucuya sinsice istek çalıştıran bir sayfaya çeker. Sunucu, isteğin kurban tarafından isteyerek yapıldığına inanır. Böylece kurbanın kimliği altında, onun haberi olmadan bir eylem gerçekleştirir. Bu; veri değiştirmek ya da silmek, mesaj göndermek vb. olabilir.
Nette Framework, presenter'lardaki formları ve sinyalleri bu tür saldırılara karşı, başka bir alan adından gönderilmelerini ya da tetiklenmelerini engelleyerek otomatik korur. Korumayı kapatmak isterseniz, formlar için şunu kullanın:
$form->allowCrossOrigin();
ya da bir sinyal söz konusuysa şu niteliği ekleyin:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
Bu koruma, tarayıcının otomatik gönderdiği ve sunucu tarafında bir XSS açığı olsa bile taklit edilemeyen
Sec-Fetch-Site başlığına (Fetch Metadata) dayanır. Tarayıcı sonunda CSRF'yi çözüyor yazısı bunu ayrıntılı
olarak anlatır.
URL Saldırısı, Denetim Kodları, Geçersiz UTF-8
Saldırganın web uygulamanıza zararlı girdi enjekte etme girişimiyle ilgili çeşitli terimler. Sonuçları epey değişebilir: XML çıktılarının bozulmasından (örneğin çalışmayan RSS beslemeleri) veritabanından hassas bilgilerin ya da parolaların elde edilmesine kadar. Savunma, tüm girdilerin bayt düzeyinde tutarlı biçimde doğrulanmasıdır. Ve elimizi vicdanımıza koyalım: kaçınız bunu gerçekten yapıyor?
Nette Framework bunu sizin için, otomatik olarak yapar. Hiçbir şey yapılandırmanıza gerek yok ve tüm girdiler temizlenecek.
Oturum Kaçırma, Oturum Çalma, Oturum Sabitleme
Oturum yönetimiyle ilişkili birkaç saldırı tipi vardır. Saldırgan, kullanıcının oturum kimliğini ya çalar ya da ona kendi oturum kimliğini yerleştirir; böylece kullanıcının parolasını bilmeden web uygulamasına erişim kazanır. Sonra uygulama içinde, kullanıcının haberi olmadan herhangi bir eylemi gerçekleştirebilir. Savunma, sunucunun ve PHP'nin doğru yapılandırılmasında yatar.
Nette Framework, PHP'yi otomatik olarak yapılandırır. Böylece programcı oturumu nasıl doğru güvence altına
alacağını düşünmek zorunda kalmaz ve tümüyle uygulamayı geliştirmeye odaklanabilir. Ancak bu, ini_set()
fonksiyonunun etkin olmasını gerektirir.
SameSite Çerezi
SameSite çerezleri, sayfanın yüklenmesine neyin yol açtığını anlamak için bir mekanizma sağlar; bu, güvenlik açısından çok önemlidir.
SameSite bayrağı üç değer alabilir: Lax, Strict ve None (sonuncusu HTTPS
gerektirir). Bir sayfa isteği doğrudan web sitesinden geliyorsa ya da kullanıcı sayfayı adres çubuğuna doğrudan yazarak
veya bir yer imine tıklayarak açıyorsa, tarayıcı sunucuya tüm çerezleri gönderir (yani Lax,
Strict ve None bayraklı olanları). Kullanıcı web sitesine başka bir web sitesindeki bağlantı
üzerinden tıklayarak gelirse, sunucuya Lax ve None bayraklı çerezler iletilir. İstek başka bir
yolla ortaya çıkarsa, örneğin başka bir kaynaktan POST formu gönderme, bir iframe içinde yükleme, JavaScript kullanma vb.,
yalnızca None bayraklı çerezler gönderilir.
Nette varsayılan olarak tüm çerezleri Lax bayrağıyla gönderir.