freeCodeCamp/guide/portuguese/php/security/cross-site-scripting/index.md

83 lines
4.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

---
title: Cross Site Scripting
localeTitle: Cross Site Scripting
---
## Cross Site Scripting
Cross Site Scripting é um tipo de vulnerabilidade em um aplicativo da web causado pelo programador não sanear a entrada antes de enviar a entrada para o navegador da web (por exemplo, um comentário em um blog). É comumente usado para executar JavaScript mal-intencionado no navegador da Web para fazer ataques, como roubar cookies de sessão entre outras ações maliciosas, para obter privilégios de nível superior no aplicativo da Web.
### Exemplo de ataque de script entre sites
Um blog permite que os usuários estilizem seus comentários com tags HTML, no entanto, o script que alimenta o blog não elimina as tags `<script>` permitindo que qualquer usuário execute o javascript na página. Um invasor pode usar isso como vantagem para executar JavaScript mal-intencionado no navegador. Eles podem infectar usuários com malware, roubar cookies de sessão e muito mais.
```HTML
<script>
alert('Cross Site Scripting!');
</script>
```
### Defendendo seu site contra ataques de script entre sites em PHP
No PHP, existem duas funções principais, `htmlspecialchars()` e `strip_tags()` , embutidas para se proteger contra ataques de script entre sites.
A função `htmlspecialchars($string)` impedirá que uma string HTML seja processada como HTML e a exiba como texto simples no navegador da web. **exemplo de código htmlspecialchars ()**
```PHP
<?php
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
echo htmlspecialchars($usercomment);
```
A outra abordagem é a `strip_tags($string, $allowedtags)` que remove todas as tags HTML, exceto as tags HTML que você `strip_tags($string, $allowedtags)` lista de permissões. É importante notar que com a `strip_tags()` você tem que ter mais cuidado, esta função não impede o usuário de incluir o javascript como um link, você terá que higienizar isso por conta própria.
**exemplo de código strip\_tags ()**
```php
<?php
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
$allowedtags = "<p><a><h1><h2><h3>";
echo strip_tags($usercomment, $allowedtags);
```
**Definindo o cabeçalho de proteção X-XSS:**
No PHP você pode enviar o `X-XSS-Protection` Header, que dirá aos navegadores para verificar se há um ataque Cross Site Scripting refletido e bloquear o carregamento da página. Isso não impede que todos os ataques de script entre sites sejam apenas refletidos e devem ser usados em combinação com outros métodos.
```PHP
<?php
header("X-XSS-Protection: 1; mode=block");
```
**Escrevendo sua própria função de higienização** Outra opção, se você quiser mais controle sobre como a sanitização funciona, é escrever sua própria função de Sanitização de HTML, isso não é recomendado para iniciantes em PHP, pois um erro tornaria seu site vulnerável.
### Defendendo seu site contra ataques de script entre sites com uma política de segurança de conteúdo
Uma abordagem eficaz para impedir ataques de script entre sites, que podem exigir muitos ajustes no design e na base de código de seu aplicativo da Web, é usar uma política de segurança de conteúdo.
#### Definir uma política de segurança de conteúdo como um cabeçalho HTTP
A maneira mais comum de definir uma política de segurança de conteúdo é configurando-a diretamente no cabeçalho HTTP. Isso pode ser feito pelo servidor da Web editando sua configuração ou enviando-o pelo PHP.
**Exemplo de uma política de segurança de conteúdo definida em um cabeçalho HTTP**
```php
<?php
header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");
```
#### Definir uma política de segurança de conteúdo como metatags
Você pode incluir sua Política de segurança de conteúdo no HTML da página e defini-la página por página. Este método requer que você defina em cada página ou você perde o benefício da política.
**Exemplo de uma política de segurança de conteúdo definida em uma meta tag HTML**
```HTML
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
#### Mais Informações:
* [OWASP Wiki - Cross Site Scripting](https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))
* [php.net strip\_tags () manual](https://secure.php.net/manual/en/function.strip-tags.php)
* [php.net htmlspecialchars () manual](https://secure.php.net/manual/en/function.htmlspecialchars.php)
* [MDN - Política de segurança de conteúdo (CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)