Administrar la directiva de seguridad de contenido del sitio

La directiva de seguridad de contenido (CSP) es una capa adicional de seguridad que ayuda a detectar y mitigar algunos tipos de ataques web, como scripting entre sitios, ataques de inyección de datos, desfase de sitio o la distribución de malware. CSP proporciona un amplio conjunto de directivas que ayudan a controlar los recursos que puede cargar una página del sitio. Cada directiva define las restricciones para un tipo específico de recurso.

Prerequisites

Importante

Pruebe primero los cambios de CSP en un entorno de desarrollo. La habilitación o modificación de CSP en sitios existentes podría interrumpir la funcionalidad si la directiva no tiene en cuenta scripts de terceros, código personalizado o recursos externos. 

Use el siguiente enfoque al realizar cambios en CSP:

  1. Comience con el modo de solo informe para identificar infracciones sin bloquear recursos. 
  2. Revise la consola del explorador para ver los mensajes de infracción de CSP. 
  3. Agregue los orígenes necesarios de forma incremental en función de las infracciones encontradas. 
  4. Cambie al modo de cumplimiento una vez que no se notifique ninguna infracción crítica. 

Directiva de CSP predeterminada

Importante

En el caso de los sitios creados después del 10 de noviembre de 2025, CSP está habilitado de forma predeterminada con la siguiente directiva:

script-src 'self' content.powerapps.com content.powerapps.us content.appsplatform.us content.powerapps.cn 'nonce';
style-src 'unsafe-inline' https:;

Esta directiva predeterminada:

  • Permite scripts del origen de su sitio ('self')
  • Permite scripts de los dominios de distribución de contenido de Power Pages
  • Usa la validación de scripts basada en nonce para scripts en línea
  • Permite estilos en línea y estilos de fuentes HTTPS

En el caso de los sitios creados antes de este cambio: ES posible que CSP no esté habilitado. Se recomienda habilitarlo mediante la configuración del sitio HTTP/Content-Security-Policy. Consulte Guía de migración de sitios> existentes para obtener instrucciones paso a paso. 

Comprender las directivas predeterminadas

Directiva  Valor  Propósito 
script-src  'self'  Permite scripts del origen de tu sitio
script-src  content.powerapps.com, content.powerapps.us, content.appsplatform.us, content.powerapps.cn  Permite scripts de la plataforma Power Pages
script-src  'nonce'  Habilita la validación basada en nonce para scripts en línea
style-src  'unsafe-inline'  Permite estilos en línea (necesarios para muchas características del sitio)
style-src  https:  Permite estilos de cualquier origen HTTPS

Personalización de CSP

Puede modificar, ampliar o deshabilitar la directiva de CSP predeterminada para cumplir los requisitos específicos del sitio.

Modificación o deshabilitación de CSP

  1. Inicie sesión en Power Pages y abra el sitio para su edición.
  2. En el panel lateral izquierdo, seleccione Más elementos () >Gestión del portal
  3. Seleccione Configuración del sitio en la aplicación Administración del portal
  4. Busque o cree la configuración del sitio HTTP/Content-Security-Policy
  5. Modifique el valor según sea necesario. Para deshabilitar CSP, desactive el valor de configuración del sitio (déjelo vacío) en lugar de eliminar la configuración.

Adición de orígenes de scripts externos

Si el sitio usa bibliotecas externas de JavaScript (por ejemplo, análisis, widgets de chat), agregue sus dominios a la script-src directiva:

script-src 'self' content.powerapps.com content.powerapps.us
  content.appsplatform.us content.powerapps.cn 'nonce'
  https://cdn.example.com https://analytics.example.com;
style-src 'unsafe-inline' https:;

Adición de directivas adicionales

Puede agregar más directivas CSP según sea necesario. Entre las adiciones comunes se incluyen:

Directiva  Example  Propósito 
img-src  img-src 'self' https: data:;  Controlar orígenes de imágenes
font-src  font-src 'self' https://fonts.gstatic.com;  Gestionar orígenes de fuentes
connect-src  connect-src 'self' https://api.example.com;  Controlar los destinos de AJAX/fetch
frame-src  frame-src 'self' https://www.youtube.com;  Fuentes de control iframe
frame-ancestors  frame-ancestors 'self';  Controlar quién puede incrustar tu sitio
media-src  media-src 'self' https:;  Controlar orígenes de audio y vídeo
object-src  object-src 'none';  Bloquear complementos (Flash, applets java)

Compatibilidad con Nonce

¿Qué es un nonce?

