Kopīgot, izmantojot


Satura drošības politika

Satura drošības politika (CSP) pašlaik tiek atbalstīta modeļa vadītās, audekla un koda programmās. Šajā rakstā ir paskaidrots, kā konfigurēt CSP modeļa vadītām un audekla programmām. Informāciju par koda lietotņu CSP skatiet koda lietojumprogrammu dokumentācijā. Administratori var kontrolēt, vai CSP galvene tiek nosūtīta un, zināmā mērā, ko tā satur. Iestatījumi ir vides līmenī, kas nozīmē, ka tie tiek lietoti visām programmām vidē, kad tie ir ieslēgti.

Piezīmes

Satura drošības politika attiecas tikai uz vidi, kas izmanto Dataverse.

Katrs CSP galvenes vērtības komponents kontrolē lejupielādējamos līdzekļus. Mozilla izstrādātāju tīkls (MDN) sniedz detalizētākus aprakstus. Noklusējuma vērtības ir šādas:

Direktīva Noklusējuma vērtība Pielāgojami
skripts-src * 'unsafe-inline' 'unsafe-eval' blob: Nē.
Strādnieks-SRC 'self' blob: Nē.
stils-src * 'unsafe-inline' blob: Nē.
fonts-src * data: Nē.
Rāmja senči 'self' https://*.powerapps.com

Šīs konfigurācijas rezultātā tiek izveidots noklusējuma CSP 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;.

Stingrs režīms

Stingrā CSP pārslēgs izveido CSP, kurā lielākoties nav iekļautas aizstājējzīmes vai nedrošas direktīvas, piemēram unsafe-inline, . Ieslēdzot stingro CSP, iepriekšējās direktīvas kļūst par tālāk norādītajām direktīvām, kas aprakstītas šajā sadaļā. Šis <platform> apzīmējums nozīmē, ka platformas domēni tiek nodrošināti atbilstoši produkta prasībām. Šajā sadaļā esošie domēni laika gaitā var mainīties, pieaugot produktam.

Direktīva Noklusējuma vērtība (atkarīga no modeļa) Noklusējuma vērtība (audekls) Pielāgojami
skripts-src 'self' blob: <platform>' 'self' <platform>'
Strādnieks-SRC 'self' blob: 'self' blob: Nē.
stils-src 'self' 'unsafe-inline' blob: <platform> 'self' 'unsafe-inline' <platform>
fonts-src 'self' data: <platform> 'self' data: <platform>
Rāmja senči 'self' https://*.powerapps.com 'self' https://*.powerapps.com
IMG-SRC 'self' blob: data: <platform> 'self' data: <platform>
savienot-src 'self' blob: data: wss: <platform> 'self' blob: <platform>
rāmis-src 'self' blob: <platform> 'self' <platform>
bāze-uri 'none' Nav datu Nē.
Veidlapas darbība <platform> Nav datu
noklusējums-src 'self' 'self' Nē.

Priekšnoteikumi

Dynamics 365 klientu iesaistes programmām un citām modeļa vadītām programmām CSP ir pieejams tikai tiešsaistes vidē un organizācijās ar Dynamics 365 Customer Engagement (on-premises), versiju 9.1 vai jaunāku versiju.

Konfigurējiet CSP

CSP var pārslēgt un konfigurēt, izmantojot administrēšanas centru Power Platform . Ir svarīgi vispirms iespējot izstrādes/testēšanas vidi, jo, iespējojot CSP, var sākt bloķēt scenārijus, ja politika tiek pārkāpta. Administrēšanas centrs atbalsta arī tikai atskaišu režīmu, lai atvieglotu ražošanas uzsākšanu.

Lai konfigurētu CSP, veiciet tālāk norādītās darbības.

  1. Pierakstieties Power Platform administrēšanas centrā.
  2. Navigācijas rūtī atlasiet Pārvaldīt. Rūtī Pārvaldība atlasiet Vides.
  3. Lapā Vides atlasiet vidi.
  4. Komandjoslā atlasiet Iestatījumi.
  5. Izvērsiet Produkts un pēc tam atlasiet Konfidencialitāte + drošība.

