Avoid CSRF, XSSI, and cross-origin information leaks.
Updated
Safe and secure
Why should you worry about isolating your web resources?
Many web applications are vulnerable to cross-origin attacks such as cross-site request spoofing (CSRF), cross-site scripting (XSSI), time attacks, cross-origin information leaks or channel¿Qué es un canal?Es un punto de contacto entre la marca y sus públicos en la web. Pueden ser blogs, vídeos, comentarios en artículo, imágenes, contactos en redes sociales o cualquier otra forma de interacción de la web 2.0. plus lateral de ejecución especulativa (Spectrum) attacks.
Get metadata The headersConcepto de Encabezados¿Qué son los Encabezados?Los Encabezados, además conocidos como headers en inglés, son una parte fundamental del diseño de cualquier web, dado que consiste en la parte principal que se ve de esta al acceder, la parte de arriba de cualquier página. El lugar más visible y al que todos los usuarios que visitan un lugar de Internet acceden cuando entran en él, pudiendo tener así una imagen rápida plus de solicitud le permiten implementar un sólido mecanismo de defensa en profundidad, una política de aislamiento de recursos, para proteger su aplicación contra estos ataques comunes de origen cruzado.
Es común que los recursos expuestos por una determinada aplicación web solo los cargue la propia aplicación y no otros sitios web. En tales casos, la implementación de una política de aislamiento de recursos basada en los encabezados de solicitud de obtención de metadataLos metadatos son datos estructurados que contienen información sobre una fuente como, por ejemplo, un libro o un documento web. Gracias a los metadatos resulta mucho más fácil hallar la fuente de información dado que contienen datos sobre el título, el autor, la fecha de publicación, la descripción, etc. Se utilizan en librerías pero además para la estadística y la ingeniería de software. Metadatos en WWW Los metadatos se utilizan plus requiere poco esfuerzo y, al mismo tiempo, protege la aplicación de ataques entre sitios.
Compatibilidad del browserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los plus
Los encabezados de solicitud de obtención de metadatos se admiten a partir de Chrome 76 y en otros browsersConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet plus basados en Chromium, y están en desarrollo en Firefox. Ver Browser compatibility for up-to-date information on browser compatibility.
Background
Muchos ataques entre sitios son posibles porque la web está abierta de forma predeterminada y su serverLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en plus de aplicaciones no puede protegerse fácilmente de la comunicación que se origina en aplicaciones externas. Un ataque típico de origen cruzado es la falsificación de solicitudes entre sitios (CSRF), en la que un atacante atrae a un usuario a un sitio que controla y luego envía un formulario al servidor en el que el usuario está conectado. Dado que el servidor no puede saber si la solicitud se originó en otro domainUn dominio es una sección de Internet con direcciones que comparten un sufijo común o están bajo el control de una organización o individuo en particular. Está organizado jerárquicamente. Tanto los objetos físicos como los virtuales pueden ser direccionados con el nombre de dominio. Estos objetos pueden ser webs, ordenadores en red o servicios, como impresoras, faxes o servidores de correo. Cada objeto está referenciado por una dirección IP única, plus (entre sitios) y el navegador adjunta automáticamente cookies a las solicitudes entre sitios, el servidor ejecutará la acción solicitada por el atacante en nombre del usuario.
Otros ataques entre sitios, como la inclusión de scriptsConcepto de Scripts¿Qué son los Scripts?Los Scripts son fragmentos de código que se usan para dar forma a herramientas tanto en Internet como en el sector de la informática en general. Son una parte crucial del software, puesto que se trata exactamente del código que conforma a una aplicación en su totalidad o a una de sus funciones, como además el que puedes hallar explorando cómo está hecha una web.Desde plus entre sitios (XSSI) o las fugas de información de origen cruzado, son de naturaleza similar a CSRF y dependen de la carga de recursos de una aplicación de la víctima en un documento controlado por el atacante y de la filtración de información sobre las aplicaciones de la víctima. Dado que las aplicaciones no pueden distinguir fácilmente las solicitudes confiables de las no confiables, no pueden descartar el tráfico malicioso entre sitios.
Aside from the resource attacks described above, window references it can also lead to cross-origin information leaks and Specter attacks. You can prevent them by setting the Cross-Origin-Opener-Policy response header to same-origin.
Introducing Fetch Metadata
Los encabezados de solicitud de Fetch Metadata son una nueva característica de seguridad de la plataforma web diseñada para ayudar a los servidores a defenderse contra ataques de origen cruzado. Al proporcionar información sobre el contexto de una solicitud HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado plus en un conjunto de Sec-Fetch- * headers, allow the responding server to apply security policies before processing the request. This allows developers to decide whether to accept or reject a request based on the way it was made and the context in which it will be used, allowing them to respond only to legitimate requests made by their own application.
Same origin
Requests originating from sites served by your own server (same origin) will continue to work.

