aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/http/csp/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/es/web/http/csp/index.html')
-rw-r--r--files/es/web/http/csp/index.html198
1 files changed, 198 insertions, 0 deletions
diff --git a/files/es/web/http/csp/index.html b/files/es/web/http/csp/index.html
new file mode 100644
index 0000000000..c01d4c28c2
--- /dev/null
+++ b/files/es/web/http/csp/index.html
@@ -0,0 +1,198 @@
+---
+title: Content Security Policy (CSP)
+slug: Web/HTTP/CSP
+tags:
+ - Política de Seguridad del Contenido
+translation_of: Web/HTTP/CSP
+---
+<div>{{HTTPSidebar}}</div>
+
+<p class="summary"><span class="tlid-translation translation"><span title=""><strong>Política de Seguridad del Contenido </strong>o<strong> </strong></span></span>( {{Glossary("CSP")}} ) - del inglés <em><strong>Content Security Policy</strong></em> - es una capa de seguridad adicional que ayuda a prevenir y mitigar algunos tipos de ataque, incluyendo Cross Site Scripting ( {{Glossary("XSS")}} ) y ataques de inyección de datos. Estos ataques son usados con diversos propósitos, desde robar información hasta desfiguración de sitios o distribución de malware .</p>
+
+<p>CSP está diseñado para ser completamente retrocompatible (excepto la versión 2 de CSP, donde hay algunas menciones explícitas de inconsistencia en la retrocompatibilidad; más detalles <a href="https://www.w3.org/TR/CSP2">aquí</a> sección 1.1).  Los navegadores que no lo soportan siguen funcionando con los servidores que lo implementan y viceversa: los navegadores que no soportan CSP simplemente lo ignoran, funcionando como siempre y delegando a la política mismo-origen para contenido web. Si el sitio web no ofrece la cabecera CSP, los navegadores igualmente usan la política estándar <a href="/en-US/docs/Web/Security/Same-origin_policy" title="En/Same origin policy for JavaScript">mismo-origen</a>.</p>
+
+<p>Para habilitar CSP, necesitas configurar tu servidor web para que devuelva la cabecera HTTP {{HTTPHeader("Content-Security-Policy")}} (en ocasiones verás menciones de la cabecera <code>X-Content-Security-Policy</code>, pero se trata de una versión antigua y no necesitas especificarla más).</p>
+
+<p>Alternativamente, el elemento {{HTMLElement("meta")}} puede ser usado para configurar una política, por ejemplo: <code>&lt;meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"&gt;</code></p>
+
+<h2 id="Amenazas">Amenazas</h2>
+
+<h3 id="Mitigando_el_cross_site_scripting">Mitigando el cross site scripting</h3>
+
+<p>El principal objetivo del CSP es mitigar y reportar ataques XSS. Los ataques XSS se aprovechan de la confianza del navegador en el contenido que recibe del servidor. El navegador de la víctima ejecutará los scripts maliciosos porque confía en la fuente del contenido, aun cuando dicho contenido no provenga  de donde se supone.</p>
+
+<p>CSP hace posible que los  administradores de servidores reduzcan o eliminen las posibilidades de ocurrencia de XSS mediante la especificación de dominios que el navegador considerará como fuentes válidas de scripts ejecutables. Un navegador compatible con  CSP solo ejecutará scripts de los archivos fuentes especificados en esa lista blanca de dominios, ignorando completamente cualquier otro script (incluyendo los scripts inline y los atributos de HTML de manejo de eventos).</p>
+
+<p>Como medida extrema de protección, los sitios que nunca requieran ejecutar scripts, <span class="tlid-translation translation"><span title="">pueden optar por rechazar globalmente la ejecución de scripts.</span></span></p>
+
+<h3 id="Mitigando_los_ataques_de_análisis_de_paquetes_packet_sniffing_attacks">Mitigando los ataques de análisis de paquetes <em>(packet sniffing attacks)</em></h3>
+
+<p><span class="tlid-translation translation"><span title="">Además de restringir los dominios desde los cuales se puede cargar el contenido, el servidor puede especificar qué protocolos se pueden usar;</span> <span title="">por ejemplo (e idealmente, desde un punto de vista de seguridad), un servidor puede especificar que todo el contenido debe cargarse utilizando HTTPS.</span> <span title="">Una estrategia completa de seguridad en la transmisión de datos incluye no solo aplicar HTTPS para la transferencia de datos, sino también marcar todas las cookies con el indicador de seguridad y proporcionar redirecciones automáticas desde las páginas HTTP a sus homólogas HTTPS.</span> <span title="">Los sitios también pueden usar la cabecera HTTP      {{HTTPHeader ("Strict-Transport-Security")}} para garantizar que los navegadores se conecten a ellos solo a través de un canal cifrado.</span></span></p>
+
+<h2 id="Utilizando_CSP">Utilizando CSP</h2>
+
+<p><span class="tlid-translation translation"><span title="">La configuración de la Política de Seguridad del Contenido (CSP), consiste en agregar a una página web la cabecera</span></span> HTTP {{HTTPHeader("Content-Security-Policy")}}<span class="tlid-translation translation"><span title="">, y darle valores para controlar los recursos que el agente de usuario puede cargar para esa página.</span> <span title="">Por ejemplo, una página que carga y muestra imágenes podría permitir imágenes desde cualquier lugar, pero pudiera restringir una acción de formulario a una ruta específica.</span> <span title="">Una Política de Seguridad de Contenido adecuadamente diseñada ayuda a proteger una página contra un ataque de scripts entre sitios.</span> <span title="">Este artículo explica cómo construir dichas cabeceras correctamente y proporciona ejemplos.</span></span></p>
+
+<h3 id="Especificando_una_política">Especificando una política</h3>
+
+<p>Para especificar una política, se puede utilizar la cabecera HTTP      {{HTTPHeader("Content-Security-Policy")}}  de la siguiente manera:</p>
+
+<pre class="syntaxbox">Content-Security-Policy: <em>política</em></pre>
+
+<p>La <em>política</em> es una cadena de caracteres que contiene las directivas que describen una determinada <span class="tlid-translation translation"><span title="">Política de Seguridad de Contenido</span></span>.</p>
+
+<h3 id="Describiendo_una_política">Describiendo una política</h3>
+
+<p><span class="tlid-translation translation"><span title="">Una política se describe utilizando una serie de directivas de políticas, cada una de las cuales describe la política para un determinado tipo de recurso o área de política.</span> <span title="">Una política debe incluir una directiva de políticas {{CSP ("default-src")}}, que es una alternativa para otros tipos de recursos cuando no tienen políticas propias (para obtener una lista completa, consulte la descripción de la directiva </span></span>{{CSP("default-src")}}<span class="tlid-translation translation"><span title=""> ).</span> <span title="">Una política debe incluir una directiva   {{CSP ("default-src")}} o {{CSP ("script-src")}} para evitar la ejecución de scripts en línea, así como bloquear el uso de </span></span><code>eval()</code><span class="tlid-translation translation"><span title="">.</span> <span title="">Una política debe incluir una directiva {{CSP ("default-src")}} o {{CSP ("style-src")}} para restringir la aplicación de estilos en línea desde un elemento {{HTMLElement ("style")}}</span><span title="">} o un atributo </span></span><code>style</code><span class="tlid-translation translation"><span title="">.</span></span></p>
+
+<h2 id="Ejemplos_Casos_de_usos_frecuentes">Ejemplos: Casos de usos frecuentes</h2>
+
+<p><span class="tlid-translation translation"><span title="">Esta sección proporciona ejemplos de algunos escenarios frecuentes de políticas de seguridad.</span></span></p>
+
+<h3 id="Ejemplo_1">Ejemplo 1</h3>
+
+<p><span class="tlid-translation translation"><span title="">Un administrador del sitio web desea que todo el contenido provenga del mismo origen que el del sitio (esto excluye subdominios).</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src 'self'</pre>
+
+<h3 id="Ejemplo_2">Ejemplo 2</h3>
+
+<p><span class="tlid-translation translation"><span title="">El administrador de un sitio web desea permitir el contenido de un dominio de confianza y todos sus subdominios (no tiene que ser el mismo dominio en el que está configurado el CSP).</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src 'self' *.trusted.com</pre>
+
+<h3 id="Ejemplo_3">Ejemplo 3</h3>
+
+<p><span class="tlid-translation translation"><span title="">El administrador de un sitio web desea permitir que los usuarios de una aplicación web incluyan imágenes de cualquier origen en su propio contenido, pero restringen los medios de audio o video a proveedores de confianza, y todas las secuencias de comandos solo a un servidor específico que aloja un código de confianza.</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com</pre>
+
+<p><span class="tlid-translation translation"><span title="">Aquí, de forma predeterminada, el contenido solo se permite desde el origen del documento, con las siguientes excepciones:</span></span></p>
+
+<ul>
+ <li><span title="">Las imágenes pueden cargarse desde cualquier lugar (tenga en cuenta el comodín "*").</span></li>
+ <li><span class="tlid-translation translation"><span title="">Los archivos de medios solo están permitidos desde media1.com y media2.com (y no desde los subdominios de esos sitios).</span>     </span></li>
+ <li><span class="tlid-translation translation"><span title="">El script ejecutable solo está permitido desde userscripts.example.com.</span></span></li>
+</ul>
+
+<h3 id="Ejemplo_4">Ejemplo 4</h3>
+
+<p><span class="tlid-translation translation"><span title="">En administrador de un sitio web de banca en línea quiere asegurarse de que todo su contenido se cargue mediante SSL, para evitar que los atacantes puedan espiar las solicitudes.</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src https://onlinebanking.jumbobank.com</pre>
+
+<p><span class="tlid-translation translation"><span title="">El servidor solo permite el acceso a documentos que se cargan específicamente a través de HTTPS a través del único origen onlinebanking.jumbobank.com.</span></span></p>
+
+<h3 id="Ejemplo_5">Ejemplo 5</h3>
+
+<p><span class="tlid-translation translation"><span title="">El administrador de un sitio de correo web desea permitir HTML en el correo electrónico, así como imágenes cargadas desde cualquier lugar, pero no JavaScript u otro contenido potencialmente peligroso.</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src 'self' *.mailsite.com; img-src *</pre>
+
+<p><span class="tlid-translation translation"><span title="">Tenga en cuenta que este ejemplo no especifica un {{CSP ("script-src")}} ;</span> <span title="">con el CSP de ejemplo, este sitio utiliza la configuración especificada por la directiva {{CSP ("default-src")}} , lo que significa que los scripts solo se pueden cargar desde el servidor de origen.</span></span></p>
+
+<h2 id="Comprobando_una_política">Comprobando una política</h2>
+
+<p><span class="tlid-translation translation"><span title="">Para facilitar la implementación, CSP se puede implementar en modo de solo informe.</span> <span title="">La política no se aplica, pero cualquier violación se informa a un URI proporcionado.</span> <span title="">Además, se puede usar una cabecera de solo informe para probar una futura revisión de una política sin implementarla realmente.</span><br>
+ <br>
+ <span title="">Se puede usar la cabecera HTTP {{HTTPHeader ("Content-Security-Policy-Report-Only")}} para especificar una política de la siguiente manera:</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy-Report-Only: <em>policy</em> </pre>
+
+<p><span class="tlid-translation translation"><span title="">Si la cabecera {{HTTPHeader ("Content-Security-Policy-Report-Only")}} y la cabecera {{HTTPHeader ("Content-Security-Policy")}} están presentes en la misma respuesta, ambas políticas se cumplen.</span> <span title="">La política especificada en la cabecera </span></span><code>Content-Security-Policy</code><span class="tlid-translation translation"><span title=""> se aplica, mientras que la política </span></span><code>Content-Security-Policy-Report-Only</code><span class="tlid-translation translation"><span title=""> genera informes pero no se aplica.</span></span></p>
+
+<h2 id="Habilitación_de_informes">Habilitación de informes</h2>
+
+<p><span class="tlid-translation translation"><span title="">Por defecto, los informes de violación no son enviados.</span> <span title="">Para habilitar los informes de violación, debe especificar la directiva de políticas {{CSP ("report-uri")}} , proporcionando al menos un URI al que entregar los informes:</span></span></p>
+
+<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi</pre>
+
+<p><span class="tlid-translation translation"><span title="">Luego se debe configurar el servidor para recibir los informes;</span> <span title="">se pueden almacenar o procesar de la manera que considere apropiada.</span></span></p>
+
+<h2 id="Sintáxis_del_informe_de_violación">Sintáxis del informe de violación</h2>
+
+<p>El informe es un objeto JSON que contiene los datos siguientes:</p>
+
+<dl>
+ <dt><code>blocked-uri</code></dt>
+ <dd><span class="tlid-translation translation"><span title="">El URI del recurso bloqueado por la Política de Seguridad de Contenido.</span> <span title="">Si el URI bloqueado es de un origen diferente al del <strong>document-uri</strong>, el URI bloqueado se trunca para contener solo el esquema, el host y el puerto.</span></span></dd>
+</dl>
+
+<dl>
+ <dt><code>disposition</code></dt>
+ <dd>Toma el valor <code>"enforce"</code> o <code>"reporting"</code> dependiendo de si se utiliza la cabecera {{HTTPHeader("Content-Security-Policy-Report-Only")}} o <code>Content-Security-Policy</code>.</dd>
+ <dt><code>document-uri</code></dt>
+ <dd>El URI del documento donde ocurrió la violación.</dd>
+ <dt><code>effective-directive</code></dt>
+ <dd>La directiva cuya aplicación causó la violación.</dd>
+ <dt><code>original-policy</code></dt>
+ <dd>La política original especificada por la cabecera HTTP <code>Content-Security-Policy</code>.</dd>
+ <dt><code>referrer</code></dt>
+ <dd><span class="tlid-translation translation"><span title="">El referente del documento en el que ocurrió la violación.</span></span></dd>
+ <dt><code>script-sample</code></dt>
+ <dd><span class="tlid-translation translation"><span title="">Los primeros 40 caracteres del script inline, el controlador de eventos o el estilo que causó la violación.</span></span></dd>
+ <dt><code>status-code</code></dt>
+ <dd><span class="tlid-translation translation"><span title="">El código de estado HTTP del recurso en el que se creó una instancia del objeto global.</span></span></dd>
+ <dt><code>violated-directive</code></dt>
+ <dd><span class="tlid-translation translation"><span title="">El nombre de la sección de política que fue violada.</span></span></dd>
+</dl>
+
+<h2 id="Ejemplo_de_informe_de_violación">Ejemplo de informe de violación</h2>
+
+<div>Consideremos una página ubicada en <code><a class="external" href="http://example.com/signup.html" rel="freelink">http://example.com/signup.html</a></code> que tiene las siguiente política: rechazar todo, excepto las hojas de estilo provenientes de <code>cdn.example.com</code>.</div>
+
+<div>
+<pre class="syntaxbox">Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports</pre>
+</div>
+
+<div>El código HTML de <code>signup.html</code> es el siguiente:</div>
+
+<pre class="brush: html">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+ &lt;head&gt;
+ &lt;title&gt;Sign Up&lt;/title&gt;
+ &lt;link rel="stylesheet" href="css/style.css"&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ ... Content ...
+ &lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<div>¿Puedes ver el error? <span class="tlid-translation translation"><span title="">Las hojas de estilo solo se pueden cargar desde </span></span><code>cdn.example.com</code><span class="tlid-translation translation"><span title="">, pero el sitio web intenta cargar una desde su propio origen (</span></span><code>http://example.com</code><span class="tlid-translation translation"><span title="">).</span> <span title="">Un navegador capaz de aplicar el CSP enviará el siguiente informe de violación mediante una solicitud POST a </span></span><code><a href="http://example.com/_/csp-reports" rel="freelink">http://example.com/_/csp-reports</a></code><span class="tlid-translation translation"><span title="">, cuando se visite el documento:</span></span></div>
+
+<pre>{
+ "csp-report": {
+ "document-uri": "http://example.com/signup.html",
+ "referrer": "",
+ "blocked-uri": "http://example.com/css/style.css",
+ "violated-directive": "style-src cdn.example.com",
+ "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports"
+ }
+}</pre>
+
+<p><span class="tlid-translation translation"><span title="">Como se puede ver, el informe incluye la ruta completa al recurso infractor en </span></span><code>blocked-uri</code><span class="tlid-translation translation"><span title="">.</span> <span title="">Este no es siempre el caso.</span> <span title="">Por ejemplo, cuando </span></span><code>signup.html</code><span class="tlid-translation translation"><span title=""> intente cargar el CSS desde </span></span><a href="http://anothercdn.example.com/stylesheet.css"><code>http://anothercdn.example.com/stylesheet.css</code></a><span class="tlid-translation translation"><span title="">, el navegador no incluiría la ruta completa, sino solo el origen (</span></span><code>http://anothercdn.example.com</code><span class="tlid-translation translation"> <span title="">).</span> <span title="">La especificación CSP da una explicación de este extraño comportamiento.</span> <span title="">En resumen, esto se hace para evitar la pérdida de información confidencial sobre recursos de origen cruzado.</span></span></p>
+
+<h2 id="Compatibilidad_del_navegador">Compatibilidad del navegador</h2>
+
+<p class="hidden"><span class="tlid-translation translation"><span title="">La tabla de compatibilidad en esta página se genera a partir de datos estructurados.</span> <span title="">Si desea contribuir con los datos, visite </span></span> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a><span class="tlid-translation translation"><span title=""> y envíenos una solicitud de extracción.</span></span></p>
+
+<p>{{Compat("http.headers.csp")}}</p>
+
+<p><span class="tlid-translation translation"><span title="">Existe una incompatibilidad específica en algunas versiones del navegador web Safari, por lo que si se establece una cabecera de Política de Seguridad de Contenido, pero no una cabecera de Same Origin, el navegador bloqueará el contenido alojado de forma autónoma y el contenido externo, e informará incorrectamente de que esto es d</span><span title="">ebido a que la Política de Seguridad del Contenido no permite el contenido.</span></span></p>
+
+<div class="tlid-result-transliteration-container result-transliteration-container transliteration-container">
+<div class="tlid-transliteration-content transliteration-content full"></div>
+</div>
+
+
+
+<h2 id="Vea_también">Vea también</h2>
+
+<ul>
+ <li>{{HTTPHeader("Content-Security-Policy")}}</li>
+ <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li>
+ <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security in WebExtensions</a></li>
+ <li>
+ <p><a href="/en-US/docs/Tools/GCLI/Display_security_and_privacy_policies">Display security and privacy policies In Firefox Developer Tools</a></p>
+ </li>
+</ul>