Læs på engelsk

Del via


Sikkerhedspolitik for indhold

sikkerhedspolitik for indhold (CSP) understøttes i øjeblikket i modelbaseret og lærred Power Apps. Administratorer kan styre, om CSP-headeren sendes og i et omfang, hvad den indeholder. Indstillingerne er på miljøniveau, hvilket betyder, at de vil blive anvendt på alle apps i miljøet, når de er slået til.

Alle komponenter i denne CSP-headerværdi styrer de aktiver, der kan hentes og beskrives mere detaljeret på Mozilla Developer Network (MDN). Standardværdierne vises nedenfor:

Direktiv Standardværdi Kan tilpasses
script-src * 'unsafe-inline' 'unsafe-eval' Nej
arbejder-SRC 'self' blob: Nej
stil-src * 'unsafe-inline' Nej
skrifttype-src * data: Nej
ramme-forfædre 'self' https://*.powerapps.com Ja

Dette resulterer i et standard-CSP for script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;. I oversigten kan du redigere sidehoveder, der ikke kan tilpasses i øjeblikket.

Forudsætninger

  • For Dynamics 365 kundeengagementsapps og andre modelbaserede apps er CSP kun tilgængelig i onlinemiljøer og i organisationer med Dynamics 365 Customer Engagement (det lokale miljø), version 9.1 eller nyere version.

Konfigurerer CSP

CSP kan skiftes og konfigureres i Power Platform Administration. Det er vigtigt at aktivere i et udviklings-/testmiljø først , da aktivering af CSP kan begynde at blokere scenarier, hvis politikken overtrædes. Vi understøtter også "kun rapporttilstand", så det bliver nemmere at øge produktionen.

Hvis du vil konfigurere CSP, skal du gå til Power Platform Administration ->Miljøer ->Indstillinger ->Beskyttelse af personlige oplysninger + Sikkerhed. I følgende billede vises standardtilstanden for indstillingerne:

Standardindstillinger for indholdssikkerhedspolitik

Rapportering

Skift mellem "Aktiver rapportering" styrer, om modelbaserede apps og lærred-apps sender rapporter om overtrædelse. Aktivering af den kræver, slutpunkt angives en værdi. Der sendes overtrædelsesrapporter til denne slutpunkt, uanset om CSP håndhæves eller ej (kun bruge rapporttilstand, hvis CSP ikke håndhæves). Du kan finde flere oplysninger i rapporteringsdokumentationen.

Aktivering af slutpunkt for rapportering

Håndhævelse

Håndhævelse af CSP styres uafhængigt for modelbaserede apps og lærredsapps for at give detaljeret kontrol over politikker. Brug den modelbaserede pivot/kant pivot til at ændre den tilsigtet apptype.

Skift mellem "Gennemtving indholdssikkerhedspolitik" og standardpolitik for håndhævelse for den angivne apptype. Hvis du slår denne ændring til eller fra, ændres funktionsmåden for apps i dette miljø, så den overholder politikken. Den foreslåede aktiveringsflow vil derfor være:

  1. Gennemtvinge i et dev/test-miljø.
  2. Aktivér kun rapporttilstand i produktionen.
  3. Gennemtvinge i produktion, når der ikke er rapporteret nogen overtrædelse.

Konfigurer retningslinjer

I dette afsnit kan du styre, hvad de enkelte personer skal bruge i politikken. I øjeblikket kan frame-ancestors kun tilpasses.

Konfigurer CSP-retningslinjer

Når standard direktivet ændres, bruges den standardværdi, der er angivet i tabellen, som er vist tidligere i artiklen. Hvis du slår til/fra,kan administratorer angive brugerdefinerede værdier for direktivet og føje dem til standardværdien. I eksemplet nedenfor angives brugerdefinerede værdier for frame-ancestors. Direktivet ville være angivet til frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com i dette eksempel, hvilket vil sige, at appen kan være vært for den samme oprindelse https://*.powerapps.com, https://www.foo.com og https://www.bar.com, men ikke af andre oprindelser. Brug knappen Tilføj til at føje poster til listen og sletteikonet for at fjerne dem.

Indstilling af brugerdefinerede CSP-direktiver

Almindelige konfigurationer

Ved Microsoft Teams-integration skal du bruge Dynamics 365-appen for at tilføje følgende til frame-ancestors:

  • https://teams.microsoft.com/
  • https://teams.cloud.microsoft/
  • https://msteamstabintegration.dynamics.com/

