Jagamisviis:


Sisuturbepoliitika

Sisu turbepoliitikat (CSP) toetatakse hetkel mudelipõhises ja lõuendi Power Appsis. Administraatorid saavad määrata, kas CSP päis saadetakse ja millises ulatuses see midagi sisaldub. Sätted on keskkonna tasemel, mis tähendab, et seda rakendatakse kõigile keskkonna rakendustele, kui need on sisse lülitatud.

Iga CSP päise komponendi väärtus kontrollib varasid, mida on võimalik alla laadida ja mida on kirjeldatud üksikasjalikumalt Mozilla arendaja võrgustikus (MDN). Vaikeväärtused on järgmised.

Korraldus Vaikeväärtus Kohandatav
script-src * 'unsafe-inline' 'unsafe-eval' No
worker-src 'self' blob: No
style-src * 'unsafe-inline' No
font-src * data: No
frame-ancestors 'self' https://*.powerapps.com Ja

Selle tulemuseks on vaikimisi CSP script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;. Meie tegevuskavas on meil võimalus muuta praegu kohandamatuid päiseid.

eeltingimused

  • Dynamics 365 klientide kaasamise rakenduste ja muude mudelipõhiste rakenduste puhul on CSP saadaval ainult veebikeskkondades ja organisatsioonides, kus on Dynamics 365 Customer Engagement-i (asutusesisene), versioon 9.1 või uuem versioon.

CSP konfigureerimine

CSP-d saab sisse-välja lülitada ja konfigureerida Power Platformi halduskeskuses. Oluline on kõigepealt lubada arendus-/testkeskkonnas, kuna CSP lubamine võib eeskirjade rikkumise korral hakata stsenaariume blokeerima. Toetame ka ainult aruande režiimi, et võimaldada tootmises lihtsamalt kiiresti loomist.

CSP konfigureerimiseks minge Power Platformi halduskeskusesse –>Keskkonnad –>Sätted ->Privaatsus + turvalisus. Järgmine pilt näitab sätete vaikeolekut.

Sisuturbepoliitika vaikeseaded

Aruandlus

Tumblernupp Aruandluse lubamine juhib, kas mudelipõhised ja lõuendirakendused saadavad rikkumise aruandeid. Selle lubamiseks on vaja määratleda lõpp-punkt. Rikkumisteated saadetakse sellesse lõpp-punkti olenemata sellest, kas CSP on jõustatud või mitte (kasutades ainult aruanderežiimi, kui CSP-d ei jõustata). Lisateavet vaadake aruandluse dokumentatsioonist.

Aruandluse lõpp-punkti lubamine

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 "Jõusta sisuturbepoliitika" lülitab sisse antud rakendusetüübi jõustamise vaikepoliitika. Selle lüliti sisselülitamine muudab rakenduste käitumist selles keskkonnas eeskirjade järgimiseks. Seega on soovitatud lubamise voog järgmine.

  1. Lubage seadme/testimise keskkond.
  2. Lubage tootmises ainult aruanderežiim.
  3. Kui ühestki rikkumisest ei teatata, jõustage tootmises.

Direktiivide konfigureerimine

See jaotis võimaldab teil juhtida poliitika piires üksikute korralduste sätteid. Hetkel on kohandatav ainult frame-ancestors.

CSP direktiivide konfigureerimine

Kui jätate vaikedirektiivi sisselülitatuks, kasutatakse selles artiklis eespool näidatud tabelis määratud vaikeväärtust. Tumblernupu väljalülitamine võimaldab administraatoritel määrata direktiivi kohandatud väärtused ja lisada need vaikeväärtusele. Allolev näide määratleb väärtused atribuudile frame-ancestors. Selles näites seataks direktiiv väärtusele frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com , mis tähendab, et rakendust saab majutada sama päritoluga https://*.powerapps.com https://www.foo.com ja https://www.bar.com mitte muust päritolust. Kasutage loendisse kirjete lisamiseks nuppu Lisa ja nende eemaldamiseks kustutamise ikooni.

Kohandatud CSP direktiivide seadmine

Kohandatud konfiguratsioonid

Rakenduse Dynamics 365 abil Microsoft Teams integreerimiseks lisage järgmine teave. frame-ancestors

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

Dynamics 365 App for OutlookNende jaoks lisage järgmine teave frame-ancestors:

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

Aruannetesse Power Apps kaasamiseks 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.

Näited

Vaadakem paari CSP konfiguratsiooni näidet.

Näide 1

CSP näide 1

Näites:

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

Kehtivad päised oleksid järgmised.

  • Mudelipõhised rakendused: 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õuendirakendused: CSP päist ei saadeta.

Näide 2

CSP näide 2

Näites:

  • Aruandlus on sisse lülitatud.
    • Aruandluse lõpp-punktiks on määratud https://www.mysite.com/myreportingendpoint
  • Mudelipõhine jõustamine on lubatud.
    • frame-ancestors hoitakse vaikeväärtusel
  • Lõuendi jõustamine on keelatud.
    • frame-ancestors kohandatakse valikule https://www.baz.com

Kehtivad CSP väärtused oleksid järgmised.

  • Mudelipõhised rakendused: 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õ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.baz.com; report-uri https://www.mysite.com/myreportingendpoint;

Organisatsiooni sätted

CSP-d saab konfigureerida kasutajaliidest kasutamata, muutes otse järgmisi organisatsiooni sätteid.

  • IsContentSecurityPolicyEnabled juhib, kas sisu turbepoliitika päis saadetakse mudelipõhistes rakendustes.

  • ContentSecurityPolicyConfiguration juhib raami-esivanemate osa väärtust (nagu eespool näha, on see seatud väärtusele 'self' , kui ContentSecurityPolicyConfiguration seda pole määratud). Seda sätet tähistab JSON-objekt koos järgmise struktuuriga – { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. See tõlgendatakse suvandiks 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 juhib, kas sisu turbepoliitika päis saadetakse lõuendirakendustes.

  • ContentSecurityPolicyConfigurationForCanvas juhib lõuendi poliitikat, kasutab sama protsessi, mida on kirjeldatud ülal suvandis ContentSecurityPolicyConfiguration.

  • ContentSecurityPolicyReportUri juhib, kas aruandlust peaks kasutama. Seda sätete kasutatakse nii mudelipõhistes kui ka lõuendirakendustes. Sobiv string saadab rikkumise teated 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

Etapid:

  • Avage brauseri arendusriistad, kasutades mudelipõhiseid rakendusi organisatsiooni olemi värskendamise õigustega kasutajana (süsteemiadministraator on hea variant).
  • Kleepige järgmine skrpit konsooli ka käivitage see.
  • CSP lubamiseks läbige vaikekonfiguratsioon - enableFrameAncestors(["'self'"])
  • Näide rakenduse manustamise lubamisest muude päritolude kohta - 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 keelamine ilma kasutajaliideseta

Etapid:

  • 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!')
}