Šajā attēlā parādīts iestatījumu noklusējuma stāvoklis:

Satura drošības politikas noklusējuma iestatījumi.

Pārskatu veidošana

Pārslēgs Iespējot pārskatus kontrolē, vai modeļa vadītas un audekla programmas sūta pārkāpumu ziņojumus. Lai to iespējotu, norādiet galapunktu. Lietotne nosūta ziņojumus par pārkāpumiem uz šo galapunktu neatkarīgi no tā, vai CSP tiek piemērots vai nē. Ja CSP netiek piemērots, lietotnē tiek izmantots tikai pārskatu režīms. Lai iegūtu vairāk informācijas, skatiet ziņošanas dokumentāciju.

Iespējojiet pārskatu pārslēgu uz ieslēgtu.

Izpilde

CSP izpilde tiek kontrolēta neatkarīgi no modeļa un kanvas lietotnēm, lai nodrošinātu detalizētu politiku kontroli. Izmantojiet uz modeli balstītu/kanvas rakursu, lai mainītu paredzēto lietotnes veidu.

Pārslēgs Ieviest satura drošības politiku ieslēdz noklusējuma politiku izpildei konkrētajam lietotnes tipam. Ieslēdzot šo pārslēgu, tiek mainīta lietotņu darbība šajā vidē, lai ievērotu politiku. Tāpēc izpildiet šo ieteikto iespējošanas plūsmu:

  1. Politikas ieviešana izstrādātāja vai testa vidē.
  2. Ražošanas režīmā iespējojiet tikai atskaites režīmu.
  3. Ieviest politiku ražošanā, kad nav ziņots par pārkāpumiem.

Norādījumu konfigurēšana

Sadaļa Direktīvu konfigurēšana ļauj kontrolēt atsevišķas politikas direktīvas. Pašlaik direktīvu var pielāgot frame-ancestors tikai.

Konfigurējiet CSP direktīvas.

Ja atstājat ieslēgtu noklusējuma direktīvu, tiek izmantota tabulā norādītā noklusējuma vērtība. Ja izslēdzat pārslēgu, varat norādīt pielāgotas direktīvas vērtības un pievienot tās noklusējuma vērtībai. Šajā piemērā ir iestatītas pielāgotas vērtības .frame-ancestors Šajā piemērā direktīva ir noteikta frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com . Šis iestatījums nozīmē, ka programmu var viesot vienā un tajā pašā izcelsmē, https://*.powerapps.com, https://www.foo.comun https://www.bar.com, bet ne citā izcelsmē. Izmantojiet pogu Pievienot, lai sarakstam pievienotu ierakstus, un ikonu Dzēst , lai tos noņemtu.

Pielāgotu CSP direktīvu iestatīšana.

Izplatītas konfig.

Lai Microsoft Teams integrētu, izmantojot programmu Dynamics 365, pievienojiet tālāk norādīto frame-ancestors.

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

Pievienojiet Dynamics 365 App for Outlook tālāk norādīto frame-ancestors informāciju:

  • Outlook Web App sākumlapas izcelsme
  • https://outlook.office.com
  • https://outlook.office365.com

Lai iegultu Power Apps atskaitēs Power BI , pievienojiet tālāk frame-ancestors norādīto informāciju:

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

Svarīgi ieteikumi

Noklusējuma direktīvas izslēgšana un saglabāšana ar tukšu sarakstu izslēdz direktīvu pilnībā un nenosūta to kā daļu no CSP atbildes galvenes.

CSP konfigurācijas piemēri

Šeit ir daži CSP konfigurāciju piemēri.

1. piemērs — atskaišu izslēgšana

CSP piemērs 1, modeļa vadīts

CSP piemērs 1, audekls

Piemērā:

  • Ziņošana ir izslēgta.
  • Ir iespējota uz modeli balstīta izpilde.
    • frame-ancestors ir pielāgots https://www.contoso.com un https://www.fabrikam.com.
  • Kanvas izpilde ir atspējota.

Efektīvās galvenes ir šādas:

  • Uz modeļiem balstītas lietotnes: 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;
  • Audekla programmas: CSP galvene netiek nosūtīta.

