Sisällön suojauskäytäntö
sisällön suojauskäytäntö (CSP) on tällä hetkellä tuettu mallipohjaisessa ja canvasissa Power Apps. Järjestelmänvalvojat voivat määrittää, lähetetäänkö CSP-otsikko ja – tiettyyn rajaan asti – mitä se sisältää. Asetukset ovat ympäristötasolla, mikä tarkoittaa, että niitä sovelletaan kaikkiin ympäristön sovelluksiin, kun ne on otettu käyttöön.
Jokainen CSP-otsikon arvon komponentti ohjaa resursseja, jotka voidaan ladata ja jotka on kuvattu tarkemmin Mozilla Developer Networkissa (MDN). Oletusarvot näkyvät alla:
Direktiivi | Oletusarvo | Mukautettavissa |
---|---|---|
Skripti-SRC | * 'unsafe-inline' 'unsafe-eval' |
Ei |
työntekijä-src | 'self' blob: |
Ei |
tyyli-src | * 'unsafe-inline' |
Ei |
fontti-src | * data: |
Ei |
Kehys-esi-isät | 'self' https://*.powerapps.com |
Kyllä |
Tämä johtaa kohteen script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;
oletusarvoiseen CSP-käytäntöön. Etenemissuunnitelmassamme voi muokata tällä hetkellä ei-muokattavia otsikoita.
edellytykset
- Dynamics 365 asiakkaan osallistamissovelluksissa ja muissa mallipohjaisissa sovelluksissa CSP on käytettävissä vain verkkoympäristöissä ja organisaatioissa, joissa on Dynamics 365 Customer Engagement (paikallinen) -versio 9.1 tai uudempi.
CSP:n määrittäminen
CSP voidaan ottaa käyttöön ja pois käytöstä sekä määrittää Power Platform -hallintakeskuksen kautta. On tärkeää ottaa se ensin käyttöön kehitys-/testiympäristössä, koska CSP:n käyttöönotto voi alkaa estää skenaarioita, jos käytäntöä rikotaan. Tuemme myös Vain raportti -tilaa nopeuttaaksemme käyttöönottoa tuotantoympäristössä.
Jos haluat määrittää CSP-käytännön, siirry kohtaan Power Platform -hallintakeskus->Ympäristöt->Asetukset->Tietoturva ja tietosuoja. Seuraavassa kuvassa näkyy asetusten oletustila:
Raportoidaan
Ota raportointi käyttöön -valitsin määrittää, lähettävätkö mallipohjaiset sovellukset ja pohjaan perustuvat sovellukset raportteja rikkomuksista. Sen käyttöönotto edellyttää päätepisteen määrittämistä. Rikkomuksia koskevat raportit lähetetään tähän päätepisteeseen riippumatta siitä, onko CSP käytössä vai ei (käyttämällä Vain raportti -tilaa, jos CSP ei ole käytössä). Lisätietoja on raportointia koskevassa dokumentaatiossa.
Valvonta
CSP otetaan käyttöön mallipohjaisille ja pohjaan perustuville sovelluksille erikseen, jotta käytäntöjä voidaan hallita tarkemmin. Käytä mallipohjaista / pohjaan perustuvaa sovellusta muokataksesi tarkoitettua sovellustyyppiä.
Pakota sisällön suojauskäytäntö -kytkin ottaa käyttöön oletuskäytännön tietyn sovellustyypin pakottamiseksi. Tämän valitsimen kytkeminen päälle muuttaa tapaa, jolla tämän ympäristön sovellukset noudattavat käytäntöä. Tästä syystä suositeltu käyttöönoton työnkulku olisi:
- Ota käyttöön kehitys-/testiympäristössä.
- Ota Vain raportti -tila käyttöön tuotantoympäristössä.
- Ota käyttöön tuotantoympäristössä, kun rikkomuksia ei enää raportoida.
Määritä ohjeet
Tämä osio sallii sinun hallita yksittäisiä direktiivejä käytännön sisällä. Tällä hetkellä vain frame-ancestors
-direktiiviä voidaan mukauta.
Oletusdirektiivin jättäminen päälle käyttää oletusarvoa, joka on määritetty aiemmin tässä artikkelissa esitetyssä taulukossa. Kytkimen poistaminen käytöstä antaa järjestelmänvalvojille mahdollisuuden määrittää mukautettuja arvoja käskylle ja liittää ne oletusarvoon. Alla oleva esimerkki määrittää mukautetut arvot frame-ancestors
-direktiiville. Direktiivin arvoksi määritetään tässä esimerkissä frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com
. Se tarkoittaa sitä, että sovellusta voi isännöidä samassa alkuperäisessä paikassa, https://*.powerapps.com
, https://www.foo.com
ja https://www.bar.com
, mutta ei muissa paikoissa. Käytä Lisää-painiketta lisätäksesi luetteloon merkintöjä ja Poista-kuvaketta poistaa niitä.
Yleiset määritykset
Lisää Microsoft Teams -integrointi Dynamics 365 -sovelluksen avulla lisäämällä seuraava kohteeseen frame-ancestors
:
https://teams.microsoft.com/
https://teams.cloud.microsoft/
https://msteamstabintegration.dynamics.com/
Dynamics 365 App for Outlookissa lisätään seuraavat kohteeseen frame-ancestors
:
- Outlook Web App -aloitussivun alkuperä
https://outlook.office.com
https://outlook.office365.com
Jos haluat upottaa Power Apps -tietoja Power BI -raportteihin, lisää seuraavat asiat kohteeseen frame-ancestors
:
https://app.powerbi.com
https://ms-pbi.pbi.microsoft.com
Tärkeitä huomioon otettavia seikkoja
Oletusdirektiivin poistaminen käytöstä ja tyhjän luettelon tallentaminen poistaa direktiivin kokonaan käytöstä eikä lähetä sitä osana CSP-vastauksen otsikkoa.
Esimerkkejä
Alla on muutama esimerkki CSP-kokoonpanosta:
Esimerkki 1
Esimerkissä:
- Raportointi on poistettu käytöstä.
- Käytäntö on käytössä mallipohjaisille sovelluksille.
frame-ancestors
on räätälöity jahttps://www.foo.com
https://www.bar.com
- Käytäntö on käytössä pohjaan perustuvissa sovelluksissa.
Voimassa olevat otsikot olisivat:
- Mallipohjaiset sovellukset:
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;
- Pohjaan perustuvat sovellukset: CSP-otsikkoa ei lähetettäisi.
Esimerkki 2
Esimerkissä:
- Raportointi on käytössä.
- Raportoinnin päätepisteeksi on määritetty
https://www.mysite.com/myreportingendpoint
- Raportoinnin päätepisteeksi on määritetty
- Käytäntö on käytössä mallipohjaisille sovelluksille.
frame-ancestors
pidetään oletuksena
- Käytäntö on käytössä pohjaan perustuvissa sovelluksissa.
frame-ancestors
on räätälöityhttps://www.baz.com
Voimassa olevat CSP-arvot olisivat:
- Mallipohjaiset sovellukset:
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;
- Pohjaan perustuvat sovellukset:
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;
Organisaation asetukset
CSP voidaan määrittää ilman käyttöliittymää muokkaamalla seuraavia organisaation asetuksia suoraan:
IsContentSecurityPolicyEnabled määrittää, lähetetäänkö Content-Security-Policy-otsikko mallipohjaisissa sovelluksissa.
ContentSecurityPolicyConfiguration ohjaa kehys-esivanhemmat-osan arvoa (kuten edellä näkyy, se on määritetty
'self'
josContentSecurityPolicyConfiguration
ei ole määritetty). Tätä asetusta edustaa JSON-objekti, jolla on seuraava rakenne:{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }
. Tämä muuntuu muotoonscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';
- (MDN-sisältöä) HTTP:n Content-Security-Policy (CSP) frame-ancestors-direktiivi määrittää kelvolliset ylätasot, jotka voi upottaa sivun käyttäen jotain seuraavista:
<frame>
,<iframe>
,<object>
,<embed>
tai<applet>
.
- (MDN-sisältöä) HTTP:n Content-Security-Policy (CSP) frame-ancestors-direktiivi määrittää kelvolliset ylätasot, jotka voi upottaa sivun käyttäen jotain seuraavista:
IsContentSecurityPolicyEnabledForCanvas määrittää, lähetetäänkö Content-Security-Policy-otsikko pohjaan perustuvissa sovelluksissa.
ContentSecurityPolicyConfigurationForCanvas ohjaa kaavion käytäntöä edellä kuvatulla
ContentSecurityPolicyConfiguration
tavalla.ContentSecurityPolicyReportUri määrittää, käytetäänkö raportointia. Sekä mallipohjaiset että pohjaan perustuvat sovellukset käyttävät tätä asetusta. Kelvollinen merkkijono lähettää rikkomuksia koskevia raportteja määritettyyn päätepisteeseen käyttämällä Vain raportti -tilaa, jos
IsContentSecurityPolicyEnabled
/IsContentSecurityPolicyEnabledForCanvas
ei ole käytössä. Tyhjä merkkijono poistaa raportoinnin käytöstä. Lisätietoja on raportointia koskevassa dokumentaatiossa.
CSP:n määrittäminen ilman käyttöliittymää
Järjestelmänvalvojvat saattavat haluta määrittää CSP-käytännön muokkaamalla asetuksia suoraan komentosarjoilla, erityisesti Power Platform -hallintakeskuksen ulkopuolisissa ympäristöissä, kuten paikallisissa kokoonpanoissa.
CSP:n ottaminen käyttöön ilman käyttöliittymää
Vaiheet:
- Avaa selaimen kehitystyökalut, kun käytät mallipohjaista sovellusta käyttäjänä, jolla on organisaatioentiteetin päivitysoikeudet (Järjestelmänvalvoja on hyvä vaihtoehto).
- Liitä ja suorita alla oleva komentosarja konsolissa.
- Ota CSP käyttöön siirtämällä oletusasetukset -
enableFrameAncestors(["'self'"])
- Esimerkkinä siitä, että muut alkuperät voivat upottaa sovelluksen -
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:n poistaminen käytöstä ilman käyttöliittymää
Vaiheet:
- Avaa selaimen kehitystyökalut, kun käytät mallipohjaista sovellusta käyttäjänä, jolla on organisaatioentiteetin päivitysoikeudet (Järjestelmänvalvoja on hyvä vaihtoehto).
- Liitä ja suorita seuraava komentosarja konsoliin.
- Voit poistaa CSP:n käytöstä liittämällä konsoliin
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!')
}