Tilføj følgende til frame-ancestors for Dynamics 365 App for Outlook:

  • Startsiden i Outlook Web App
  • https://outlook.office.com
  • https://outlook.office365.com

Du kan indlejre Power Apps i Power BI-rapporter ved at føje følgende til frame-ancestors:

  • https://app.powerbi.com
  • https://ms-pbi.pbi.microsoft.com

Vigtige overvejelser

Hvis du slår standard direktivet fra og gemmer med en tom liste, deaktiveres direktivet fuldstændigt, og det sendes ikke som en del af CSP-svarheaderen.

Eksempler

Lad os se på et par eksempler på konfiguration af CSP:

Eksempel 1

CSP Eksempel 1

I eksemplet:

  • Rapportering er deaktiveret.
  • Modelbaseret håndhævelse er aktiveret.
    • frame-ancestors er tilpasset https://www.foo.com og https://www.bar.com
  • Lærred-håndhævelse er deaktiveret.

De effektive overskrifter er:

  • Modelbaserede apps: Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors https://www.foo.com https://www.bar.com;
  • Lærred-apps: CSP-header ville ikke blive sendt.

Eksempel 2

CSP Eksempel 2

I eksemplet:

  • Rapportering er aktiveret.
    • Slutpunkt for rapportering er angivet til https://www.mysite.com/myreportingendpoint
  • Modelbaseret håndhævelse er aktiveret.
    • frame-ancestors bevares som standard
  • Lærred-håndhævelse er deaktiveret.
    • frame-ancestors er tilpasset til https://www.baz.com

De effektive CSP-værdier er:

  • Modelbaserede apps: Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; report-uri https://www.mysite.com/myreportingendpoint;
  • Lærredapps: 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.baz.com; report-uri https://www.mysite.com/myreportingendpoint;

Indstillinger for organisation

CSP kan konfigureres uden brug af brugergrænsefladen ved at ændre følgende organisationsindstillinger direkte:

  • IsContentSecurityPolicyEnabled styrer, om Content-Security-Policy-headeren sendes i modelbaserede apps.

  • ContentSecurityPolicyConfiguration styrer værdien af frame-ancestors-delen (som vist ovenfor er den angivet til 'self' if ContentSecurityPolicyConfiguration not set). Denne indstilling repræsenteres af et JSON-objekt med følgende struktur – { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Dette ville oversættes til script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';

    • (Fra MDN) Rammedirektiverne for HTTP-indholdssikkerhedspolitik angiver gyldige overordnede, der kan indlejre en side ved hjælp af <frame>, <iframe>, <object>, <embed> eller <applet>.
  • IsContentSecurityPolicyEnabledForCanvas styrer, om Content-Security-Policy-headeren sendes i lærredapps.

  • ContentSecurityPolicyConfigurationForCanvas styrer politikken for lærred ved hjælp af den samme proces, der er beskrevet ovenfor ContentSecurityPolicyConfiguration .

  • ContentSecurityPolicyReportUri styrer, om rapportering skal bruges. Denne indstilling bruges af både modelbaserede apps og lærredsapps. En gyldig streng sender rapporter om overtrædelse til den angivne slutpunkt kun at bruge rapporttilstand, hvis IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas er deaktiveret. En tom streng deaktiverer rapportering. Du kan finde flere oplysninger i rapporteringsdokumentationen.

Konfigurer CSP uden UI-adresse

Især i forbindelse med miljøer, der ikke er i Power Platform-administration, f.eks. det lokale miljø konfigurationer, kan det være en god ide at konfigurere CSP ved hjælp af scripts for at ændre indstillingerne direkte.

Aktivering af CSP uden brugergrænseflade

Trin:

  • Åbn browser dev-værktøjer, mens du bruger den modelbaserede app som bruger med rettigheder til at opdatere organisationsobjektet (System administrator er en god indstilling).
  • Indsæt og udfør scriptet nedenfor i konsollen.
  • Hvis du vil aktivere CSP, skal du overføre standardkonfigurationen - enableFrameAncestors(["'self'"])
  • Som et eksempel på at aktivere andre oprindelser til at integrere appen - 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!')
}

Deaktivering af CSP uden brugergrænseflade

Trin:

  • Åbn browser dev-værktøjer, mens du bruger den modelbaserede app som bruger med rettigheder til at opdatere organisationsobjektet (System administrator er en god indstilling).
  • Indsæt og udfør følgende script i konsollen.
  • Indsæt følgende i konsollen for at deaktivere CSP: 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!')
}