Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
A Política de Seguridade de Contidos (CSP) está actualmente soportada en aplicacións orientadas a modelos, canvas e código. Este artigo explica como configurar CSP para aplicacións baseadas en modelos e canvas. Para aplicacións de código CSP, consulta a documentación de aplicacións de código. Os administradores poden controlar se se envía a cabeceira CSP e, ata certo punto, o que contén. As configuracións están a nivel de entorno, o que significa que se aplican a todas as aplicacións do entorno unha vez activadas.
Nota
A política de seguranza de contido só se aplica a entornos que usan Dataverse.
Cada compoñente do valor da cabeceira CSP controla os activos que se poden descargar. A Rede de Desenvolvedores de Mozilla (MDN) ofrece descricións máis detalladas. Por defecto, os valores son os seguintes:
| Directiva | Valor predefinido | Personalizable |
|---|---|---|
| fonte-de-script | * 'unsafe-inline' 'unsafe-eval' blob: |
Non |
| traballador-src | 'self' blob: |
Non |
| estilo-src | * 'unsafe-inline' blob: |
Non |
| fonte-src | * data: |
Non |
| antepasados do marco | 'self' https://*.powerapps.com |
Si |
Esta configuración resulta nun CSP predeterminado de script-src * 'unsafe-inline' 'unsafe-eval' blob: ; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;.
Modo estrito
O interruptor Strict CSP crea un CSP que na súa maioría non inclúe comodíns nin directivas inseguras, como unsafe-inline. Cando activas o CSP Estrito, as directrices anteriores convértense nas seguintes directrices detalladas nesta sección. A <platform> notación significa que os dominios da plataforma son proporcionados segundo o requirido polo produto. Os dominios desta sección poden cambiar co tempo a medida que o produto medra.
| Directiva | Valor predeterminado (baseado no modelo) | Valor predeterminado (lenzo) | Personalizable |
|---|---|---|---|
| fonte-de-script | 'self' blob: <platform>' |
'self' <platform>' |
Si |
| traballador-src | 'self' blob: |
'self' blob: |
Non |
| estilo-src | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Si |
| fonte-src | 'self' data: <platform> |
'self' data: <platform> |
Si |
| antepasados do marco | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Si |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Si |
| conectar- src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Si |
| frame- src | 'self' blob: <platform> |
'self' <platform> |
Si |
| URI base | 'none' |
Non dispoñible | Non |
| formulario-acción | <platform> |
Non dispoñible | Si |
| predeterminado- src | 'self' |
'self' |
Non |
Requisitos previos
Para as aplicacións de compromiso co cliente Dynamics 365 e outras aplicacións baseadas en modelos, o CSP só está dispoñible en contornas en liña e en organizacións con Dynamics 365 Customer Engagement (on-premises), versión 9.1 ou posterior.
Configurar CSP
Podes activar e configurar o CSP a través do Power Platform centro de administración. É importante activar primeiro un ambiente de desenvolvemento/probas, xa que activar CSP podería iniciar escenarios de bloqueo se se viola a política. O centro de administración tamén soporta un modo só con informes para facilitar a aceleración da produción.
Segue estes pasos para configurar CSP:
- Inicie sesión no Centro de administración de Power Platform.
- No panel de navegación, selecciona Xestionar. No panel Xestionar , seleccione Entornos.
- Na páxina Entornos , seleccione un entorno.
- Na barra de comandos, seleccione Configuración.
- Expande Produto e, a seguir, selecciona Privacidade + Seguridade.
A seguinte imaxe mostra o estado predeterminado da configuración:
Informes
A opción Activar informes controla se as aplicacións baseadas en modelos e as de lenzo envían informes de infracción. Para activalo, especifica un punto final. A aplicación envía informes de violacións a este punto final, independentemente de se CSP se aplica ou non. Se o CSP non está aplicado, a aplicación usa o modo só de informe. Para obter máis información, consulte a documentación de informes.
Aplicación
A aplicación de CSP contrólase de forma independente para as aplicacións baseadas en modelos e de lenzo para proporcionar un control granular sobre as políticas. Use o pivote baseado en modelos/lenzos para modificar o tipo de aplicación desexado.
O interruptor Aplicar política de seguridade de contido activa a política predeterminada para a aplicación para o tipo de aplicación dado. Ao activar esta opción, cambia o comportamento das aplicacións neste ambiente para que se axuste á política. Por iso, segue este fluxo de habilitación suxerido:
- Fai cumprir a política nun entorno de desenvolvemento ou de proba.
- Activar o modo de só informes en produción.
- Fai cumprir a política en produción unha vez que non se reporten infraccións.
Configurar directivas
A sección Configurar directivas permítelle controlar as directivas individuais dentro da política. Actualmente, só podes personalizar a frame-ancestors directiva.
Se deixas activada a directiva predeterminada, usas o valor por defecto especificado na táboa. Se desactivas o interruptor, podes especificar valores personalizados para a directiva e engadilos ao valor por defecto. O seguinte exemplo establece valores personalizados para frame-ancestors. A directiva está configurada para frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com neste exemplo. Esta configuración significa que a aplicación pode estar aloxada na mesma orixe, https://*.powerapps.com, https://www.foo.com, e https://www.bar.com, pero non noutras orixes. Usa o botón Engadir para engadir entradas á lista e a icona Eliminar para eliminalas.
Opcións de configuración habituais
Para Microsoft Teams integración usando a aplicación Dynamics 365, engade o seguinte a frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Para a aplicación Dynamics 365 para Outlook, engade o seguinte a frame-ancestors:
- Orixe da páxina principal da túa aplicación web Outlook
https://outlook.office.comhttps://outlook.office365.com
Para incrustar Power Apps en Power BI informes, engade o seguinte a frame-ancestors:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Consideracións importantes
Desactivar a directiva predeterminada e gardar cunha lista baleira desactiva a directiva completamente e non a envía como parte da cabeceira de resposta do CSP.
Exemplos de configuración de CSP
Aquí tes un par de exemplos de configuracións CSP.
Exemplo 1: informes desactivados
No exemplo:
- Os informes están desactivados.
- A aplicación baseada en modelos está activada.
-
frame-ancestorsestá personalizada ahttps://www.contoso.comehttps://www.fabrikam.com.
-
- A aplicación do lenzo está desactivada.
Os encabezados efectivos son:
- Aplicacións xeradas por modelos:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob: data:; worker-src 'self' blob: data:; style-src * 'unsafe-inline' :blob; font-src * data:; frame-ancestors https://www.contoso.com https://www.fabrikam.com; - Aplicacións Canvas: a cabeceira CSP non se envía.
Exemplo 2: informes activados
No exemplo:
- Os informes están activados.
- O extremo de creación está axustado en
https://contoso.com/reporting-endpoint
- O extremo de creación está axustado en
- A aplicación baseada en modelos está activada.
-
frame-ancestorsmantense por defecto
-
- A aplicación do lenzo está desactivada.
-
frame-ancestorsestá personalizado parahttps://www.contoso.com
-
Os valores efectivos do CSP son:
- Aplicacións xeradas por modelos:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob:; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; report-uri https://contoso.com/reporting-endpoint; - Aplicacións de lenzo:
Content-Security-Policy-Report-Only: script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors https://www.contoso.com; report-uri https://contoso.com/reporting-endpoint;
Modificar a configuración da organización directamente
Podes configurar CSP sen usar a IU modificando directamente estes axustes da organización:
IsContentSecurityPolicyEnabled controla se a cabeceira Content-Security-Policy se envía nas aplicacións baseadas en modelos.
ContentSecurityPolicyConfiguration controla o valor da parte dos antepasados do marco (como se viu antes, establece se
'self'ContentSecurityPolicyConfigurationnon está activado). Defina esta configuración usando un obxecto JSON coa seguinte estrutura –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Esta configuración tradúcese enscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';- (De MDN) A directiva de antepasados de marco HTTP Content-Security-Policy (CSP) especifica os elementos principais válidos que poden incrustar unha páxina usando
<frame>,<iframe>,<object>,<embed>ou<applet>.
- (De MDN) A directiva de antepasados de marco HTTP Content-Security-Policy (CSP) especifica os elementos principais válidos que poden incrustar unha páxina usando
IsContentSecurityPolicyEnabledForCanvas controla se a cabeceira Content-Security-Policy se envía nas aplicacións de lenzo.
ContentSecurityPolicyConfigurationForCanvas controla a política para Canvas usando o mesmo proceso descrito en
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri controla se se deben usar os informes. Esta configuración úsana tanto as aplicacións baseadas en modelos como as de lenzo. Unha cadea válida envía informes de infraccións ao punto final especificado, usando o modo só de informes se
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasestá desactivado. Unha cadea baleira desactiva os informes. Para obter máis información, consulte a documentación de informes.
Configuración de CSP sen IU
Especialmente para contornos que non se atopen no centro de administración de Power Platform, como as configuracións locais, os administradores poden querer configurar CSP mediante scripts para modificar directamente a configuración.
Activar CSP sen interface de usuario
Siga estes pasos para activar CSP sen interface de usuario:
- Abra as ferramentas de desenvolvedor do navegador mentres utiliza a aplicación baseada en modelos como usuario con privilexios de actualización da entidade da organización (o administrador do sistema é unha boa opción).
- Pega e executa o seguinte script na consola.
- Para activar CSP, pase a configuración predeterminada:
enableFrameAncestors(["'self'"]) - Como exemplo de como permitir que outras orixes incrusten a aplicación:
enableFrameAncestors(["*.powerapps.com", "'self'", "abcxyz"])
async function enableFrameAncestors(sources) {
const baseUrl = Xrm.Utility.getGlobalContext().getClientUrl();
if (!Array.isArray(sources) || sources.some(s => typeof s !== 'string')) {
throw new Error('sources must be a string array');
}
const orgResponse = await fetch(`${baseUrl}/api/data/v9.1/organizations`);
if (!orgResponse.ok) throw new Error('Failed to retrieve org info');
const orgs = await orgResponse.json();
const { organizationid, contentsecuritypolicyconfiguration, iscontentsecuritypolicyenabled } = orgs.value[0];
console.log(`Organization Id: ${organizationid}`);
console.log(`CSP Enabled?: ${iscontentsecuritypolicyenabled}`);
console.log(`CSP Config: ${contentsecuritypolicyconfiguration}`);
const orgProperty = prop => `${baseUrl}/api/data/v9.1/organizations(${organizationid})/${prop}`;
console.log('Updating CSP configuration...')
const config = {
'Frame-Ancestor': {
sources: sources.map(source => ({ source })),
},
};
const cspConfigResponse = await fetch(orgProperty('contentsecuritypolicyconfiguration'), {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
value: JSON.stringify(config),
}),
});
if (!cspConfigResponse.ok) {
throw new Error('Failed to update csp configuration');
}
console.log('Successfully updated CSP configuration!')
if (iscontentsecuritypolicyenabled) {
console.log('CSP is already enabled! Skipping update.')
return;
}
console.log('Enabling CSP...')
const cspEnableResponse = await fetch(orgProperty('iscontentsecuritypolicyenabled'), {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
value: true,
}),
});
if (!cspEnableResponse.ok) {
throw new Error('Failed to enable csp');
}
console.log('Successfully enabled CSP!')
}
Desactivar CSP sen IU
Siga estes pasos para desactivar CSP sen IU:
- Abra as ferramentas de desenvolvedor do navegador mentres utiliza a aplicación baseada en modelos como usuario con privilexios de actualización da entidade da organización (o administrador do sistema é unha boa opción).
- Pega e executa o seguinte script na consola.
- Para desactivar CSP, pegue na consola:
disableCSP()
async function disableCSP() {
const baseUrl = Xrm.Utility.getGlobalContext().getClientUrl();
const orgResponse = await fetch(`${baseUrl}/api/data/v9.1/organizations`);
if (!orgResponse.ok) throw new Error('Failed to retrieve org info');
const orgs = await orgResponse.json();
const { organizationid, iscontentsecuritypolicyenabled } = orgs.value[0];
console.log(`Organization Id: ${organizationid}`);
console.log(`CSP Enabled?: ${iscontentsecuritypolicyenabled}`);
const orgProperty = prop => `${baseUrl}/api/data/v9.1/organizations(${organizationid})/${prop}`;
if (!iscontentsecuritypolicyenabled) {
console.log('CSP is already disabled! Skipping update.')
return;
}
console.log('Disabling CSP...')
const cspEnableResponse = await fetch(orgProperty('iscontentsecuritypolicyenabled'), {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
value: false,
}),
});
if (!cspEnableResponse.ok) {
throw new Error('Failed to disable csp');
}
console.log('Successfully disabled CSP!')
}