Un "nonce" (número usado una vez) es un valor aleatorio criptográfico generado para cada solicitud de página. Al activar nonce, solo se ejecutan scripts insertados que incluyen un atributo nonce que coincida. 

¿Cómo funciona nonce en Power Pages?

Al incluir "nonce" en la directiva de la Política de Seguridad de Contenido (CSP):

  1. Power Pages genera un valor nonce único para cada solicitud de página. 
  2. Power Pages agrega automáticamente el nonce a las etiquetas de script insertadas de orígenes de confianza. 
  3. Power Pages bloquea los scripts insertados sin un nonce coincidente. 
  4. Este proceso impide que se ejecuten scripts malintencionados insertados. 
  5. Power Pages protege los controladores de eventos en línea por separado a través de la generación automática de hash. 

Nonce está habilitado de forma predeterminada

La política CSP predeterminada incluye "nonce" en la directiva script-src, proporcionando así protección automática para scripts insertados de orígenes de confianza. 

¿Cómo funciona nonce con scripts personalizados?

Power Pages gestiona automáticamente la inyección de nonce en la mayoría de los escenarios.

  • Plantillas Liquid: Power Pages inserta automáticamente el atributo nonce en scripts en línea representados a través de plantillas Liquid una vez realizada la representación. No se requiere ninguna acción de los creadores. 

  • Controladores de eventos insertados: Power Pages protege automáticamente los controladores de eventos a través de la generación de hash. No se necesita ninguna acción manual. 

  • Scripts creados dinámicamente: Scripts creados durante el tiempo de ejecución mediante JavaScript (por ejemplo, mediante document.createElement) no pueden recibir el nonce del lado servidor. Siempre que sea posible, mueva estos scripts a archivos externos y agregue sus dominios de origen a la script-src directiva . 

Prueba con el modo de solo informe

Antes de aplicar una directiva de CSP, use el modo de solo informe para identificar lo que bloquea la directiva sin bloquearla:

  1. En Administración del portal, cree una configuración de sitio denominada HTTP/Content-Security-Policy-Report-Only
  2. Establezca su valor en la directiva de CSP que desea probar. 
  3. Abra el sitio en un explorador y compruebe si hay informes de infracciones en la consola. 
  4. Solucione todas las infracciones ajustando la directiva. 
  5. Una vez satisfecho, mueva el valor de la directiva a HTTP/Content-Security-Policy (modo de cumplimiento). 
  6. Elimine la configuración del sitio HTTP/Content-Security-Policy-Report-Only

Nota:

Puede usar ambos HTTP/Content-Security-Policy y HTTP/Content-Security-Policy-Report-Only simultáneamente. Use solo informe para probar directivas más estrictas al aplicar una directiva de línea de base. 

Guía de migración para sitios existentes

En el caso de los sitios creados antes de habilitar CSP de forma predeterminada, siga estos pasos para habilitar CSP:

Paso 1: Comprobación del estado actual de CSP

  1. Abrir Gestión del Portal>Configuración del sitio
  2. Busque HTTP/Content-Security-Policy
  3. Si la configuración no existe, CSP no está habilitada en el sitio. 

Nota:

Cuando no configura CSP, el verificador de salud del sitio muestra una advertencia: "Falta la configuración de la política de seguridad de contenido HTTP o está mal configurada". Puede comprobar esta advertencia en los diagnósticos de salud de su sitio. 

Paso 2: Empezar con el modo de solo informe

  1. Cree una configuración de sitio denominada HTTP/Content-Security-Policy-Report-Only con la directiva predeterminada. 

    script-src 'self' content.powerapps.com content.powerapps.us content.appsplatform.us content.powerapps.cn 'nonce'; style-src 'unsafe-inline' https:;
    
  2. Navega por tu sitio y verifica las infracciones en la consola del navegador. 

  3. Agregue los dominios externos necesarios a la directiva. 

Paso 3: Habilitar el cumplimiento

  1. Cree la configuración del HTTP/Content-Security-Policy sitio con su política probada. 
  2. Puede quitar la configuración de solo informes. 
  3. Supervise los problemas y ajuste según sea necesario. 

Considerations

  • Los sitios existentes no se migran automáticamente a CSP para su aplicación. 

  • La inserción automática de nonce controla JavaScript personalizado agregado a través del editor de código para el contenido procesado por Liquid. 

  • Debe agregar explícitamente dominios para scripts de terceros (análisis, widgets de chat, etc.) a script-src

Solución de problemas

Los scripts de orígenes externos están bloqueados

Síntoma: la consola del explorador muestra una infracción de CSP para un origen de script.

