Kopīgot, izmantojot


Satura drošības politika

satura drošības politika (CSP) pašlaik tiek atbalstīts modeļu vadītā un audeklā Power Apps. 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 pēc ieslēgšanas tas tiks piemērots visām lietotnēm vidē.

Katrs CSP galvenes vērtības komponents kontrolē lejupielādējamos līdzekļus, un tas ir sīkāk aprakstīts Mozilla Developer Network (MDN). Noklusējuma vērtības ir šādas:

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

Tā rezultātā tiek izveidots noklusējuma CSP no script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;. Mūsu ceļvedī mums ir iespēja modificēt pašlaik nepielāgojamas galvenes.

Priekšnoteikumi

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

CSP konfigurēšana

CSP var pārslēgt un konfigurēt, izmantojot Power Platform administrēšanas centru. Ir svarīgi vispirms iespējot izstrādātāja/testa vidē, jo CSP iespējošana var sākt bloķēt scenārijus, ja politika tiek pārkāpta. Mēs atbalstām arī "tikai pārskatu režīmu", lai atvieglotu ražošanas uzsākšanu.

Lai konfigurētu CSP, dodieties uz Power Platform administrēšanas centru ->Vides ->Iestatījumi ->Privātums + drošība. Šajā attēlā redzams iestatījumu noklusējuma stāvoklis:

Satura drošības politika noklusējuma iestatījumi

Notiek ziņošana

Pārslēgs "Iespējot ziņošanu" nosaka, vai modeļa un kanvas lietotnes sūta pārkāpumu ziņojumus. Lai to iespējotu, ir jānorāda galapunkts. Ziņojumi par pārkāpumiem tiek nosūtīti uz šo galapunktu neatkarīgi no tā, vai CSP tiek īstenota vai nē (izmantojot tikai ziņošanas režīmu, ja CSP netiek īstenota). Lai iegūtu vairāk informācijas, skatiet ziņošanas dokumentāciju.

Atskaišu izveides galapunkta iespējošana

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.

Slēdzis "Ieviest satura drošības politika" ieslēdz attiecīgā lietotnes veida noklusējuma piemērošanas politiku. Ieslēdzot šo slēdzi, tiek mainīta lietojumprogrammu darbība šajā vidē, lai ievērotu politiku. Tāpēc ierosinātais darbības nodrošināšanas process būtu šāds:

  1. Īstenošana izstrādes/testa vidē.
  2. Ražošanas režīmā iespējojiet tikai atskaites režīmu.
  3. Ieviest ražošanā, tiklīdz nav ziņots par pārkāpumiem.

Norādījumu konfigurēšana

Šī sadaļa ļauj kontrolēt atsevišķas politikas direktīvas. Pašlaik var pielāgot tikai frame-ancestors.

CSP direktīvu konfigurēšana

Atstājot ieslēgtu noklusējuma direktīvu, tiek izmantota noklusējuma vērtība, kas norādīta iepriekš šajā rakstā parādītajā tabulā. Slēdža izslēgšana ļauj administratoriem norādīt pielāgotas direktīvas vērtības un pievienot tās noklusējuma vērtībai. Tālāk dotajā piemērā ir iestatītas pielāgotas vērtības frame-ancestors. Šajā piemērā direktīva būtu iestatīta, kas frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com nozīmē, ka lietotni var mitināt tajā pašā izcelsmē, https://*.powerapps.com https://www.foo.com bet https://www.bar.com ne citā izcelsmē. Izmantojiet pogu Pievienot, lai pievienotu ierakstus sarakstam, un dzēšanas ikonu, lai tos dzēstu.

Pielāgotu CSP direktīvu iestatīšana

Izplatītas konfig.

Lai Microsoft Teams veiktu integrāciju, izmantojot Dynamics 365 programmu, pievienojiet frame-ancestors:

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

Attiecībā uz šādiem Dynamics 365 App for Outlook elementiem frame-ancestors pievieno:

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

Lai iegultu Power Apps atskaitēs Power BI , pievienojiet šādu informāciju frame-ancestors:

  • 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.

Piemēri

Apskatīsim dažus CSP konfigurācijas piemērus:

1. piemērs

CSP 1. piemērs

Piemērā:

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

Efektīvie virsraksti būtu šādi:

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

2. piemērs

CSP 2. piemērs

Piemērā:

  • Ziņošana ir ieslēgta.
    • Ziņošanas galapunkts ir iestatīts uz https://www.mysite.com/myreportingendpoint
  • 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.baz.com

Efektīvas CSP vērtības būtu:

  • Modeļa vadītas programmas: 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;
  • 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.baz.com; report-uri https://www.mysite.com/myreportingendpoint;

Organizācijas iestatījumi

CSP var konfigurēt, neizmantojot lietotāja saskarni, tieši mainot šādus organizācijas iestatījumus:

  • IsContentSecurityPolicyEnabled kontrolē, vai satura drošības politikas galvene tiek sūtīta modeļa vadītās programmās.

  • ContentSecurityPolicyConfiguration kontrolē kadru priekšteču daļas vērtību (kā redzams iepriekš, tā ir iestatīta uz 'self' if ContentSecurityPolicyConfiguration nav iestatīta). Šo iestatījumu attēlo JSON objekts ar šādu struktūru – { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Tas izpaustos kā script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; 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 satura drošības-politikas galvene tiek nosūtīta audekla programmās.

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

  • ContentSecurityPolicyReportUri kontrolē, vai ir jāizmanto ziņošana. Šo iestatījumu izmanto gan modeļa, gan kanvas lietotnēs. Derīga virkne sūta pārkāpumu ziņojumus uz norādīto galapunktu, izmantojot tikai atskaites 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.

CSP iespējošana bez UI

Darbības:

  • 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 zemāk redzamo skriptu konsolē.
  • Lai iespējotu CSP, nokārtojiet noklusējuma konfigurāciju - enableFrameAncestors(["'self'"])
  • Kā piemērs, lai ļautu citiem avotiem iegult lietotni - 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 atpējošana bez UI

Darbības:

  • 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 konsolē šādu skriptu.
  • 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!')
}