aboutsummaryrefslogtreecommitdiff
path: root/files/pt-br/web/http/csp/index.html
blob: 277514de3ce0a772432bdaaa839e1d87593cb90e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
---
title: Utilizando Políticas de Segurança de Conteúdo
slug: Web/HTTP/CSP
tags:
  - Política de Segurança de Conteúdo
  - Segurança
translation_of: Web/HTTP/CSP
---
<p>{{ gecko_minversion_header("2.0") }}</p>

<p class="summary"></p>

<p><strong>Content Security Policy</strong> (Política de Segurança de Conteúdo, também conhecida como {{Glossary("CSP")}}) é uma camada adicional de segurança que facilita a detecção e mitigação de certos tipos de ataques, incluindo Cross Site Scripting ({{Glossary("XSS")}}) e ataques de injeção de dados. Esses ataques são utilizados para diversos fins, e eles vão desde roubo de dados até desfiguração do site para distribuição de malware. </p>

<p>O CSP foi projetado para ser totalmente compatível retroatívelmente (come exceção da versão 2 do CSP onde existem algumas inconsistências explicitamente mencionadas com compatibilidade retroativa; mais detalhes podem ser encontrados <a href="https://www.w3.org/TR/CSP2">aqui</a> na seção 1.1). Os navegadores que não possuem suporte para o CSP ainda irão funcionar com servidores que o implementarem, e vice-versa: navegadores que não fornecem suporte podem simplesmente ignora-lo, funcionando normalmente, utilizando a norma padrão de <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy">same-origin policy</a> (política de mesma origem) para conteúdo web. Se o site não oferecer o cabeçaho CSP, os navegadores também utilizam a política de same-origin.</p>

