Jagamisviis:


Sisuturbepoliitika

Sisuturbe poliitika (CSP) on praegu toetatud mudelipõhistes, lõuendi- ja koodirakendustes. See artikkel selgitab, kuidas konfigureerida CSP-d mudelipõhiste ja lõuendirakenduste jaoks. Koodirakenduste CSP kohta vaata koodirakenduste dokumentatsiooni. Administraatorid saavad määrata, kas CSP päis saadetakse ja millises ulatuses see midagi sisaldub. Seadistused on keskkonna tasandil, mis tähendab, et need rakendub kõigile rakendustele keskkonnas, kui need on sisse lülitatud.

Märkus.

Sisu turbepoliitika kehtib ainult keskkondadele, mis kasutavad Dataverse.

Iga CSP päise väärtuse komponent kontrollib alla laaditavaid varasid. Mozilla Arendajate Võrk (MDN) pakub üksikasjalikumaid kirjeldusi. Vaikeväärtused on järgmised.

Korraldus Vaikeväärtus Kohandatav
skript-src * 'unsafe-inline' 'unsafe-eval' blob: No
töötaja-src 'self' blob: No
stiil-src * 'unsafe-inline' No
font-src * data: No
raami esivanemad 'self' https://*.powerapps.com Ja

Selle konfiguratsiooni tulemuseks on CSP vaikeväärtus. script-src * 'unsafe-inline' 'unsafe-eval' blob: ; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;

Range režiim

Range CSP lüliti loob CSP, mis enamasti ei sisalda wildcard'e ega ohtlikke direktiive, näiteks unsafe-inline. Kui lülitate sisse Range CSP, muutuvad eelnevad direktiivid järgmisteks direktiivideks, mis on selles jaotises kirjeldatud. Tähistus <platform> tähendab, et platvormi domeene pakutakse vastavalt toote nõuetele. Selles jaotises olevad domeenid võivad aja jooksul muutuda, kui toode kasvab.

Korraldus Vaikeväärtus (mudelipõhine) Vaikeväärtus (lõuend) Kohandatav
skript-src 'self' blob: <platform>' 'self' <platform>' Ja
töötaja-src 'self' blob: 'self' blob: No
stiil-src 'self' 'unsafe-inline' <platform> 'self' 'unsafe-inline' <platform> Ja
font-src 'self' data: <platform> 'self' data: <platform> Ja
raami esivanemad 'self' https://*.powerapps.com 'self' https://*.powerapps.com Ja
IMG-SRC 'self' blob: data: <platform> 'self' data: <platform> Ja
ühenda-src 'self' blob: data: wss: <platform> 'self' blob: <platform> Ja
raam-src 'self' blob: <platform> 'self' <platform> Ja
base-uri 'none' Puudub No
vormi-tegevus <platform> Puudub Ja
vaikimisi-src 'self' 'self' No

eeltingimused

Dynamics 365 Customer Engagementi rakenduste ja muude mudelipõhiste rakenduste puhul on CSP saadaval ainult veebikeskkondades ja organisatsioonides, millel on Dynamics 365 Customer Engagement (on-premises) versioon 9.1 või uuem versioon.

Konfigureerige CSP-i

CSP-d saate vahetada ja konfigureerida Power Platform halduskeskuse kaudu. Oluline on esmalt lubada arendus-/testimiskeskkond, kuna CSP lubamine võib poliitika rikkumise korral hakata stsenaariume blokeerima. Halduskeskus toetab ka ainult aruandlusrežiimi , mis võimaldab tootmise käivitamist lihtsamalt.

Järgige järgmisi samme CSP seadistamiseks:

  1. Logige sisse Power Platformi halduskeskusesse.
  2. Valige navigeerimispaanil Halda . Valige paanil Haldamine Keskkonnad .
  3. Valige lehel Keskkonnad keskkond.
  4. Valige käsuribal Sätted .
  5. Laiendage valikut Toode ja seejärel valige Privaatsus + turvalisus.

Järgmisel pildil on näidatud sätete vaikeolek.

Sisu turbepoliitika vaikesätted.

Aruandlus

Lüliti Luba aruandlus määrab, kas mudelipõhised ja lõuendirakendused saadavad rikkumise aruandeid. Selle lubamiseks määra lõpp-punkt. Rakendus saadab rikkumisaruandeid sellele lõpp-punktile sõltumata sellest, kas CSP-d rakendatakse või mitte. Kui CSP-d ei rakendata, kasutab rakendus ainult raporteerimisrežiimi. Lisateavet vaadake aruandluse dokumentatsioonist.

Lubage aruandluse lüliti olekusse sees.

Jõustamine

CSP jõustamist kontrollitakse mudelipõhistel ja lõuendipõhistel rakendustel eraldi, et pakkuda poliitikate üle granuleeritud kontrolli. Kasutage vajaliku rakenduse tüübi muutmiseks mudelipõhise/lõuendi liigendust.

Lüliti Sisu turbepoliitika jõustamine lülitab sisse antud rakendusetüübi jõustamise vaikepoliitika. Selle lüliti sisselülitamine muudab selles keskkonnas olevate rakenduste käitumist, et see järgiks poliitikat. Seetõttu järgige seda soovitatud võimaldamisvoogu:

  1. Rakenda poliitikat arendus- või testkeskkonnas.
  2. Lubage tootmises ainult aruanderežiim.
  3. Rakendage poliitikat tootmises, kui rikkumisi pole teatatud.

Direktiivide konfigureerimine

Jaotis Käskude konfigureerimine võimaldab teil juhtida poliitika üksikuid direktiive. Praegu saab ainult direktiivi frame-ancestors kohandada.

CSP direktiivide konfigureerimine.

