Nette Documentation Preview

syntax
Proteção contra vulnerabilidades
********************************

.[perex]
De vez em quando, uma grande falha de segurança é anunciada ou mesmo abusada. Com certeza, isso é um pouco desagradável. Se você se preocupa com a segurança de suas aplicações web, o Nette Framework é francamente a melhor escolha para você.


Roteiro transversal (XSS) .[#toc-cross-site-scripting-xss]
==========================================================

O Cross-Site Scripting é um método de interrupção do site que utiliza entrada não modelada. Um atacante pode injetar seu próprio código HTML ou JavaScript e mudar a aparência da página ou mesmo reunir informações sensíveis sobre os usuários. A proteção contra XSS é simples: fuga consistente e correta de todas as cadeias de caracteres e entradas. Tradicionalmente, seria suficiente se seu codificador cometesse apenas um pequeno erro e esquecesse uma vez, e todo o website poderia ser comprometido.

Um exemplo de tal injeção pode ser a inserção de um URL alterado, que insere um script "malicioso". Se uma aplicação não escapar de suas entradas corretamente, tal solicitação possivelmente executaria um script do lado do cliente. Isto pode, por exemplo, levar ao roubo de identidade.

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

Nette Framework vem com uma novíssima tecnologia de [Context-Aware Escaping |latte:safety-first#context-aware-escaping], que o livrará dos riscos do Cross-Site Scripting para sempre. Ela escapa automaticamente de todas as entradas baseadas em um determinado contexto, de modo que é impossível para um codificador esquecer acidentalmente algo. Considere o seguinte modelo como um exemplo:

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

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

O comando `{$message}` imprime uma variável. Outras estruturas geralmente forçam os desenvolvedores a declarar explicitamente a fuga, e até mesmo que tipo de fuga com base no contexto. No entanto, em Nette Framework você não precisa declarar nada. Tudo é automático, consistente e justo. Se definirmos a variável para `$message = 'Width 1/2"'`, o framework irá gerar este código HTML:

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

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


Falsificação de pedido entre locais (CSRF) .[#toc-cross-site-request-forgery-csrf]
==================================================================================

Um ataque de Pedido Cruzado de Falsificação é que o atacante atrai a vítima para visitar uma página que executa silenciosamente um pedido no navegador da vítima para o servidor onde a vítima está atualmente logada, e o servidor acredita que o pedido foi feito pela vítima à sua vontade. O servidor executa uma determinada ação sob a identidade da vítima, mas sem que a vítima se dê conta disso. Ele pode estar alterando ou apagando dados, enviando uma mensagem, etc.

Nette Framework ** protege automaticamente as formas e sinais nos apresentadores*** deste tipo de ataque. Isto é feito impedindo que eles sejam enviados ou chamados de outro domínio. Para desativar a proteção, use o seguinte para os formulários:

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

ou, no caso de um sinal, acrescente uma anotação `@crossOrigin`:

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

No PHP 8, você também pode usar atributos:

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

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


URL Attack, Códigos de controle, Inválido UTF-8 .[#toc-url-attack-control-codes-invalid-utf-8]
==============================================================================================

Termos diferentes, todos relacionados ao esforço do atacante para dar à sua aplicação uma contribuição "maliciosa". Os resultados podem variar muito, desde saídas XML quebradas (ou seja, fluxo RSS com mau funcionamento) até a obtenção de informações sensíveis de um banco de dados para a obtenção de senhas de usuários. A proteção contra estes ataques é uma verificação consistente UTF-8 no nível de bytes. E francamente, você não faria isso sem uma estrutura, certo?

A Nette Framework faz isso para você, automaticamente. Você não precisa configurar absolutamente nada e sua aplicação será segura.


Seqüestro de sessão, Roubo de sessão, Fixação de sessão .[#toc-session-hijacking-session-stealing-session-fixation]
===================================================================================================================

A gestão da sessão envolve alguns tipos de ataques. O atacante pode roubar a identificação da sessão da vítima ou forjar uma e assim obter acesso a uma aplicação web sem a senha real. Então o atacante pode fazer tudo o que o usuário puder, sem qualquer vestígio. A proteção está na configuração adequada tanto do PHP quanto do próprio servidor web.

O Nette Framework configura o PHP automaticamente. Assim, os desenvolvedores não têm que se preocupar em como fazer uma sessão suficientemente protegida e podem se concentrar totalmente nas partes-chave da aplicação. Isto requer que a função `ini_set()` seja habilitada.


Cookie SameSite .[#toc-samesite-cookie]
=======================================

Os cookies do SameSite fornecem um mecanismo para reconhecer o que levou a uma carga de página. O que é absolutamente crucial por razões de segurança.

A bandeira SameSite pode ter três valores: `Lax`, `Strict` e `None` (requer HTTPS). Se uma solicitação de uma página vem diretamente da própria web ou o usuário abre a página digitando-a diretamente na barra de endereço ou clicando em um marcador de página,
o navegador envia todos os cookies para o servidor (ou seja, com as bandeiras `Lax`, `Strict` e `None`). Se um usuário chegar ao site via link de outro site, os cookies com as bandeiras `Lax` e `None` serão passados para o servidor. Se a solicitação surgir em outro
de outra origem, carregamento dentro de um iframe, usando JavaScript, etc., somente serão enviados cookies com a bandeira `None`.

Por padrão, a Nette envia todos os cookies com a bandeira `Lax`.


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

Proteção contra vulnerabilidades

De vez em quando, uma grande falha de segurança é anunciada ou mesmo abusada. Com certeza, isso é um pouco desagradável. Se você se preocupa com a segurança de suas aplicações web, o Nette Framework é francamente a melhor escolha para você.

Roteiro transversal (XSS)

O Cross-Site Scripting é um método de interrupção do site que utiliza entrada não modelada. Um atacante pode injetar seu próprio código HTML ou JavaScript e mudar a aparência da página ou mesmo reunir informações sensíveis sobre os usuários. A proteção contra XSS é simples: fuga consistente e correta de todas as cadeias de caracteres e entradas. Tradicionalmente, seria suficiente se seu codificador cometesse apenas um pequeno erro e esquecesse uma vez, e todo o website poderia ser comprometido.

Um exemplo de tal injeção pode ser a inserção de um URL alterado, que insere um script „malicioso“. Se uma aplicação não escapar de suas entradas corretamente, tal solicitação possivelmente executaria um script do lado do cliente. Isto pode, por exemplo, levar ao roubo de identidade.

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

Nette Framework vem com uma novíssima tecnologia de Context-Aware Escaping, que o livrará dos riscos do Cross-Site Scripting para sempre. Ela escapa automaticamente de todas as entradas baseadas em um determinado contexto, de modo que é impossível para um codificador esquecer acidentalmente algo. Considere o seguinte modelo como um exemplo:

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

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

O comando {$message} imprime uma variável. Outras estruturas geralmente forçam os desenvolvedores a declarar explicitamente a fuga, e até mesmo que tipo de fuga com base no contexto. No entanto, em Nette Framework você não precisa declarar nada. Tudo é automático, consistente e justo. Se definirmos a variável para $message = 'Width 1/2"', o framework irá gerar este código HTML:

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

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

Falsificação de pedido entre locais (CSRF)

Um ataque de Pedido Cruzado de Falsificação é que o atacante atrai a vítima para visitar uma página que executa silenciosamente um pedido no navegador da vítima para o servidor onde a vítima está atualmente logada, e o servidor acredita que o pedido foi feito pela vítima à sua vontade. O servidor executa uma determinada ação sob a identidade da vítima, mas sem que a vítima se dê conta disso. Ele pode estar alterando ou apagando dados, enviando uma mensagem, etc.

Nette Framework ** protege automaticamente as formas e sinais nos apresentadores*** deste tipo de ataque. Isto é feito impedindo que eles sejam enviados ou chamados de outro domínio. Para desativar a proteção, use o seguinte para os formulários:

$form->allowCrossOrigin();

ou, no caso de um sinal, acrescente uma anotação @crossOrigin:

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

No PHP 8, você também pode usar atributos:

use Nette\Application\Attributes\CrossOrigin;

#[CrossOrigin]
public function handleXyz()
{
}

URL Attack, Códigos de controle, Inválido UTF-8

Termos diferentes, todos relacionados ao esforço do atacante para dar à sua aplicação uma contribuição „maliciosa“. Os resultados podem variar muito, desde saídas XML quebradas (ou seja, fluxo RSS com mau funcionamento) até a obtenção de informações sensíveis de um banco de dados para a obtenção de senhas de usuários. A proteção contra estes ataques é uma verificação consistente UTF-8 no nível de bytes. E francamente, você não faria isso sem uma estrutura, certo?

A Nette Framework faz isso para você, automaticamente. Você não precisa configurar absolutamente nada e sua aplicação será segura.

Seqüestro de sessão, Roubo de sessão, Fixação de sessão

A gestão da sessão envolve alguns tipos de ataques. O atacante pode roubar a identificação da sessão da vítima ou forjar uma e assim obter acesso a uma aplicação web sem a senha real. Então o atacante pode fazer tudo o que o usuário puder, sem qualquer vestígio. A proteção está na configuração adequada tanto do PHP quanto do próprio servidor web.

O Nette Framework configura o PHP automaticamente. Assim, os desenvolvedores não têm que se preocupar em como fazer uma sessão suficientemente protegida e podem se concentrar totalmente nas partes-chave da aplicação. Isto requer que a função ini_set() seja habilitada.

Os cookies do SameSite fornecem um mecanismo para reconhecer o que levou a uma carga de página. O que é absolutamente crucial por razões de segurança.

A bandeira SameSite pode ter três valores: Lax, Strict e None (requer HTTPS). Se uma solicitação de uma página vem diretamente da própria web ou o usuário abre a página digitando-a diretamente na barra de endereço ou clicando em um marcador de página, o navegador envia todos os cookies para o servidor (ou seja, com as bandeiras Lax, Strict e None). Se um usuário chegar ao site via link de outro site, os cookies com as bandeiras Lax e None serão passados para o servidor. Se a solicitação surgir em outro de outra origem, carregamento dentro de um iframe, usando JavaScript, etc., somente serão enviados cookies com a bandeira None.

Por padrão, a Nette envia todos os cookies com a bandeira Lax.