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' Ja

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

eeltingimused

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

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.

Sisu turvapoliitika vaikesätted

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 sisuturbeeeskirjad" 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.

Korralduste konfigureerimine

Viimane jaotis on „Korralduste 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 direktiivile säte frame-ancestors: 'self' https://www.foo.com https://www.bar.com , mis tähendab, et rakendust saab majutada samas päritolus https://www.foo.comhttps://www.bar.com, kuid mitte muus päritolus. Kasutage loendisse kirjete lisamiseks nuppu Lisa ja nende eemaldamiseks kustutamise ikooni.

Kohandatud CSP direktiivide seadmine

Kohandatud konfiguratsioonid

Integreerimiseks Microsoft Teams Dynamics 365 rakenduse abillisage järgmine teave frame-ancestors.

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

See tähendab Dynamics 365 App for Outlook, et peate lisama oma Outlook Web Appi avalehe päritolu frame-ancestors.

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

  • https://app.powerbi.com
  • https://msi-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

Ülaltoodud näites kehtib järgnev.

  • 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

Ülaltoodud näites kehtib järgnev.

  • 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'; 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 kontrollib raamiga sisustatud osa (nagu üleval on näha, on selleks määratud 'self', kui ContentSecurityPolicyConfiguration 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.
  • Lihtsalt CSP lubamiseks edastage vaikekonfiguratsioon – enableFrameAncestors(["'self'"])
  • Näites on lisapäritolude lubamine rakenduse manustamiseks – 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 järgmine skrpit konsooli ka käivitage see.
  • 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!')
}