El encabezado de respuesta HTTP Content-Security-Policy permite al sitio controlar qué recursos carga el agente de usuario para una página determinada. Excepto en casos especiales, el conjunto de políticas consiste principalmente en especificar los puntos finales de origen y script del servidor. Esto ayudará a detener ataques de scripting entre sitios
Documentación:El inicio de sesión del hipervínculo es visible.
Este artículo describe la Política de Seguridad de Contenidos del W3C, o CSP para abreviar. Como su nombre indica, esta especificación está relacionada con la seguridad del contenido y se utiliza principalmente para definir qué recursos puede cargar una página y reducir la aparición de XSS.
Los primeros Chrome soportaban CSP mediante el encabezado de respuesta X-WebKit-CSP, mientras que Firefox e IE soportaban X-Content-Security-Policy, y Chrome25 y Firefox23 empezaron a soportar la política estándar Content-Security-Policy.
Se puede recopilar información sensible sobre aplicaciones web, como nombres de usuario, contraseñas, nombres de máquinas y/o ubicaciones de archivos sensibles, Los usuarios principiantes pueden ser persuadidos para proporcionar información sensible como nombres de usuario, contraseñas, números de tarjeta de crédito, números de la seguridad social, etc
Primero, creemos un nuevo proyecto ASP.NET MVC, creemos un nuevo script js y carguemos dinámicamente el código js de las estadísticas de Baidu, de la siguiente manera:
Como se muestra en la figura anterior, podemos ver el código de script JS que se ha introducido con éxito en un tercero (Baidu), si hay algún código malicioso en el JS de terceros, como robar cookies, modificar contenido, saltar enlaces, etc.
¿Cómo puedo evitar la introducción de scripts JS inseguros de terceros?
Solución alternativa
Cabeza de respuestaAñadir "Política de Seguridad-Contenido"por ejemplo:
Directiva | Ejemplo de valor de instrucción | ilustrar | default-src | 'yo' cnd.a.com | Define la política de carga predeterminada para todos los tipos de recursos (JS, IMAGE, CSS, WEB FONT, SOLICITUDES AJAX, IFRAMES, MULTIMEDIA, ETC.) y usa la política predeterminada para ciertos tipos de recursos si no existe una política definida separada. | script-src | 'yo' js.a.com | Define una política de carga para JavaScript. | style-src | 'yo' css.a.com | Define una política de carga para un estilo. | IMG-SRC | 'yo' img.a.com | Define una política de carga para las imágenes. | connect-src | 'yo' | Cargando políticas para peticiones desde Ajax, WebSockets, etc. Si no está permitido, el navegador simula una respuesta con un estado de 400. | font-src | font.a.com | Política de carga para WebFont. | object-src | 'yo' | <object><embed> <applet> Políticas de carga para plugins como Flash introducidas para etiquetas como , o . | media-src | media.a.com | <audio> <video> Estrategias de carga para multimedia HTML introducidas para etiquetas como o . | Frame-SRC | 'yo' | Política de carga para los fotogramas. | Caja de arena | Formas permitidas | Activa sandbox (similar a la propiedad sandbox de un iframe) para el recurso solicitado. | Report-uri | /report-uri | Indica al navegador a qué dirección enviar la información del registro si el recurso solicitado no está permitido por la política. Especial: Si quieres que el navegador solo informe de los registros y no bloquee nada, puedes usar la cabecera Content-Security-Policy-Report-Only en su lugar. |
Modifiquemos el archivo web.config del proyecto para añadir una cabecera de respuesta personalizada de la siguiente manera:
Reejeción del proyecto como se muestra a continuación:
El navegador bloqueó con éxito la carga de scripts js de terceros:
Se negó a cargar el script 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' porque viola la siguiente directiva de Política de Seguridad de Contenido: "script-src 'self' http://localhost:56888/ ". Cabe señalar que 'script-src-elem' no estaba explícitamente establecido, por lo que 'script-src' se usa como respaldo. (Fin)
|