opomba,
Dostop do te strani zahteva pooblastilo. Poskusite se vpisati alispremeniti imenike.
Dostop do te strani zahteva pooblastilo. Poskusite lahko spremeniti imenike.
Politika varnosti vsebine (CSP) je trenutno podprta v modelno vodenih, canvas in programskih aplikacijah. Ta članek pojasnjuje, kako konfigurirati CSP za aplikacije, ki temeljijo na modelih, in canvas aplikacije. Za Code apps CSP si oglejte dokumentacijo Code Apps. Skrbniki lahko nadzorujejo, ali je glava CSP poslana in do neke mere, kaj vsebuje. Nastavitve so na ravni okolja, kar pomeni, da se po vklopu uporabijo za vse aplikacije v okolju.
opomba,
Pravilnik o varnosti vsebine velja samo za okolja, ki uporabljajo Dataverse.
Vsaka komponenta vrednosti glave CSP nadzoruje sredstva, ki jih je mogoče prenesti. Mozilla Developer Network (MDN) ponuja bolj podrobne opise. Privzete vrednosti so naslednje:
| Direktiva | Privzeta vrednost | Prilagajanje je mogoče |
|---|---|---|
| izvor skripta | * 'unsafe-inline' 'unsafe-eval' blob: |
Ne |
| vir delavca | 'self' blob: |
Ne |
| izvor sloga | * 'unsafe-inline' blob: |
Ne |
| vir-pisav | * data: |
Ne |
| predniki okvirjev | 'self' https://*.powerapps.com |
Da |
Ta konfiguracija ima za posledico privzeti CSP 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
Preklopnik Strogo CSP ustvari CSP, ki večinoma ne vključuje wildcardov ali nevarnih direktiv, kot je unsafe-inline. Ko vklopite Strogi CSP, se predhodne direktive spremenijo v naslednje, podrobno opisane v tem razdelku. Zapis <platform> pomeni, da so domene platforme na voljo v skladu z zahtevami izdelka. Domene v tem razdelku se lahko s časom spreminjajo, ko izdelek raste.
| Direktiva | Privzeta vrednost (na podlagi modela) | Privzeta vrednost (platno) | Prilagajanje je mogoče |
|---|---|---|---|
| izvor skripta | 'self' blob: <platform>' |
'self' <platform>' |
Da |
| vir delavca | 'self' blob: |
'self' blob: |
Ne |
| izvor sloga | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Da |
| vir-pisav | 'self' data: <platform> |
'self' data: <platform> |
Da |
| predniki okvirjev | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Da |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Da |
| Poveži-SRC | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Da |
| Okvir-SRC | 'self' blob: <platform> |
'self' <platform> |
Da |
| bazni uri | 'none' |
N/V | Ne |
| Oblika-akcija | <platform> |
N/V | Da |
| privzeto-src | 'self' |
'self' |
Ne |
Zahteve
Za aplikacije za angažiranost strank Dynamics 365 in druge aplikacije, ki temeljijo na modelih, je CSP na voljo le v spletnih okoljih in v organizacijah z Dynamics 365 za vključevanje strank (lokalno), različica 9.1 ali novejša.
Konfiguriranje protokola CSP
CSP lahko preklapljate in konfigurirate v skrbniškem središču. Power Platform Pomembno je, da najprej omogočite razvojno/testno okolje, saj lahko omogočanje CSP-ja začne blokirati scenarije, če je pravilnik kršen. Administrativni center podpira tudi način samo poročanja , kar omogoča lažje povečanje produkcije.
Naredite naslednje korake za konfiguracijo CSP:
- Vpišite se v skrbniško središče za Power Platform.
- V navigacijski plošči izberite Upravljanje. V podoknu Upravljanje izberite Okolja.
- Na strani Okolja izberite okolje.
- V ukazni vrstici izberite Nastavitve.
- Razširite Izdelek in nato izberite Zasebnost + varnost.
Naslednja slika prikazuje privzeto stanje nastavitev:
Poročanje
Stikalo Omogoči poročanje nadzoruje, ali aplikacije, ki jih poganja model, in aplikacije s platnom pošiljajo poročila o kršitvah. Za omogočanje določite končno točko. Aplikacija pošilja poročila o kršitvah na to končno točko ne glede na to, ali je CSP izvršen ali ne. Če CSP ni uveljavljen, aplikacija uporablja način samo poročanja. Več informacij najdete v dokumentaciji za poročanje.
Izvajanje
Uveljavljanje CSP je nadzorovano neodvisno za aplikacije, ki temeljijo na modelu, in aplikacije s platnom, da se zagotovi natančnejši nadzor nad pravilniki. Uporabite pivot na podlagi modela/platna, da spremenite predvideno vrsto aplikacije.
Preklop Uveljavi pravilnik o varnosti vsebine vklopi privzeti pravilnik za uveljavljanje za dano vrsto aplikacije. Če vklopite to stikalo, se vedenje aplikacij v tem okolju spremeni tako, da so v skladu s pravilnikom. Zato sledite temu predlaganemu postopku omogočanja:
- Uveljavite politiko v razvojnem ali testnem okolju.
- Omogoči način samo za poročilo v produkciji.
- Politiko uveljavite v produkciji, ko ni prijavljenih nobenih kršitev.
Konfiguriranje direktiv
V razdelku Konfiguracija direktiv lahko nadzirate posamezne direktive v pravilniku. Trenutno lahko prilagodite le direktivo frame-ancestors .
Če pustite privzeto direktivo vklopljeno, uporabite privzeto vrednost, določeno v tabeli. Če izklopite preklopnik, lahko določite prilagojene vrednosti za direktivo in jih dodate privzeti vrednosti. Naslednji primer določa prilagojene vrednosti za frame-ancestors. Direktiva je nastavljena na tem primeru frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com . Ta nastavitev pomeni, da je aplikacija lahko gostovana v istem izvoru, https://*.powerapps.com, https://www.foo.com, in https://www.bar.com, vendar ne v drugih izvorih. Za dodajanje vnosov na seznam uporabite gumb Dodaj , za odstranitev pa ikono Izbriši .
Splošne konfiguracije
Za Microsoft Teams integracijo z uporabo aplikacije Dynamics 365 app dodajte naslednje v frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Za Dynamics 365 App for Outlook dodajte naslednje na frame-ancestors:
- Izvor domače strani vaše Outlook spletne aplikacije
https://outlook.office.comhttps://outlook.office365.com
Za vgradnjo Power Apps v Power BI poročila dodajte naslednje v frame-ancestors:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Pomembni premisleki
Izklop privzete direktive in shranjevanje s praznim seznamom popolnoma izklopi direktivo in je ne pošlje kot del glave odgovora CSP.
Primeri konfiguracije CSP-ja
Tukaj je nekaj primerov konfiguracij CSP.
Primer 1 – poročanje izklopljeno
V primeru:
- Poročanje je izklopljeno.
- Uveljavljanje na podlagi modela je omogočeno.
-
frame-ancestorsje prilagojen nahttps://www.contoso.cominhttps://www.fabrikam.com.
-
- Uveljavljanje platna je onemogočeno.
Učinkovite glave so:
- Aplikacije, ki temeljijo na 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 glava ni poslana.
Primer 2 – poročanje vklopljeno
V primeru:
- Poročanje je vklopljeno.
- Končna točka za poročila je nastavljena na
https://contoso.com/reporting-endpoint
- Končna točka za poročila je nastavljena na
- Uveljavljanje na podlagi modela je omogočeno.
-
frame-ancestorsje ohranjeno kot privzeto
-
- Uveljavljanje platna je onemogočeno.
-
frame-ancestorsje prilagojenohttps://www.contoso.com
-
Efektivne vrednosti CSP so:
- Aplikacije, ki temeljijo na 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 s platnom:
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;
Neposredno spreminjanje nastavitev organizacije
CSP lahko konfigurirate brez uporabe uporabniškega vmesnika tako, da neposredno spremenite te nastavitve organizacije:
IsContentSecurityPolicyEnabled nadzoruje, ali se glava Content-Security-Policy pošlje v aplikacijah, ki jih poganja model.
ContentSecurityPolicyConfiguration nadzoruje vrednost dela prednikov okvirjev (kot je bilo že vidno, nastavi na ,
'self'čeContentSecurityPolicyConfigurationni nastavljen). To nastavitev definirajte z uporabo JSON objekta z naslednjo strukturo –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Ta konfiguracija se prevede vscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';- (iz MDN) Direktiva HTTP Content-Security-Policy (CSP) frame-ancestors določa veljavne nadrejene elemente, ki lahko vdelajo stran z
<frame>,<iframe>,<object>,<embed>ali<applet>.
- (iz MDN) Direktiva HTTP Content-Security-Policy (CSP) frame-ancestors določa veljavne nadrejene elemente, ki lahko vdelajo stran z
IsContentSecurityPolicyEnabledForCanvas nadzoruje, ali se glava Content-Security-Policy pošlje v aplikacijah platna.
ContentSecurityPolicyConfigurationForCanvas nadzoruje pravilnik za platno z uporabo istega postopka, kot je opisan v
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri nadzoruje, ali naj se uporablja poročanje. To nastavitev uporabljajo aplikacije, ki temeljijo na modelu, in aplikacije s platnom. Veljaven niz pošlje poročila o kršitvah navedeni končni točki z uporabo načina samo za poročanje, če je možnost
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasizklopljena. Prazen niz onemogoči poročanje. Več informacij najdete v dokumentaciji za poročanje.
Konfiguriranje CCSP brez UI-ja
Zlasti za okolja, ki niso v skrbniškem središču za Power Platform, kot so konfiguracije na mestu uporabe, lahko skrbniki konfigurirajo CSP s skripti za neposredno spremenitev nastavitev.
Omogoči CSP brez uporabniškega vmesnika
Če želite omogočiti CSP brez uporabniškega vmesnika, sledite tem korakom:
- Odprite orodja za razvijalce brskalnika, medtem ko uporabljate aplikacijo, ki temelji na modelu, kot uporabnik s privilegiji za posodabljanje entitet organizacije (sistemski skrbnik je dobra možnost).
- V konzolo prilepite in zaženite naslednji skript.
- Če želite omogočiti CSP, podajte privzeto konfiguracijo -
enableFrameAncestors(["'self'"]) - Kot primer omogočanja vdelave aplikacije v druge izvore -
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!')
}
Onemogoči CSP brez uporabniškega vmesnika
Če želite onemogočiti CSP brez uporabniškega vmesnika, sledite tem korakom:
- Odprite orodja za razvijalce brskalnika, medtem ko uporabljate aplikacijo, ki temelji na modelu, kot uporabnik s privilegiji za posodabljanje entitet organizacije (sistemski skrbnik je dobra možnost).
- V konzolo prilepite in zaženite naslednji skript.
- Če želite onemogočiti CSP, prilepite v konzolo:
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!')
}