Solución: en primer lugar, compruebe que el origen externo es de confianza y necesario para el sitio. Agregue solo dominios de orígenes de confianza. Una vez validado, agregue el dominio del script a la script-src directiva:

script-src 'self' content.powerapps.com content.powerapps.us
  content.appsplatform.us content.powerapps.cn 'nonce'
  https://blocked-domain.com;
style-src 'unsafe-inline' https:;

Los scripts en línea no se ejecutan

Síntoma: Los scripts personalizados embebidos no se ejecutan; violación de CSP nonce en la consola. 

Solución: en el caso del contenido representado por Liquid, Power Pages inserta automáticamente el atributo nonce. Si los scripts siguen bloqueados, asegúrese de que el script está dentro de una plantilla Liquid o una página renderizada por el servidor en la que se aplica la inserción automática de nonce. Para los scripts creados dinámicamente, considere la posibilidad de moverlos a archivos .js externos y agregar el dominio de origen a la directiva de CSP. 

Las imágenes o fuentes no se cargan

Síntoma: las imágenes aparecen rotas o las fuentes personalizadas no se representan. La consola del navegador muestra las infracciones de CSP para img-src o font-src.

Solución: agregue la directiva de origen adecuada a la directiva de CSP:

img-src 'self' https: data:;
font-src 'self' https://fonts.gstatic.com
  https://fonts.googleapis.com;

Los Iframes no se muestran

Síntoma: El contenido incrustado (YouTube, Maps, Power BI) no se carga. La consola del navegador muestra las violaciones de CSP para frame-src.

Solución: agregue frame-src con los dominios necesarios:

frame-src 'self' https://www.youtube.com
  https://app.powerbi.com;

Widgets de terceros que no funcionan

Síntoma: los widgets de chat, los scripts de análisis u otras integraciones de terceros no se cargan ni funcionan correctamente.

Solución: los widgets de terceros suelen requerir varias directivas. Compruebe la consola del navegador para todos los tipos de infracción y agregue las fuentes necesarias. Ejemplo de un widget de chat:

script-src 'self' content.powerapps.com 'nonce'
  https://widget.chatprovider.com;
style-src 'unsafe-inline' https:;
connect-src 'self' https://api.chatprovider.com;
frame-src 'self' https://widget.chatprovider.com;
img-src 'self' https: data:;

Referencia de configuración del sitio

Configuración del sitio  Propósito  Predeterminado 
HTTP/Content-Security-Policy Directiva de CSP completa (modo de cumplimiento) Consulte la directiva predeterminada anterior (solo nuevos sitios)
HTTP/Content-Security-Policy-Report-Only Directiva CSP en modo solo de informe (infracciones registradas, no bloqueadas) No establecido

 

procedimientos recomendados

  1. Comience con la directiva predeterminada: el CSP predeterminado proporciona protección segura al tiempo que permite que las características de Power Pages funcionen correctamente. 
  2. Pruebe primero con el modo de solo informe: use HTTP/Content-Security-PolicyReport-Only para identificar lo que se bloquearía antes de aplicar. 
  3. Agregar orígenes de forma incremental: al integrar servicios externos, agregue solo los dominios específicos necesarios. Evite caracteres comodín amplios como https: para script-src
  4. Evite unsafe-inline para scripts: el enfoque basado en nonce es más seguro que permitir todos los scripts en línea. La directiva predeterminada usa nonce en lugar de unsafe-inline para script-src
  5. Supervisión de la consola del explorador: las infracciones de CSP se registran en la consola del explorador, lo que ayuda a identificar los recursos bloqueados. 
  6. Revisar y reforzar las directivas periódicamente: a medida que identifica y quita dependencias de recursos externos, refuerce las políticas de CSP en consecuencia. 
  7. Use dominios específicos, no comodines: en lugar de https:, especifique dominios exactos (por ejemplo, https://cdn.example.com) para mejorar la seguridad. 

Escenarios comunes

Escenario: Adición de Google Analytics

script-src 'self' content.powerapps.com 'nonce'
  https://www.googletagmanager.com
  https://www.google-analytics.com;
style-src 'unsafe-inline' https:;
img-src 'self' https: data:;
connect-src 'self'
  https://www.google-analytics.com
  https://analytics.google.com;

Escenario: Agregar una inserción de YouTube

script-src 'self' content.powerapps.com 'nonce';
style-src 'unsafe-inline' https:;
frame-src 'self' https://www.youtube.com
  https://www.youtube-nocookie.com;

Escenario: Uso de fuentes de Google

script-src 'self' content.powerapps.com 'nonce';
style-src 'unsafe-inline'
  https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;