Nette Documentation Preview

syntax
Güvenlik Açığı Koruması
***********************

.[perex]
Arada sırada büyük bir güvenlik açığı duyuruluyor ve hatta suistimal ediliyor. Elbette bu biraz tatsız bir durum. Web uygulamalarınızın güvenliğine önem veriyorsanız, Nette Framework açıkçası sizin için en iyi seçimdir.


Siteler Arası Komut Dosyası Oluşturma (XSS) .[#toc-cross-site-scripting-xss]
============================================================================

Siteler Arası Komut Dosyası Yazma, yazılmamış girdi kullanan bir site bozma yöntemidir. Bir saldırgan kendi HTML veya JavaScript kodunu enjekte edebilir ve sayfanın görünümünü değiştirebilir, hatta kullanıcılar hakkında hassas bilgiler toplayabilir. XSS'ye karşı koruma basittir: tüm dizelerin ve girdilerin tutarlı ve doğru bir şekilde kaçması. Geleneksel olarak, kodlayıcınızın en ufak bir hata yapması ve bir kez unutması yeterli olurdu ve tüm web sitesi tehlikeye girebilirdi.

Bu tür bir enjeksiyona örnek olarak, kullanıcıya "kötü niyetli" bir komut dosyası ekleyen değiştirilmiş bir URL vermek verilebilir. Bir uygulama girdilerini düzgün bir şekilde kaçmazsa, böyle bir istek muhtemelen istemci tarafında bir komut dosyası çalıştıracaktır. Bu, örneğin, kimliğin çalınmasına yol açabilir.

```
https://example.com/?search=<script>alert('XSS attack.');</script>
```

Nette Framework, sizi Siteler Arası Komut Dosyası risklerinden sonsuza kadar kurtaracak yepyeni bir [Bağlam Farkında |latte:safety-first#context-aware-escaping] Kaçış teknolojisi ile geliyor. Tüm girdileri belirli bir bağlama göre otomatik olarak kaçar, böylece bir kodlayıcının yanlışlıkla bir şeyi unutması imkansızdır. Örnek olarak aşağıdaki şablonu ele alalım:

```latte
<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>
```

`{$message}` komutu bir değişkeni yazdırır. Diğer çerçeveler genellikle geliştiricileri kaçışları ve hatta bağlama göre ne tür kaçışları açıkça beyan etmeye zorlar. Ancak Nette Framework'te hiçbir şey bildirmenize gerek yoktur. Her şey otomatik, tutarlı ve doğrudur. Değişkeni `$message = 'Width 1/2"'` olarak ayarlarsak, framework bu HTML kodunu oluşturacaktır:

```latte
<p onclick="alert(&quot;Width 1\/2\&quot;&quot;)">Width 1/2&quot;</p>

<script>
document.title = "Width 1\/2\"";
</script>
```


Siteler Arası İstek Sahteciliği (CSRF) .[#toc-cross-site-request-forgery-csrf]
==============================================================================

Siteler Arası İstek Sahteciliği saldırısı, saldırganın kurbanın tarayıcısında kurbanın o anda oturum açtığı sunucuya sessizce bir istek yürüten bir sayfayı ziyaret etmesi için kurbanı kandırması ve sunucunun isteğin kurban tarafından kendi isteğiyle yapıldığına inanmasıdır. Sunucu, kurbanın kimliği altında ancak kurban farkında olmadan belirli bir eylem gerçekleştirir. Bu, veri değiştirme veya silme, mesaj gönderme vb. olabilir.

Nette Framework **sunuculardaki formları ve sinyalleri** bu tür saldırılara karşı otomatik olarak korur. Bu, başka bir etki alanından gönderilmelerini veya çağrılmalarını önleyerek yapılır. Korumayı kapatmak için formlar için aşağıdakileri kullanın:

```php
$form->allowCrossOrigin();
```

veya bir sinyal söz konusu olduğunda, `@crossOrigin` şeklinde bir açıklama ekleyin:

```php
/**
 * @crossOrigin
 */
public function handleXyz()
{
}
```

PHP 8'de öznitelikleri de kullanabilirsiniz:

```php
use Nette\Application\Attributes\CrossOrigin;

#[CrossOrigin]
public function handleXyz()
{
}
```


URL Saldırısı, Kontrol Kodları, Geçersiz UTF-8 .[#toc-url-attack-control-codes-invalid-utf-8]
=============================================================================================

Farklı terimlerin hepsi saldırganın uygulamanıza "kötü niyetli" bir girdi verme çabasıyla ilgilidir. Sonuçlar, bozuk XML çıktılarından (örn. arızalı RSS akışı) bir veritabanından hassas bilgilerin alınmasına ve kullanıcı şifrelerinin ele geçirilmesine kadar çok çeşitli olabilir. Bu saldırılara karşı koruma, bayt düzeyinde tutarlı UTF-8 kontrolüdür. Ve açıkçası, bunu bir çerçeve olmadan yapamazsınız, değil mi?

Nette Framework bunu sizin için otomatik olarak yapar. Hiçbir şey yapılandırmanız gerekmez ve uygulamanız güvende olur.


Oturum Korsanlığı, Oturum Çalınması, Oturum Sabitleme .[#toc-session-hijacking-session-stealing-session-fixation]
=================================================================================================================

Oturum yönetimi birkaç tür saldırı içerir. Saldırgan kurbanın oturum kimliğini çalabilir ya da taklit edebilir ve böylece gerçek parola olmadan bir web uygulamasına erişim sağlayabilir. Ardından saldırgan, kullanıcının yapabildiği her şeyi hiçbir iz bırakmadan yapabilir. Koruma, hem PHP'nin hem de web sunucusunun uygun şekilde yapılandırılmasında yatmaktadır.

Nette Framework PHP'yi otomatik olarak yapılandırır. Böylece geliştiricilerin bir oturumu nasıl yeterince korumalı hale getirecekleri konusunda endişelenmelerine gerek kalmaz ve tamamen uygulamanın önemli kısımlarına odaklanabilirler. Bunun için `ini_set()` işlevinin etkinleştirilmesi gerekir.


AynıSite Çerezi .[#toc-samesite-cookie]
=======================================

SameSite çerezleri, bir sayfanın yüklenmesine neyin yol açtığını tanımak için bir mekanizma sağlar. Bu da güvenlik açısından kesinlikle çok önemlidir.

SameSite bayrağı üç değere sahip olabilir: `Lax`, `Strict` ve `None` (HTTPS gerektirir). Bir sayfa için istek doğrudan web'in kendisinden geliyorsa veya kullanıcı sayfayı doğrudan adres çubuğuna girerek veya bir yer imine tıklayarak açıyorsa,
tarayıcı tüm çerezleri sunucuya gönderir (yani `Lax`, `Strict` ve `None` bayrakları ile). Bir kullanıcı web sitesine başka bir web sitesinden linke tıklayarak gelirse, `Lax` ve `None` bayraklı çerezler sunucuya iletilecektir. Eğer istek başka bir
Başka bir kaynaktan POST formu gönderme, bir iframe içine yükleme, JavaScript kullanma vb. gibi yollarla yalnızca `None` bayrağına sahip çerezler gönderilecektir.

Varsayılan olarak, Nette tüm çerezleri `Lax` bayrağı ile gönderir.


{{leftbar: www:@menu-common}}

Güvenlik Açığı Koruması

Arada sırada büyük bir güvenlik açığı duyuruluyor ve hatta suistimal ediliyor. Elbette bu biraz tatsız bir durum. Web uygulamalarınızın güvenliğine önem veriyorsanız, Nette Framework açıkçası sizin için en iyi seçimdir.

Siteler Arası Komut Dosyası Oluşturma (XSS)

Siteler Arası Komut Dosyası Yazma, yazılmamış girdi kullanan bir site bozma yöntemidir. Bir saldırgan kendi HTML veya JavaScript kodunu enjekte edebilir ve sayfanın görünümünü değiştirebilir, hatta kullanıcılar hakkında hassas bilgiler toplayabilir. XSS'ye karşı koruma basittir: tüm dizelerin ve girdilerin tutarlı ve doğru bir şekilde kaçması. Geleneksel olarak, kodlayıcınızın en ufak bir hata yapması ve bir kez unutması yeterli olurdu ve tüm web sitesi tehlikeye girebilirdi.

Bu tür bir enjeksiyona örnek olarak, kullanıcıya „kötü niyetli“ bir komut dosyası ekleyen değiştirilmiş bir URL vermek verilebilir. Bir uygulama girdilerini düzgün bir şekilde kaçmazsa, böyle bir istek muhtemelen istemci tarafında bir komut dosyası çalıştıracaktır. Bu, örneğin, kimliğin çalınmasına yol açabilir.

https://example.com/?search=<script>alert('XSS attack.');</script>

Nette Framework, sizi Siteler Arası Komut Dosyası risklerinden sonsuza kadar kurtaracak yepyeni bir Bağlam Farkında Kaçış teknolojisi ile geliyor. Tüm girdileri belirli bir bağlama göre otomatik olarak kaçar, böylece bir kodlayıcının yanlışlıkla bir şeyi unutması imkansızdır. Örnek olarak aşağıdaki şablonu ele alalım:

<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>

{$message} komutu bir değişkeni yazdırır. Diğer çerçeveler genellikle geliştiricileri kaçışları ve hatta bağlama göre ne tür kaçışları açıkça beyan etmeye zorlar. Ancak Nette Framework'te hiçbir şey bildirmenize gerek yoktur. Her şey otomatik, tutarlı ve doğrudur. Değişkeni $message = 'Width 1/2"' olarak ayarlarsak, framework bu HTML kodunu oluşturacaktır:

<p onclick="alert(&quot;Width 1\/2\&quot;&quot;)">Width 1/2&quot;</p>

<script>
document.title = "Width 1\/2\"";
</script>

Siteler Arası İstek Sahteciliği (CSRF)

Siteler Arası İstek Sahteciliği saldırısı, saldırganın kurbanın tarayıcısında kurbanın o anda oturum açtığı sunucuya sessizce bir istek yürüten bir sayfayı ziyaret etmesi için kurbanı kandırması ve sunucunun isteğin kurban tarafından kendi isteğiyle yapıldığına inanmasıdır. Sunucu, kurbanın kimliği altında ancak kurban farkında olmadan belirli bir eylem gerçekleştirir. Bu, veri değiştirme veya silme, mesaj gönderme vb. olabilir.

Nette Framework sunuculardaki formları ve sinyalleri bu tür saldırılara karşı otomatik olarak korur. Bu, başka bir etki alanından gönderilmelerini veya çağrılmalarını önleyerek yapılır. Korumayı kapatmak için formlar için aşağıdakileri kullanın:

$form->allowCrossOrigin();

veya bir sinyal söz konusu olduğunda, @crossOrigin şeklinde bir açıklama ekleyin:

/**
 * @crossOrigin
 */
public function handleXyz()
{
}

PHP 8'de öznitelikleri de kullanabilirsiniz:

use Nette\Application\Attributes\CrossOrigin;

#[CrossOrigin]
public function handleXyz()
{
}

URL Saldırısı, Kontrol Kodları, Geçersiz UTF-8

Farklı terimlerin hepsi saldırganın uygulamanıza „kötü niyetli“ bir girdi verme çabasıyla ilgilidir. Sonuçlar, bozuk XML çıktılarından (örn. arızalı RSS akışı) bir veritabanından hassas bilgilerin alınmasına ve kullanıcı şifrelerinin ele geçirilmesine kadar çok çeşitli olabilir. Bu saldırılara karşı koruma, bayt düzeyinde tutarlı UTF-8 kontrolüdür. Ve açıkçası, bunu bir çerçeve olmadan yapamazsınız, değil mi?

Nette Framework bunu sizin için otomatik olarak yapar. Hiçbir şey yapılandırmanız gerekmez ve uygulamanız güvende olur.

Oturum Korsanlığı, Oturum Çalınması, Oturum Sabitleme

Oturum yönetimi birkaç tür saldırı içerir. Saldırgan kurbanın oturum kimliğini çalabilir ya da taklit edebilir ve böylece gerçek parola olmadan bir web uygulamasına erişim sağlayabilir. Ardından saldırgan, kullanıcının yapabildiği her şeyi hiçbir iz bırakmadan yapabilir. Koruma, hem PHP'nin hem de web sunucusunun uygun şekilde yapılandırılmasında yatmaktadır.

Nette Framework PHP'yi otomatik olarak yapılandırır. Böylece geliştiricilerin bir oturumu nasıl yeterince korumalı hale getirecekleri konusunda endişelenmelerine gerek kalmaz ve tamamen uygulamanın önemli kısımlarına odaklanabilirler. Bunun için ini_set() işlevinin etkinleştirilmesi gerekir.

SameSite çerezleri, bir sayfanın yüklenmesine neyin yol açtığını tanımak için bir mekanizma sağlar. Bu da güvenlik açısından kesinlikle çok önemlidir.

SameSite bayrağı üç değere sahip olabilir: Lax, Strict ve None (HTTPS gerektirir). Bir sayfa için istek doğrudan web'in kendisinden geliyorsa veya kullanıcı sayfayı doğrudan adres çubuğuna girerek veya bir yer imine tıklayarak açıyorsa, tarayıcı tüm çerezleri sunucuya gönderir (yani Lax, Strict ve None bayrakları ile). Bir kullanıcı web sitesine başka bir web sitesinden linke tıklayarak gelirse, Lax ve None bayraklı çerezler sunucuya iletilecektir. Eğer istek başka bir Başka bir kaynaktan POST formu gönderme, bir iframe içine yükleme, JavaScript kullanma vb. gibi yollarla yalnızca None bayrağına sahip çerezler gönderilecektir.

Varsayılan olarak, Nette tüm çerezleri Lax bayrağı ile gönderir.