Napomena
Za pristup ovoj stranici potrebna je autorizacija. Možete se pokušati prijaviti ili promijeniti direktorije.
Za pristup ovoj stranici potrebna je autorizacija. Možete pokušati promijeniti direktorije.
Politika sigurnosti sadržaja (CSP) trenutno je podržana u aplikacijama vođenim modelima, canvasu i kodiranju. Ovaj članak objašnjava kako konfigurirati CSP za aplikacije vođene modelima i canvas aplikacije. Za code apps CSP, pogledajte dokumentaciju code apps. Administratori mogu kontrolirati hoće li se CSP zaglavlje poslati i, u određenoj mjeri, što sadrži. Postavke su na razini okruženja, što znači da se primjenjuju na sve aplikacije u okruženju kad se jednom uključe.
Napomena
Pravila o sigurnosti sadržaja primjenjuju se samo na okruženja koja koriste Dataverse.
Svaka komponenta vrijednosti CSP zaglavlja kontrolira imovinu koja se može preuzeti. Mozilla Developer Network (MDN) pruža detaljnije opise. Zadane vrijednosti su:
| Direktiva | Zadana vrijednost | Prilagodljivo |
|---|---|---|
| skripta-src | * 'unsafe-inline' 'unsafe-eval' blob: |
Ne |
| radnik-SRC | 'self' blob: |
Ne |
| stil-src | * 'unsafe-inline' blob: |
Ne |
| font-src | * data: |
Ne |
| okvir-preci | 'self' https://*.powerapps.com |
Da |
Ova konfiguracija rezultira zadanim CSP-om od. 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;
Strogi način rada
Strogi CSP prekidač stvara CSP koji uglavnom ne uključuje wildcardove ili nesigurne direktive, poput .unsafe-inline Kada uključite Strogi CSP, prethodne direktive postaju sljedeće direktive detaljno opisane u ovom odjeljku. Oznaka <platform> znači da su domene platforme dostupne prema zahtjevima proizvoda. Domene u ovom odjeljku mogu se mijenjati tijekom vremena kako proizvod raste.
| Direktiva | Zadana vrijednost (utemeljena na modelu) | Zadana vrijednost (platno) | Prilagodljivo |
|---|---|---|---|
| skripta-src | 'self' blob: <platform>' |
'self' <platform>' |
Da |
| radnik-SRC | 'self' blob: |
'self' blob: |
Ne |
| stil-src | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Da |
| font-src | 'self' data: <platform> |
'self' data: <platform> |
Da |
| okvir-preci | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Da |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Da |
| Povezivanje-SRC | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Da |
| Okvir-SRC | 'self' blob: <platform> |
'self' <platform> |
Da |
| Baza-URI | 'none' |
Nije primjenjivo | Ne |
| Oblik-akcija | <platform> |
Nije primjenjivo | Da |
| Zadano-src | 'self' |
'self' |
Ne |
Preduvjeti
Za aplikacije za angažman korisnika Dynamics 365 i druge aplikacije vođene modelima, CSP je dostupan samo u online okruženjima i u organizacijama s Dynamics 365 angažmanom korisnika (on-premises), verzija 9.1 ili novija verzija.
Konfiguracija CSP
CSP možete prebacivati i konfigurirati putem centra za Power Platform administratore. Važno je prvo omogućiti razvojno/testno okruženje jer bi omogućavanje CSP-a moglo početi blokirati scenarije ako se prekrši pravilo. Administrativni centar također podržava način rada samo na izvještavanju radi lakšeg povećanja produkcije.
Poduzmite ove korake za konfiguraciju CSP-a:
- Prijavite se u centar za administratore platforme Power Platform.
- U navigacijskom oknu odaberite Upravljanje. U oknu Upravljanje odaberite Okruženja.
- Na stranici Okruženja odaberite okruženje.
- Na naredbenoj traci odaberite Postavke.
- Proširite Proizvod, a zatim odaberite Privatnost + sigurnost.
Na sljedećoj slici prikazano je zadano stanje postavki:
izvještavanje.
Prekidač Omogući izvješćivanje kontrolira šalju li aplikacije stvorene prema modelu i aplikacije radnog područja izvješća o kršenju. Za omogućavanje, specificirajte krajnju točku. Aplikacija šalje izvještaje o kršenju na ovu krajnju točku bez obzira provodi li se CSP ili ne. Ako CSP nije provođen, aplikacija koristi način rada samo za izvještavanje. Dodatne informacije potražite u dokumentaciji o izvješćivanju.
Provedba
Nametanje CSP-a kontrolira se neovisno za aplikacije stvorene prema modelu i aplikacije od gotovih gradivnih elemenata kako bi se osigurala detaljna kontrola nad pravilima. Upotrijebite pivot prema modelu / gotovim gradivnim elementima za izmjenu željene vrste aplikacije.
Prekidač Nametni pravila sigurnosti sadržaja uključuje zadano pravilo za provedbu za određenu vrstu aplikacije. Uključivanje ovog prekidača mijenja ponašanje aplikacija u ovom okruženju kako bi se pridržavale pravila. Stoga slijedite ovaj predloženi tijek osnaživanja:
- Provodite pravila u razvojnom ili testnom okruženju.
- Omogući način rada samo za izvješća u proizvodnji.
- Provodite pravilo u produkciji kada se ne prijave prekršaji.
Konfiguriranje direktiva
Odjeljak Konfiguriranje direktiva omogućuje vam kontrolu pojedinačnih direktiva unutar pravila. Trenutno možete prilagoditi samo direktivu frame-ancestors .
Ako ostavite zadanu direktivu uključenu, koristite zadanu vrijednost navedenu u tablici. Ako isključite prekidač, možete odrediti prilagođene vrijednosti za direktivu i dodati ih na zadanu vrijednost. Sljedeći primjer postavlja prilagođene vrijednosti za frame-ancestors. Direktiva je postavljena na ovaj frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com primjer. Ova postavka znači da aplikacija može biti hostana u istom izvorištu, https://*.powerapps.com, https://www.foo.com, i , ali https://www.bar.comne i u drugim izvorima. Upotrijebite gumb Dodaj da biste dodali unose na popis, a ikonu Izbriši da biste ih uklonili.
Uobičajene konfiguracije
Za Microsoft Teams integraciju koristeći Dynamics 365 app, dodajte sljedeće u frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Za Dynamics 365 aplikaciju za Outlook, dodajte sljedeće u frame-ancestors:
- Početna stranica vaše Outlook web aplikacije
https://outlook.office.comhttps://outlook.office365.com
Za ugrađivanje Power Apps u Power BI izvještaje, dodajte sljedeće u frame-ancestors:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Važne stavke
Isključivanje zadane direktive i spremanje s praznim popisom potpuno isključuje direktivu i ne šalje je kao dio zaglavlja CSP odgovora.
Primjeri konfiguracije CSP-a
Evo nekoliko primjera CSP konfiguracija.
Primjer 1 – izvješćivanje isključeno
U primjeru:
- Izvješćivanje je isključeno.
- Provedba prema modelu je omogućena.
-
frame-ancestorsje prilagođen nahttps://www.contoso.comihttps://www.fabrikam.com.
-
- Provedba radnog područja je onemogućena.
Efektivni naslovi su:
- Aplikacije stvorene prema modelu:
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 aplikacije: CSP zaglavlje nije poslano.
Primjer 2 – uključeno izvješćivanje
U primjeru:
- Izvješćivanje je uključeno.
- Krajnja točka izvješćivanja postavljena je na
https://contoso.com/reporting-endpoint
- Krajnja točka izvješćivanja postavljena je na
- Provedba prema modelu je omogućena.
-
frame-ancestorszadržava se kao zadana
-
- Provedba radnog područja je onemogućena.
-
frame-ancestorsprilagođen jehttps://www.contoso.com
-
Efektivne vrijednosti CSP-a su:
- Aplikacije stvorene prema modelu:
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; - Aplikacije od gotovih gradivih elemenata:
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;
Izravna izmjena postavki tvrtke ili ustanove
CSP možete konfigurirati bez korištenja korisničkog sučelja izravnom izmjenom ovih postavki tvrtke ili ustanove:
IsContentSecurityPolicyEnabled kontrolira šalje li se zaglavlje Content-Security-Policy u aplikacijama stvorenim prema modelu.
ContentSecurityPolicyConfiguration kontrolira vrijednost dijela predaka okvira (kao što je ranije viđeno, postavlja se na
'self'akoContentSecurityPolicyConfigurationnije postavljen). Definirajte ovu postavku korištenjem JSON objekta sa sljedećom strukturom –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Ova konfiguracija se prevodi uscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';- (Iz MDN-a) Direktiva HTTP Content-Security-Policy (CSP) frame-ancestors navodi važeće nadređene elemente koji mogu ugraditi stranicu koristeći
<frame>,<iframe>,<object>,<embed>ili<applet>.
- (Iz MDN-a) Direktiva HTTP Content-Security-Policy (CSP) frame-ancestors navodi važeće nadređene elemente koji mogu ugraditi stranicu koristeći
IsContentSecurityPolicyEnabledForCanvas kontrolira šalje li se zaglavlje Content-Security-Policy u aplikacijama radnog područja.
ContentSecurityPolicyConfigurationForCanvas kontrolira pravila za platno koristeći isti postupak opisan u odjeljku
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri kontrolira treba li se koristiti izvješćivanje. Ovu postavku koriste aplikacije stvorene prema modelu i aplikacije od gotovih gradivnih elemenata. Valjani niz šalje izvješća o kršenju navedenoj krajnjoj točki, koristeći način rada samo za izvješćivanje ako
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasje isključen. Prazan niz onemogućuje izvješćivanje. Dodatne informacije potražite u dokumentaciji o izvješćivanju.
Konfiguriranje CSP-a bez korisničkog sučelja
Posebno za okruženja koja nisu u Power Platform admin centru, kao što su lokalne konfiguracije, administratori će možda htjeti konfigurirati CSP s pomoću skripti za izravnu izmjenu postavki.
Omogućivanje CSP-a bez korisničkog sučelja
Poduzmite ove korake da biste omogućili CSP bez korisničkog sučelja:
- Otvorite razvojne alate preglednika dok koristite aplikaciju stvorenu prema modelu kao korisnik s povlasticama ažuriranja entiteta organizacije (Administrator sustava je dobra opcija).
- Zalijepite i izvršite sljedeću skriptu u konzolu.
- Da biste omogućili CSP, proslijedite zadanu konfiguraciju -
enableFrameAncestors(["'self'"]) - Kao primjer omogućavanja drugim izvorima da ugrade aplikaciju -
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!')
}
Onemogućite CSP bez korisničkog sučelja
Poduzmite ove korake da biste onemogućili CSP bez korisničkog sučelja:
- Otvorite razvojne alate preglednika dok koristite aplikaciju stvorenu prema modelu kao korisnik s povlasticama ažuriranja entiteta organizacije (Administrator sustava je dobra opcija).
- Zalijepite i izvršite sljedeću skriptu u konzolu.
- Da biste onemogućili CSP, zalijepite u konzolu:
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!')
}