2. piemērs — pārskati ir ieslēgti

CSP 2. piemērs, modeļa vadīts

CSP piemērs 2, audekls

Piemērā:

  • Ziņošana ir ieslēgta.
    • Ziņošanas galapunkts ir iestatīts uz https://contoso.com/reporting-endpoint
  • Ir iespējota uz modeli balstīta izpilde.
    • frame-ancestors tiek saglabāts kā noklusējums
  • Kanvas izpilde ir atspējota.
    • frame-ancestors ir pielāgots https://www.contoso.com

Efektīvās CSP vērtības ir šādas:

  • Uz modeļiem balstītas lietotnes: 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;
  • Kanvas lietotnes: 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;

Tieši mainiet organizācijas iestatījumus

CSP var konfigurēt, neizmantojot lietotāja interfeisu, tieši modificējot šos organizācijas iestatījumus:

  • IsContentSecurityPolicyEnabled kontrolē, vai Content-Security-Policy galvene tiek nosūtīta modeļa vadītās programmās.

  • ContentSecurityPolicyConfiguration kontrolē kadru priekšteču daļas vērtību (kā redzams iepriekš, tā tiek iestatīta uz 'self' if ContentSecurityPolicyConfiguration nav iestatīts). Definējiet šo iestatījumu, izmantojot JSON objektu ar šādu struktūru — { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Šī konfigurācija nozīmē script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';

    • (No MDN) HTTP Content-Security-Policy (CSP) frame-ancestors direktīvā ir norādīti derīgie vecinātāji, kas var ievietot lapu, izmantojot <frame>, <iframe>, <object>, <embed> vai <applet>.
  • IsContentSecurityPolicyEnabledForCanvas kontrolē, vai Content-Security-Policy galvene tiek nosūtīta audekla programmās.

  • ContentSecurityPolicyConfigurationForCanvas kontrolē audekla politiku, izmantojot to pašu procesu, kas aprakstīts ContentSecurityPolicyConfiguration.

  • ContentSecurityPolicyReportUri kontrolē, vai jāizmanto atskaišu veidošana. Šo iestatījumu izmanto gan modeļa, gan kanvas lietotnēs. Derīga virkne nosūta pārkāpumu ziņojumus uz norādīto galapunktu, izmantojot tikai atskaišu režīmu, ja IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas tas ir izslēgts. Tukša virkne atspējo ziņošanu. Lai iegūtu vairāk informācijas, skatiet ziņošanas dokumentāciju.

CSP konfigurēšana bez UI

Īpaši vidēs, kas nav Power Platform administrēšanas centrā, piemēram, vietējās konfigurācijās, administratori var vēlēties konfigurēt CSP, izmantojot skriptus, lai tieši mainītu iestatījumus.

Iespējot CSP bez lietotāja interfeisa

Veiciet tālāk norādītās darbības, lai iespējotu CSP bez lietotāja interfeisa.

  • Atveriet pārlūkprogrammas izstrādes rīkus, vienlaikus izmantojot uz modeli balstītu lietotni kā lietotājs ar organizācijas vienības atjaunināšanas privilēģijām (labs variants ir sistēmas administrators).
  • Ielīmējiet un izpildiet tālāk norādīto skriptu konsolē.
  • Lai iespējotu CSP, nododiet noklusējuma konfigurāciju - enableFrameAncestors(["'self'"])
  • Kā piemērs, kā iespējot citu izcelsmes lietotāju iegulšanu - 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!')
}

CSP atspējot bez lietotāja interfeisa

Veiciet tālāk norādītās darbības, lai atspējotu CSP bez lietotāja interfeisa.

  • Atveriet pārlūkprogrammas izstrādes rīkus, vienlaikus izmantojot uz modeli balstītu lietotni kā lietotājs ar organizācijas vienības atjaunināšanas privilēģijām (labs variants ir sistēmas administrators).
  • Ielīmējiet un izpildiet tālāk norādīto skriptu konsolē.
  • Lai atspējotu CSP, ielīmējiet konsolē: 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!')
}