Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
CSP-käytäntöä tuetaan tällä hetkellä mallipohjaisissa ja koodisovelluksissa. Tässä artikkelissa kerrotaan, miten CSP määritetään mallipohjaisia ja pohjaan perustuvia sovelluksia varten. Koodisovellusten CSP:n osalta katso koodisovellusten dokumentaatio. Järjestelmänvalvojat voivat määrittää, lähetetäänkö sisällön suojauskäytännön otsikko. He voivat myös tiettyyn rajaan asti määrittää, mitä se sisältää. Asetukset ovat ympäristötasolla, mikä tarkoittaa, että ne otetaan käyttöön kaikissa ympäristön sovelluksissa, kun ne on kerran otettu käyttöön.
Huomautus
Sisällön suojauskäytäntö koskee vain ympäristöjä, joissa käytetään Dataversea.
Kukin CSP-otsikon arvon osa hallitsee resursseja, jotka voidaan ladata palvelusta. Mozilla Developer Network (MDN) tarjoaa tarkempia kuvauksia. Oletusarvot näkyvät alla:
| Direktiivi | Oletusarvo | Mukautettavissa |
|---|---|---|
| script-src | * 'unsafe-inline' 'unsafe-eval' blob: |
Ei |
| worker-src | 'self' blob: |
Ei |
| style-src | * 'unsafe-inline' blob: |
Ei |
| font-src | * data: |
Ei |
| frame-ancestors | 'self' https://*.powerapps.com |
Kyllä |
Tämän määrityksen tulos on oletusarvoinen sisällön suojauskäytäntö kohteelle 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;.
Tiukka tila
Tiukka CSP-vaihtopainike luo CSP-järjestelmän, joka ei useimmiten sisällä yleismerkkejä tai vaarallisia direktiivejä, kuten unsafe-inline. Kun otat tiukan CSP-järjestelmän käyttöön, edellä annetuista direktiiveistä tulee tässä osiossa yksityiskohtaiset ohjeet. Tämä <platform> merkintä tarkoittaa, että käyttöympäristön toimialueet ovat tuotteen edellyttämiä. Tämän osion toimialueet saattavat muuttua ajan mittaan tuotteen kasvaessa.
| Direktiivi | Oletusarvo (mallipohjainen) | Oletusarvo (pohja) | Mukautettavissa |
|---|---|---|---|
| script-src | 'self' blob: <platform>' |
'self' <platform>' |
Kyllä |
| worker-src | 'self' blob: |
'self' blob: |
Ei |
| style-src | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Kyllä |
| font-src | 'self' data: <platform> |
'self' data: <platform> |
Kyllä |
| frame-ancestors | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Kyllä |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Kyllä |
| connect-src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Kyllä |
| frame-src | 'self' blob: <platform> |
'self' <platform> |
Kyllä |
| base-uri | 'none' |
Ei käytettävissä | Ei |
| form-action | <platform> |
Ei käytettävissä | Kyllä |
| default-src | 'self' |
'self' |
Ei |
Edellytykset
Dynamics 365 Customer Engagement -sovelluksissa ja muissa mallipohjaisissa sovelluksissa sisällön suojauskäytäntö on käytettävissä vain verkkoympäristöissä ja organisaatioissa, joissa on Dynamics 365 Customer Engagement (on-premises) -versio 9.1 tai sitä uudempi.
Sisällön suojauskäytännön määrittäminen
Voit valita ja määrittää sisällön suojauskäytännön Power Platform -hallintakeskuksen avulla. On tärkeää ottaa ensin käyttöön kehitys- tai testausympäristö, koska sisällön suojauskäytännön käyttöönotto voi alkaa estää skenaarioita, jos käytäntöä rikotaan. Hallintakeskus tukee myös vain raportteja - tilaa, joka helpottaa tuotannon tehostamista.
Määritä CSP seuraavasti:
- Kirjaudu Power Platform -hallintakeskukseen.
- Valitse siirtymisruudussa Hallitse. Valitse Hallitse-ruudussa Ympäristöt.
- Valitse Ympäristöt-sivulla ympäristö.
- Valitse komentopalkissa Asetukset.
- Laajenna Tuote ja valitse sitten Yksityisyys + Suojaus.
Seuraavassa kuvassa näkyy asetusten oletustila:
Raportointi
Ota raportointi käyttöön -vaihtopainike määrittää, lähettävätkö mallipohjaiset sovellukset ja pohjaan perustuvat sovellukset raportteja rikkomuksista. Jos haluat ottaa sen käyttöön, määritä päätepiste. Sovellus lähettää rikkomusraportteja tähän päätepisteeseen riippumatta siitä, pakotetaanko CSP vai ei. Jos CSP ei ole käytössä, sovellus käyttää vain raportti -tilaa. Lisätietoja on raportointia koskevassa dokumentaatiossa.
Valvonta
Sisällön suojauskäytäntö 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ö -valintakytkin ottaa käyttöön oletuskäytännön annetun sovellustyypin pakottamiseksi. Tämän valitsimen kytkeminen päälle muuttaa tapaa, jolla tämän ympäristön sovellukset noudattavat käytäntöä. Noudata siis tätä ehdotettua käyttöönottotyönkulkua:
- Ota käytäntö käyttöön kehitys- tai testiympäristössä.
- Ota Vain raportti -tila käyttöön tuotantoympäristössä.
- Pane käytäntö täytäntöön tuotannossa, kun rikkomuksista ei raportoida.
Ohjeiden määrittäminen
Määritä direktiivit -osiossa voit hallita käytännön yksittäisiä direktiivejä. Tällä hetkellä voit vain mukauttaa frame-ancestors direktiiviä.
Jos jätät oletusdirektiivin käyttöön, käytät taulukossa määritettyä oletusarvoa. Jos poistat vaihtopainikkeen käytöstä, voit määrittää direktiivin mukautetut arvot ja liittää ne oletusarvoon. Seuraavassa esimerkissä asetetaan mukautetut -arvot parametrille frame-ancestors. Tässä esimerkissä direktiivin asetukseksi frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com on määritetty . Tämä asetus tarkoittaa, että sovellusta voidaan isännöidä samalla alkuperällä, https://*.powerapps.com, https://www.foo.comja https://www.bar.com, mutta ei muilla alkuperällä. Käytä Lisää-painiketta lisätäksesi luetteloon merkintöjä ja Poista-kuvaketta poistaaksesi niitä.
Yleiset määritykset
Lisää Dynamics 365 -sovellusta käyttävään Microsoft Teams -integrointiin seuraava kohteeseen frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Lisää Dynamics 365 App for Outlookille seuraava kohteeseen frame-ancestors:
- Outlook Web App -aloitussivun alkuperä
https://outlook.office.comhttps://outlook.office365.com
Lisää Power BI -raporttien Power Appsin upottamiseen seuraava kohteeseen frame-ancestors:
https://app.powerbi.comhttps://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 sisällön suojauskäytännön vastauksen otsikkoa.
Sisällön suojauskäytännön määrityksen esimerkit
Seuraavassa on muutama esimerkki CSP-määrityksistä.
Esimerkki 1 – raportointi pois päältä
Esimerkki:
- Raportointi on poistettu käytöstä.
- Käytäntö on käytössä mallipohjaisille sovelluksille.
-
frame-ancestorson mukautettu illehttps://www.contoso.comjahttps://www.fabrikam.com.
-
- Käytäntö on käytössä pohjaan perustuvissa sovelluksissa.
Käytössä olevat otsikot ovat:
- Mallipohjaiset sovellukset:
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; - Canvas-sovellukset: CSP-otsikkoa ei lähetetä.
Esimerkki 2 – raportointi päällä
Esimerkki:
- Raportointi on käytössä.
- Raportoinnin päätepisteeksi on määritetty
https://contoso.com/reporting-endpoint
- Raportoinnin päätepisteeksi on määritetty
- Käytäntö on käytössä mallipohjaisille sovelluksille.
-
frame-ancestorspidetään oletusarvona
-
- Käytäntö on käytössä pohjaan perustuvissa sovelluksissa.
-
frame-ancestorson mukautettu muotoonhttps://www.contoso.com
-
Tehokkaat CSP-arvot ovat seuraavat:
- Mallipohjaiset sovellukset:
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; - 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.contoso.com; report-uri https://contoso.com/reporting-endpoint;
Organisaation asetuksien muokkaaminen suoraan
Voit määrittää sisällön suojauskäytännön ilman käyttöliittymää muokkaamalla seuraavia organisaatioasetuksia suoraan:
IsContentSecurityPolicyEnabled määrittää, lähetetäänkö Content-Security-Policy-otsikko mallipohjaisissa sovelluksissa.
ContentSecurityPolicyConfiguration määrittää frame-ancestors-osan arvon (kuten aiemmin on nähty, sen asetuksena
'self'on, josContentSecurityPolicyConfigurationei ole määritetty). Määritä tämä asetus käyttämällä JSON-objektia, jolla on seuraava rakenne –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Tämä määritys tarkoittaa seuraavaa:script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; 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öä käyttämällä prosessia, joka on kuvattu kohdassa
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri määrittää, tulisiko raportointia käyttää. 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/IsContentSecurityPolicyEnabledForCanvasei ole käytössä. Tyhjä merkkijono poistaa raportoinnin käytöstä. Lisätietoja on raportointia koskevassa dokumentaatiossa.
Sisällön suojauskäytännön määrittäminen ilman käyttöliittymää
Järjestelmänvalvojat saattavat haluta määrittää sisällön suojauskäytännön muokkaamalla asetuksia suoraan komentosarjoilla erityisesti Power Platform -hallintakeskuksen ulkopuolisissa ympäristöissä, kuten paikallisissa määrityksissä.
Sisällön suojauskäytännön ottaminen käyttöön ilman käyttöliittymää
Ota sisällön suojauskäytäntö käyttöön ilman käyttöliittymää seuraavasti:
- 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.
- Jos haluat ottaa sisällön suojauskäytännön käyttöön, välitä oletusmääritys –
enableFrameAncestors(["'self'"]) - Esimerkki siitä, miten sovelluksen upotetaan muita lähteitä –
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!')
}
Sisällön suojauskäytännön poistaminen käytöstä ilman käyttöliittymää
Poista sisällön suojauskäytäntö käytöstä ilman käyttöliittymää seuraavasti:
- 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.
- Voit poistaa sisällön suojauskäytännö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!')
}