Kui jätad vaikimisi direktiivi sisse lülitatuks, kasutad tabelis määratud vaikimisi väärtust. Kui lülitad lüliti välja, saad määrata direktiivile kohandatud väärtused ja lisada need vaikimisi väärtusele. Järgmine näide seab kohandatud väärtused .frame-ancestors Direktiiv on selles näites seatud.frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com See seade tähendab, et rakendust saab majutada samas algpunktis, https://*.powerapps.com, https://www.foo.com, ja https://www.bar.com, kuid mitte teistes allikates. Kasutage loendisse kirjete lisamiseks nuppu Lisa ja nende eemaldamiseks ikooni Kustuta.

Kohandatud CSP-direktiivide määramine.

Kohandatud konfiguratsioonid

Microsoft Teams Dynamics 365 rakenduse abilintegreerimiseks lisage järgmine teave frame-ancestors.

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

Jaoks Dynamics 365 App for Outlook lisage järgmine teave frame-ancestors:

  • Teie Outlook Web Appi avalehe päritolu
  • https://outlook.office.com
  • https://outlook.office365.com

Aruannetesse Power Apps manustamiseks Power BI lisage järgmine teave frame-ancestors.

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

Olulised kaalutlused

Vaikimisi korralduse väljalülitamine ja selle koos tühja loendiga salvestamine lülitab korralduse täiesti välja ja ei saada seda CSP vastuse päise osana.

CSP konfiguratsiooni näited

Siin on paar näidet CSP konfiguratsioonidest.

Näide 1 – aruandlus on välja lülitatud

CSP näide 1, mudelipõhine

CSP näide 1, lõuend

Näites:

  • Aruandlus on välja lülitatud.
  • Mudelipõhine jõustamine on lubatud.
    • frame-ancestors on kohandatud https://www.contoso.com ja https://www.fabrikam.com.
  • Lõuendi jõustamine on keelatud.

Tõhusad päised on:

  • Mudelipõhised rakendused: Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob: data:; worker-src 'self' blob: data:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors https://www.contoso.com https://www.fabrikam.com;
  • Lõuendi rakendused: CSP päist ei saadeta.

Näide 2 – aruandlus on sisse lülitatud

CSP näide 2, mudelipõhine

CSP näide 2, lõuend

Näites:

  • Aruandlus on sisse lülitatud.
    • Aruandluse lõpp-punktiks on määratud https://contoso.com/reporting-endpoint
  • Mudelipõhine jõustamine on lubatud.
    • frame-ancestors hoitakse vaikimisi
  • Lõuendi jõustamine on keelatud.
    • frame-ancestors on kohandatud https://www.contoso.com

Efektiivsed CSP väärtused on:

  • Mudelipõhised rakendused: Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob:; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; report-uri https://contoso.com/reporting-endpoint;
  • Lõuendirakendused: 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;

Organisatsiooni sätete otsene muutmine

CSP-d saate konfigureerida ilma kasutajaliidest kasutamata, muutes neid organisatsiooni sätteid otse.

  • IsContentSecurityPolicyEnabled määrab, kas päis Content-Security-Policy saadetakse mudelipõhistes rakendustes.

  • ContentSecurityPolicyConfiguration kontrollib frame-ancestors osa väärtust (nagu varem näha, määratakse 'self' kui ContentSecurityPolicyConfiguration pole seatud). Määratlege see seade, kasutades JSON-objekti järgmise struktuuriga – { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. See konfiguratsioon tähendab script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';

    • (MDN-ist) HTTP sisuturbepoliitika (CSP) raamiga sisustatud osa korraldus määratleb kehtivad ülemüksused, mis võivad manustada lehe atribuudiga <frame>, <iframe>, <object>, <embed> või <applet>.
  • IsContentSecurityPolicyEnabledForCanvas määrab, kas päis Content-Security-Policy saadetakse lõuendirakendustes.

  • ContentSecurityPolicyConfigurationForCanvas juhib lõuendi poliitikat, kasutades sama protsessi, mida on kirjeldatud artiklis ContentSecurityPolicyConfiguration.

  • ContentSecurityPolicyReportUri määrab, kas aruandlust tuleks kasutada. Seda sätete kasutatakse nii mudelipõhistes kui ka lõuendirakendustes. Kehtiv string saadab rikkumisearuandeid määratud lõpp-punkti, kasutades ainult aruanderežiimi, kui IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas see on välja lülitatud. Tühi string keelab aruandluse. Lisateavet vaadake aruandluse dokumentatsioonist.

CSP konfigureerimine ilma kasutajaliideseta

Eriti keskkondades, mis pole Power Platformi halduskeskuses, nt asutusesisesed konfiguratsioonid, võivad administraatorid tahta konfigureerida CSP skripte kasutades, et muuta sätteid otse.

CSP lubamine ilma kasutajaliideseta

CSP lubamiseks ilma kasutajaliideseta tehke järgmist.

  • Avage brauseri arendusriistad, kasutades mudelipõhiseid rakendusi organisatsiooni olemi värskendamise õigustega kasutajana (süsteemiadministraator on hea variant).
  • Kleepige ja käivitage konsooli järgmine skript.
  • CSP lubamiseks edastage vaikekonfiguratsioon - enableFrameAncestors(["'self'"])
  • Näitena rakenduse manustamise lubamisest teistele päritoludele - 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!')
}

Keela CSP ilma kasutajaliideseta

CSP keelamiseks ilma kasutajaliideseta tehke järgmist.

  • Avage brauseri arendusriistad, kasutades mudelipõhiseid rakendusi organisatsiooni olemi värskendamise õigustega kasutajana (süsteemiadministraator on hea variant).
  • Kleepige ja käivitage konsooli järgmine skript.
  • CSP keelamiseks kleepige see konsooli: 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!')
}