Güvenlik Açıklarına Karşı Koruma
Her an başka bir önemli web sitesinde bir güvenlik açığı bildiriliyor veya bir açık kötüye kullanılıyor. Bu can sıkıcı. Web uygulamalarınızın güvenliğine önem veriyorsanız, Nette Framework kesinlikle en iyi seçimdir.
Cross-Site Scripting (XSS)
Cross-Site Scripting, işlenmemiş çıktıları kötüye kullanan web sitelerini ihlal etme yöntemidir. Saldırgan daha sonra sayfaya kendi kodunu ekleyebilir ve böylece sayfayı değiştirebilir veya hatta ziyaretçiler hakkında hassas veriler elde edebilir. XSS'e karşı yalnızca tüm karakter dizilerinin tutarlı ve doğru bir şekilde işlenmesiyle savunulabilir. Bu arada, kodlayıcınızın bunu yalnızca bir kez unutması yeterlidir ve tüm web sitesi bir anda tehlikeye girebilir.
Saldırı örneği, kullanıcıya değiştirilmiş bir URL göndererek sayfaya kendi kodumuzu enjekte etmek olabilir. Uygulama çıktıları düzgün bir şekilde işlemezse, komut dosyasını kullanıcının tarayıcısında yürütür. Bu şekilde, örneğin kimliğini çalabiliriz.
https://example.com/?search=<script>alert('Başarılı XSS saldırısı.');</script>
Nette Framework, sizi Cross-Site Scripting riskinden kalıcı olarak kurtaracak devrim niteliğinde bir Context-Aware Escaping teknolojisi sunar. Tüm çıktıları otomatik olarak işlediği için kodlayıcının bir şeyi unutması mümkün olmaz. Örneğin, bir kodlayıcı şu şablonu oluşturur:
<p onclick="alert({$message})">{$message}</p>
<script>
document.title = {$message};
</script>
{$message}
gösterimi, bir değişkenin yazdırılması anlamına gelir. Diğer framework'lerde, her yazdırmanın
açıkça işlenmesi ve hatta her yerde farklı şekilde işlenmesi gerekir. Nette Framework'te hiçbir şeyi işlemenize gerek
yoktur, her şey otomatik, doğru ve tutarlı bir şekilde yapılır. Değişkene $message = 'Šířka 1/2"'
değerini atarsak, framework şu HTML kodunu oluşturur:
<p onclick="alert("Šířka 1\/2\"")">Šířka 1/2"</p>
<script>
document.title = "Šířka 1\/2\"";
</script>
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery saldırısı, saldırganın kurbanı, kurbanın oturum açtığı sunucuya kurbanın tarayıcısında gizlice bir istek yürüten bir sayfaya çekmesi ve sunucunun isteğin kurban tarafından kendi isteğiyle yapıldığına inanmasıdır. Ve böylece kurbanın kimliği altında, kurbanın haberi olmadan belirli bir eylemi gerçekleştirir. Bu, verilerin değiştirilmesi veya silinmesi, bir mesaj gönderilmesi vb. olabilir.
Nette Framework formları ve presenter'lardaki sinyalleri otomatik olarak bu tür saldırılara karşı korur. Ve bunu, başka bir alan adından gönderilmelerini veya çağrılmalarını engelleyerek yapar. Korumayı kapatmak istiyorsanız, formlarda şunu kullanın:
$form->allowCrossOrigin();
veya sinyal durumunda @crossOrigin
ek açıklamasını ekleyin:
/**
* @crossOrigin
*/
public function handleXyz()
{
}
Nette Application 3.2'de nitelikleri de kullanabilirsiniz:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
URL Saldırısı, Kontrol Kodları, Geçersiz UTF-8
Saldırganın web uygulamanıza zararlı girdi gönderme çabasıyla ilgili çeşitli terimler. Sonuçlar çok çeşitli olabilir, XML çıktılarının bozulmasından (örneğin çalışmayan RSS beslemeleri) veritabanından hassas bilgilerin veya şifrelerin alınmasına kadar. Savunma, tüm girdilerin tek tek bayt düzeyinde tutarlı bir şekilde işlenmesidir. Ve elinizi kalbinize koyun, hanginiz bunu yapıyor?
Nette Framework bunu sizin için ve ayrıca otomatik olarak yapar. Hiçbir şey ayarlamanıza gerek yoktur ve tüm girdiler işlenir.
Oturum Kaçırma, Oturum Çalma, Oturum Sabitleme
Oturum yönetimiyle ilgili birkaç tür saldırı vardır. Saldırgan ya kullanıcının oturum kimliğini (session ID) çalar ya da ona kendi oturum kimliğini gönderir ve bu sayede kullanıcının şifresini bilmeden web uygulamasına erişim kazanır. Ardından uygulamada kullanıcının haberi olmadan herhangi bir şey yapabilir. Savunma, sunucunun ve PHP'nin doğru yapılandırılmasında yatar.
Bu arada Nette Framework, PHP'yi otomatik olarak yapılandırır. Programcı bu nedenle oturumu nasıl doğru bir şekilde
güvence altına alacağını düşünmek zorunda kalmaz ve tamamen uygulama oluşturmaya odaklanabilir. Ancak bu,
ini_set()
fonksiyonunun etkinleştirilmesini gerektirir.
SameSite Çerezi
SameSite çerezleri, sayfanın yüklenmesine neyin yol açtığını tanımak için bir mekanizma sağlar. Bu, güvenlik açısından kesinlikle çok önemlidir.
SameSite bayrağı üç değere sahip olabilir: Lax
, Strict
ve None
(bu HTTPS
gerektirir). Sayfa isteği doğrudan web sitesinden geliyorsa veya kullanıcı sayfayı doğrudan adres çubuğuna yazarak veya
bir yer imine tıklayarak açarsa, tarayıcı sunucuya tüm çerezleri gönderir (yani Lax
, Strict
ve
None
bayraklarıyla). Kullanıcı başka bir web sitesinden bir bağlantı aracılığıyla web sitesine tıklarsa,
sunucuya Lax
ve None
bayraklarına sahip çerezler iletilir. İstek başka bir şekilde, örneğin
başka bir web sitesinden bir POST formu göndererek, bir iframe içinde yükleyerek, JavaScript kullanarak vb. ortaya çıkarsa,
yalnızca None
bayrağına sahip çerezler gönderilir.
Nette varsayılan olarak tüm çerezleri Lax
bayrağıyla gönderir.