<p>Para habilitar o CSP, você precisa configurar seu web server para retornar o cabeçalho {{HTTPHeader("Content-Security-Policy")}} (algumas vezes você verá menções para o cabeçalho <code>X-Content-Security-Policy</code>, mas essa é uma versão antiga que você não precisa especificar mais.</p>

<p>Alternativamente, o elemento {{HTMLElement("meta")}} pode ser usado para configurar a política, por exemplo: <code>&lt;meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"&gt;</code></p>

<h2 id="Ameaças">Ameaças</h2>

<h3 id="Mitigando_cross_site_scripting">Mitigando cross site scripting</h3>

<p>Um objetivo primário do CSP é de mitigar e reportar ataques XSS.  Os ataques de XSS exploram a confiaça do navegador sobre o conteúdo recebido pelo servidor. Scripts maliciosos são executados pelo navegador da vítima porque o navegador confia na origem do conteúdo, mesmo quando sua origem não está vindo de onde parece que está vindo.</p>

<p>O CSP faz com que seja possível para administradores de servidores reduzirem ou eliminarem os vetores em que os ataques de XSS podem ocorrer, especificando os domínios que o navegador deve considerar como origens válidas de scripts para serem executados. Um navegador comátivel com o CSP só irá executar então scripts que vierem de arquivos que estejam presentes nos domínios que foram previamente especificados como confiáveis, ignorando todos os outros scripts (incluindo scripts inline e atributos HTML de manipulação de eventos).</p>

<p>Como uma forma de proteção final, os sites que querem nunca permitir a execução de scripts podem optar para desabilitar a execução globalmente.</p>

<h3 id="Mitigando_ataques_de_captura_de_pacotes">Mitigando ataques de captura de pacotes</h3>

<p class="summary"></p>

<p class="summary">Além da restrição de domínios deonde o conteúdo pode ser carregado, o servidor consegue especificar quais protocolos estão habilitados para utilização; por exemplo (e literalmente, de um ponto de vista de segurança), um servidor pode especificar que todo conteúdo deve ser carregando utilizando HTTPS. Uma estratégia completa de transmissão de dados segura inclui não só impor o protocolo HTTPS para transferência de dados, mas também marcar todos os <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies"><em>cookies</em> com a </a><em><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies">secure flag</a> </em>e prover redirecionamentos automáticos de páginas HTTP para suas versões HTTPS. Os sites também podem utilizar o cabeçalho {{HTTPHeader("Strict-Transport-Security")}} para garantir que os navegadores se conectem neles apenas usando um canal criptografado.</p>

<h2 class="summary" id="Utilizando_o_CSP">Utilizando o CSP</h2>

<p>Configurar uma Política de Segurança de Conteúdo envolve adicionar o header HTTP <code>Content-Security-Policy </code>a uma página web e adicionar valores para controlar recursos que o user-agent é habilitado para carregar para aquela página. Por exemplo, uma página que faz o upload e exibe imagens poderia permitir imagens de qualquer lugar, mas restringir um form action de um end point específico. Uma política de segurança de conteúdo devidamente concebida ajuda a proteger a página contra ataques do tipo cross site scripting. Este artigo explica como construir tais headers devidamente, e provê exemplos.</p>

<p>Anteriormente ao Firefox 23, o header HTTP <code>X-Content-Security-Policy </code>era utilizado. Do Firefox 23 em diante começou-se a usar o novo padrão, o header <code>Content-Security-Policy. </code>Durante a transição do header anterior para o novo header, sites podiam enviar ambos os header <code>X-Content-Security-Policy </code>e<code> Content-Security-Policy</code>. Neste caso, o header <code>X-Content-Security-Policy</code> seria ignorado e a política contida no header <code>Content-Security-Policy</code>  seria utilizada.</p>

<h2 id="Especificando_sua_política">Especificando sua política</h2>

<p>Você pode usar o <code>Content-Security-Policy</code> HTTP header para especificar sua política, dessa forma:</p>

<pre class="notranslate">Content-Security-Policy: <em>policy</em>
</pre>

<p>A política é uma string contendo as <a href="/en/Security/CSP/CSP_policy_directives" title="en/Security/CSP/CSP policy directives">diretivas de políticas</a> descrevendo seu Content Security Policy.</p>

<h2 id="Escrevendo_uma_política">Escrevendo uma política</h2>

<p>Uma politica é descrita usando uma série de <a href="https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives">diretivas de políticas</a>, cada uma descrevendo uma política para certos tipos de recursos ou áreas de política. Sua política deve incluir uma diretiva de política padrão <code>default-src</code>, que cobre os outros tipos de recursos quando eles não possuem política própria. (Para uma lista completa, veja a descrição da diretiva default-src.) Uma política precisa incluir uma diretiva<code> default-src</code> ou script-src para evitar que scripts inline sejam executados, assim como bloquear o uso de <code>eval()</code>. Uma política precisa incluir uma diretiva <code>default-src</code> ou <code>style-src </code>para restringir estilos inline de serem aplicados a partir de um elemento <code>&lt;style&gt;</code> ou um <code>.style</code> atributo.</p>

<p>A sintaxe para uma política é uma string de diretivas separadas por ponto e vírgula <code>;</code>, cada seguindo a sintaxe descrita em <a href="/en/Security/CSP/CSP_policy_directives#Supported_policy_directives" title="en/Security/CSP/CSP policy directives#Supported policy directives">Diretivas de políticas suportadas</a>.</p>

<h2 id="Exemplos_Casos_de_uso_comuns">Exemplos: Casos de uso comuns</h2>

<p>A sessão provê alguns exemplos de alguns cenários comuns de política de segurança.</p>

<h3 id="Exemplo_1">Exemplo 1</h3>

<p>Um administrador de <em>web site</em> quer que todo o conteúdo venha do mesmo <em>site</em> de origem (excluindo seus subdomínios).</p>

<pre class="notranslate">Content-Security-Policy: default-src 'self'
</pre>

<h3 id="Exemplo_2">Exemplo 2</h3>

<p>Um administrador de <em>web site</em> quer que todo o conteúdo venha do mesmo <em>site</em> de origem, e também de um domínio confiável e seus todos seus subdomínios (não necessariamente precisa ser o mesmo domínio onda a CSP está inserida).</p>

<pre class="notranslate">Content-Security-Policy: default-src 'self' *.trusted.com
</pre>

<h3 id="Exemplo_3">Exemplo 3</h3>

<p>A web site administrator wants to allow users of a web application to include images from any origin in their own content, but to restrict audio or video media to trusted providers, and all scripts only to a specific server that hosts trusted code.</p>

<pre class="notranslate">Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
</pre>

<p>Here, by default, content is only permitted from the document's origin, with the following exceptions:</p>

<ul>
 <li>Images may loaded from anywhere (note the "*" wildcard).</li>
 <li>Media is only allowed from media1.com and media2.com (and not from subdomains of those sites).</li>
 <li>Executable script is only allowed from userscripts.example.com.</li>
</ul>

<h3 id="Exemplo_4">Exemplo 4</h3>

<p>A web site administrator for an online banking site wants to ensure that all its content is loaded using SSL, in order to prevent attackers from eavesdropping on requests.</p>

<pre class="notranslate">Content-Security-Policy: default-src https://onlinebanking.jumbobank.com
</pre>

<p>The server only permits access to documents being loaded specifically over HTTPS through the single origin onlinebanking.jumbobank.com.</p>

<h3 id="Exemplo_5">Exemplo 5</h3>

<p>A web site administrator of a web mail site wants to allow HTML in email, as well as images loaded from anywhere, but not JavaScript or other potentially dangerous content.</p>

<pre class="notranslate">Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *
</pre>

<p>Note that this example doesn't specify a <a href="/en/Security/CSP/CSP_policy_directives#script-src" title="en/Security/CSP/CSP policy directives#script-src"><code>script-src</code></a>; with the example CSP, this site uses the setting specified by the <a href="/en/Security/CSP/CSP_policy_directives#allow" title="en/Security/CSP/CSP policy directives#allow"><code>default-src</code></a> directive, which means that scripts can be loaded only from the originating server.</p>

<h2 id="Testando_sua_política">Testando sua política</h2>

<p>To ease deployment, CSP can be deployed in <a class="link-https" href="http://www.w3.org/TR/CSP/#content-security-policy-report-only-header-field" title="https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-unofficial-draft-20110315.html#report-only-mode">"report-only" mode</a>. The policy is not enforced, but any violations are reported to a provided URI. Additionally, a report-only header can be used to test a future revision to a policy without actually deploying it.</p>

<p>You can use the <code>Content-Security-Policy-Report-Only</code> HTTP header to specify your policy, like this:</p>

<pre class="notranslate">Content-Security-Policy-Report-Only: <em>policy</em>
</pre>

<p>If both a <code>Content-Security-Policy-Report-Only</code> header and a <code>Content-Security-Policy</code> header are present in the same response, both policies are honored. The policy specified in <code>Content-Security-Policy</code> headers is enforced while the <code>Content-Security-Policy-Report-Only</code> policy generates reports but is not enforced.</p>

<p>Note that the <code>X-Content-Security-Policy-Report-Only</code> header was used before Firefox 23. If both the <code>X-Content-Security-Policy-Report-Only</code> and <code>Content-Security-Policy-Report-Only</code> are sent, the <code>Content-Security-Policy-Report-Only</code> will be used and the <code>X-Content-Security-Policy-Report-Only</code> will be ignored.</p>

<p>The <a href="https://addons.mozilla.org/en-us/firefox/addon/newusercspdesign/" title="https://addons.mozilla.org/en-us/firefox/addon/newusercspdesign/">UserCSP Addon</a> also helps test and develop Content Security Policies for a site.</p>

<h2 id="Veja_também">Veja também</h2>

<ul>
 <li><a href="/en/Security/CSP/Introducing_Content_Security_Policy" title="en/Security/CSP/Introducing Content Security Policy">Introducing Content Security Policy</a></li>
 <li><a href="/en/Security/CSP/CSP_policy_directives" title="en/Security/CSP/CSP policy directives">CSP policy directives</a></li>
 <li><a href="/en/Security/CSP/Using_CSP_violation_reports" title="en/Security/CSP/Using CSP violation reports">Using CSP violation reports</a></li>
 <li><a class="external" href="http://brandon.sternefamily.net/posts/2010/10/content-security-policy-recommendation-bookmarklet/" title="http://brandon.sternefamily.net/posts/2010/10/content-security-policy-recommendation-bookmarklet/">Content Security Policy recommendation bookmarklet</a></li>
</ul>

<div class="noinclude">
<p>{{ languages( { "ja": "ja/Security/CSP/Using_Content_Security_Policy" } ) }}</p>
</div>