Cross-site
The server may reject malicious cross-site requests due to the additional context in the HTTP request provided by Sec-Fetch- * headers.

Sec-Fetch-Site
Sec-Fetch-Site tells the server which site sent the request. The browser sets this value to one of the following:
same-origin, if the request was made by your own application (eg.site.example)same-site, si la solicitud fue realizada por un subdomainConcepto de Subdominio¿Qué es un Subdominio?Un Subdominio es una extensión que se añade al nombre de un dominio para organizar las distintos secciones que pueda tener su web, aún cuando funcionando de forma totalmente independiente a esta. Por lo general, generalmente son palabras que lo preceden y que se separan de él utilizando un punto para remarcar tanto su independencia como la idea de que son algo desligado del contenido plus de su sitio (p. ej.bar.site.example)none, si la solicitud fue causada explícitamente por la interacción de un usuario con el user agentEl agente de usuario o agente es el identificador o nombre con el que un programa inicia sesión en el servidor web para solicitar un documento. El nombre se pasa por medio de del encabezado HTTP. Los programas de software y los robots de los motores de búsqueda pueden identificarse con este nombre. El agente de usuario permite ver precisamente cuándo un robot de motor de búsqueda visitó el portal plus (por ejemplo, al hacer clic en un marcador)cross-site, if the request was submitted by another website (eg.evil.example)
Sec-Fetch-Mode
Sec-Fetch-Mode indicates the mode of the request. This roughly corresponds to the type of request and allows you to distinguish resource loads from navigation requests. For example, a destination of navigate indicates a top-level navigation request while no-cors indicates resource requests such as uploading an image.
Sec-Fetch-Dest
Sec-Fetch-Dest submit a request destination (for example, if a script or a img caused the browser to request a resource).
The additional information these request headers provide is quite simple, but the additional context allows you to build powerful server-side security logic, also known as Resource Isolation Policy, with just a few lines of code.
Implement a resource isolation policy
A resource isolation policy prevents your resources from being requested by external websites. Blocking such traffic mitigates common cross-site web vulnerabilities such as CSRF, XSSI, timing attacks, and cross-origin information leaks. This policy can be enabled for all endpoints of your application and will allow all resource requests coming from your own application, as well as direct browsing (via an HTTP GET request). Endpoints that are supposed to be loaded in a cross-site context (for example, endpoints loaded using CORS) can be excluded from this logic.
Step 1: Allow requests from browsers that do not send Fetch Metadata
Since not all browsers support fetching metadata, you must allow requests that are not set Sec-Fetch- * headers checking for the presence of sec-fetch-site.
All the following examples are python code.
if not req['sec-fetch-site']:
return True
Caution:
Since Fetch Metadata is only supported by modern browsers, it should be used as a defense-in-depth protection and not as your main line of defense.
Step 2: Allow requests started on the same site and in the browser
Any request that does not originate from a cross-origin context (such as evil.example) will be allowed. In particular, these are requests that:
- It comes from your own application (for example, a request from the same origin where
site.examplerequestssite.example / foo.jsonwill always be allowed). - It comes from your subdomains.
- They are explicitly caused by a user's interaction with the user agent (for example, direct navigation or clicking on a bookmark, etc.).
if req['sec-fetch-site'] in ('same-origin', 'same-site', 'none'):
return True
In case your subdomains are not completely trustworthy, you can make the policy more strict by blocking requests from subdomains by removing the same-site value.
Step 3: enable simple top-level iframing and navigation
To make sure your site can still be linked from other sites, you need to allow simple (HTTP GET) top-level navigation.
if req['sec-fetch-mode'] == 'navigate' and req.method == 'GET'
and req['sec-fetch-dest'] not in ('object', 'embed'):
return True
The above logic protects your application endpoints from being used as resources by other websites, but will allow top-level navigation and embedding (for example, loading into a <iframeConcepto de Iframe¿Qué es un Iframe?Un Iframe es un documento de una web que se inserta en otra página web. Consiste en un elemento que puede albergar cualquier tipo de contenido en su interior y que ayuda, entre otras cosas, a ampliar el mensaje que se ofrece con fuentes externas o con material complementario que pueda resultar de interés para el usuario que entra.Este elemento web se usa especialmente al plus>). Para mejorar aún más la seguridad, puede usar los encabezados de Obtener metadatos para restringir la navegación entre sitios a solo un conjunto permitido de páginas.
Step 4: disable the endpoints that are intended to serve cross-site traffic (optional)
In some cases, your application may provide resources that must be loaded between sites. These resources must be exempted per path or per endpoint. Examples of these endpoints are:
- Endpoints Intended for Cross-Origin Access: If your application is providing endpoints that are
CORSenabled, you must explicitly exclude them from resource isolation to ensure that cross-site requests to these endpoints are still possible. - Public resources (for example, images, styles, etc.): Any public and unauthenticated resources that must be cross-origin loadable from other sites can also be exempted.
if req.path in ('/my_CORS_endpoint', '/favicon.png'):
return True
Caution:
Before excluding parts of your application from these security restrictions, make sure they are static and do not contain sensitive user information.
Step 5: decline all other requests that are cross-site and non-browsing
Any other cross-site The request will be rejected by this Resource Isolation Policy and thus protect your application from common cross-site attacks.
By default, requests that violate your policy should be rejected with a HTTP 403 answer. But depending on your use case, you can also consider other actions, such as:
- Just logging violations. This is especially useful when testing policy for compatibility and finding endpoints that may need to be bypassed.
- Modify the request. En ciertos escenarios, considere realizar otras acciones como redirigir a su página de destinoConcepto de Página de Destino¿Qué es una Página de Destino?Una Página de destino es aquella web a la que accede un usuario al hacer un clic en un anuncio de cualquier tipo o inclusive al clicar en cualquiera de los resultados de su búsqueda. Una página de bienvenida, orientada a la compra, a informar o inclusive al registro, que puede tener mil usos o inclusive ser una página de conversión.Por plus y eliminar las credenciales de autenticación (por ejemplo, cookies). Sin embargo, tenga en cuenta que esto podría debilitar las protecciones de una política basada en Obtener metadatos.
Example: El siguiente código demuestra una implementación completa de una política sólida de aislamiento de recursos en el servidor o como un softwareConcepto de Software¿Qué es el Software y cuál es su función?Un Software es la parte lógica, o más bien el soporte lógico, de cualquier sistema de tipo informático. Sea un PC, un teléfono teléfono celular o inclusive una tablet, es todo aquel programa que se ejecuta en él gracias a la coordinación de la parte física, es decir, el hardware, para llevar adelante alguna tarea concretamente o un recopilatorio de plus intermedio para denegar solicitudes de recursos entre sitios potencialmente maliciosos, al tiempo que permite solicitudes de navegación simples:
def allow_request(req):
if not req['sec-fetch-site']:
return True
if req['sec-fetch-site'] in ('same-origin', 'same-site', 'none'):
return True
if req['sec-fetch-mode'] == 'navigate' and req.method == 'GET'
and req['sec-fetch-dest'] not in ('object', 'embed'):
return True
if req.path in ('/my_CORS_endpoint', '/favicon.png'):
return True
return False
Implement a resource isolation policy
- Install a module like the code snippet above to record and monitor how your site behaves and make sure the restrictions don't affect legitimate traffic.
- Fix potential violations by exempting legitimate cross-origin endpoints.
- Enforce the policy by discarding requests that do not comply.
Identify and correct policy violations
It is recommended that you test your policy without side effects by first enabling it in reporting mode in your server-side code. Alternatively, you can implement this logic in middleware or a reverse proxy that logs any violations that your policy might cause when applied to production traffic.
From our experience implementing a Metadata Search Resource Isolation Policy in Google, most applications are compliant with such a policy by default and rarely require endpoint exemption to allow cross-site traffic.
Applying a resource isolation policy
Once you have verified that your policy does not affect legitimate production traffic, you are ready to enforce the restrictions, ensuring that other sites will not be able to request your resources and protecting your users from cross-site attacks.
Caution:
Make sure to reject invalid requests before running authentication checks or any other request processing to avoid revealing time sensitive information.
Other readings




