Satura drošības politika
satura drošības politika (CSP) pašlaik tiek atbalstīts modeļu vadītā un audeklā Power Apps. Administratori var kontrolēt, vai CSP galvene tiek nosūtīta un, zināmā mērā, ko tā satur. Iestatījumi ir vides līmenī, kas nozīmē, ka pēc ieslēgšanas tas tiks piemērots visām lietotnēm vidē.
Katrs CSP galvenes vērtības komponents kontrolē lejupielādējamos līdzekļus, un tas ir sīkāk aprakstīts Mozilla Developer Network (MDN). Noklusējuma vērtības ir šādas:
Direktīva | Noklusējuma vērtība | Pielāgojami |
---|---|---|
skripts-src | * 'unsafe-inline' 'unsafe-eval' |
Nē. |
Darbinieks-SRC | 'self' blob: |
Nē. |
stils-src | * 'unsafe-inline' |
Nē. |
fonts-src | * data: |
Nē. |
rāmja senči | 'self' https://*.powerapps.com |
Jā |
Tā rezultātā tiek izveidots noklusējuma CSP no script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;
. Mūsu ceļvedī mums ir iespēja modificēt pašlaik nepielāgojamas galvenes.
Priekšnoteikumi
- Dynamics 365 klientu iesaistes programmām un citām modeļa vadītām programmām CSP ir pieejama tikai tiešsaistes vidē un organizācijās ar Dynamics 365 Customer Engagement (lokāls), versiju 9.1 vai jaunāku versiju.
CSP konfigurēšana
CSP var pārslēgt un konfigurēt, izmantojot Power Platform administrēšanas centru. Ir svarīgi vispirms iespējot izstrādātāja/testa vidē, jo CSP iespējošana var sākt bloķēt scenārijus, ja politika tiek pārkāpta. Mēs atbalstām arī "tikai pārskatu režīmu", lai atvieglotu ražošanas uzsākšanu.
Lai konfigurētu CSP, dodieties uz Power Platform administrēšanas centru ->Vides ->Iestatījumi ->Privātums + drošība. Šajā attēlā redzams iestatījumu noklusējuma stāvoklis:
Notiek ziņošana
Pārslēgs "Iespējot ziņošanu" nosaka, vai modeļa un kanvas lietotnes sūta pārkāpumu ziņojumus. Lai to iespējotu, ir jānorāda galapunkts. Ziņojumi par pārkāpumiem tiek nosūtīti uz šo galapunktu neatkarīgi no tā, vai CSP tiek īstenota vai nē (izmantojot tikai ziņošanas režīmu, ja CSP netiek īstenota). Lai iegūtu vairāk informācijas, skatiet ziņošanas dokumentāciju.
Izpilde
CSP izpilde tiek kontrolēta neatkarīgi no modeļa un kanvas lietotnēm, lai nodrošinātu detalizētu politiku kontroli. Izmantojiet uz modeli balstītu/kanvas rakursu, lai mainītu paredzēto lietotnes veidu.
Slēdzis "Ieviest satura drošības politika" ieslēdz attiecīgā lietotnes veida noklusējuma piemērošanas politiku. Ieslēdzot šo slēdzi, tiek mainīta lietojumprogrammu darbība šajā vidē, lai ievērotu politiku. Tāpēc ierosinātais darbības nodrošināšanas process būtu šāds:
- Īstenošana izstrādes/testa vidē.
- Ražošanas režīmā iespējojiet tikai atskaites režīmu.
- Ieviest ražošanā, tiklīdz nav ziņots par pārkāpumiem.
Norādījumu konfigurēšana
Šī sadaļa ļauj kontrolēt atsevišķas politikas direktīvas. Pašlaik var pielāgot tikai frame-ancestors
.
Atstājot ieslēgtu noklusējuma direktīvu, tiek izmantota noklusējuma vērtība, kas norādīta iepriekš šajā rakstā parādītajā tabulā. Slēdža izslēgšana ļauj administratoriem norādīt pielāgotas direktīvas vērtības un pievienot tās noklusējuma vērtībai. Tālāk dotajā piemērā ir iestatītas pielāgotas vērtības frame-ancestors
. Šajā piemērā direktīva būtu iestatīta, kas frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com
nozīmē, ka lietotni var mitināt tajā pašā izcelsmē, https://*.powerapps.com
https://www.foo.com
bet https://www.bar.com
ne citā izcelsmē. Izmantojiet pogu Pievienot, lai pievienotu ierakstus sarakstam, un dzēšanas ikonu, lai tos dzēstu.
Izplatītas konfig.
Lai Microsoft Teams veiktu integrāciju, izmantojot Dynamics 365 programmu, pievienojiet frame-ancestors
:
https://teams.microsoft.com/
https://teams.cloud.microsoft/
https://msteamstabintegration.dynamics.com/
Attiecībā uz šādiem Dynamics 365 App for Outlook elementiem frame-ancestors
pievieno:
- Jūsu Outlook Web App sākumlapas izcelsme
https://outlook.office.com
https://outlook.office365.com
Lai iegultu Power Apps atskaitēs Power BI , pievienojiet šādu informāciju frame-ancestors
:
https://app.powerbi.com
https://ms-pbi.pbi.microsoft.com
Svarīgi ieteikumi
Noklusējuma direktīvas izslēgšana un saglabāšana ar tukšu sarakstu izslēdz direktīvu pilnībā un nenosūta to kā daļu no CSP atbildes galvenes.
Piemēri
Apskatīsim dažus CSP konfigurācijas piemērus:
1. piemērs
Piemērā:
- Ziņošana ir izslēgta.
- Ir iespējota uz modeli balstīta izpilde.
frame-ancestors
ir pielāgotshttps://www.foo.com
unhttps://www.bar.com
- Kanvas izpilde ir atspējota.
Efektīvie virsraksti būtu šādi:
- Uz modeļiem balstītas lietotnes:
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;
- Kanvas lietotnes: CSP galvene netiktu nosūtīta.
2. piemērs
Piemērā:
- Ziņošana ir ieslēgta.
- Ziņošanas galapunkts ir iestatīts uz
https://www.mysite.com/myreportingendpoint
- Ziņošanas galapunkts ir iestatīts uz
- Ir iespējota uz modeli balstīta izpilde.
frame-ancestors
tiek saglabāts kā noklusējums
- Kanvas izpilde ir atspējota.
frame-ancestors
ir pielāgotshttps://www.baz.com
Efektīvas CSP vērtības būtu:
- Modeļa vadītas programmas:
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;
- Kanvas lietotnes:
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;
Organizācijas iestatījumi
CSP var konfigurēt, neizmantojot lietotāja saskarni, tieši mainot šādus organizācijas iestatījumus:
IsContentSecurityPolicyEnabled kontrolē, vai satura drošības politikas galvene tiek sūtīta modeļa vadītās programmās.
ContentSecurityPolicyConfiguration kontrolē kadru priekšteču daļas vērtību (kā redzams iepriekš, tā ir iestatīta uz
'self'
ifContentSecurityPolicyConfiguration
nav iestatīta). Šo iestatījumu attēlo JSON objekts ar šādu struktūru –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }
. Tas izpaustos kāscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';
- (No MDN) HTTP Content-Security-Policy (CSP) frame-ancestors direktīvā ir norādīti derīgie vecinātāji, kas var ievietot lapu, izmantojot
<frame>
,<iframe>
,<object>
,<embed>
vai<applet>
.
- (No MDN) HTTP Content-Security-Policy (CSP) frame-ancestors direktīvā ir norādīti derīgie vecinātāji, kas var ievietot lapu, izmantojot
IsContentSecurityPolicyEnabledForCanvas kontrolē, vai satura drošības-politikas galvene tiek nosūtīta audekla programmās.
ContentSecurityPolicyConfigurationForCanvas kontrolē kanvas politiku, izmantojot to pašu procesu, kas
ContentSecurityPolicyConfiguration
aprakstīts iepriekš.ContentSecurityPolicyReportUri kontrolē, vai ir jāizmanto ziņošana. Šo iestatījumu izmanto gan modeļa, gan kanvas lietotnēs. Derīga virkne sūta pārkāpumu ziņojumus uz norādīto galapunktu, izmantojot tikai atskaites režīmu, ja
IsContentSecurityPolicyEnabled
/IsContentSecurityPolicyEnabledForCanvas
tas ir izslēgts. Tukša virkne atspējo ziņošanu. Lai iegūtu vairāk informācijas, skatiet ziņošanas dokumentāciju.
CSP konfigurēšana bez UI
Īpaši vidēs, kas nav Power Platform administrēšanas centrā, piemēram, vietējās konfigurācijās, administratori var vēlēties konfigurēt CSP, izmantojot skriptus, lai tieši mainītu iestatījumus.
CSP iespējošana bez UI
Darbības:
- Atveriet pārlūkprogrammas izstrādes rīkus, vienlaikus izmantojot uz modeli balstītu lietotni kā lietotājs ar organizācijas vienības atjaunināšanas privilēģijām (labs variants ir sistēmas administrators).
- Ielīmējiet un izpildiet zemāk redzamo skriptu konsolē.
- Lai iespējotu CSP, nokārtojiet noklusējuma konfigurāciju -
enableFrameAncestors(["'self'"])
- Kā piemērs, lai ļautu citiem avotiem iegult lietotni -
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 atpējošana bez UI
Darbības:
- Atveriet pārlūkprogrammas izstrādes rīkus, vienlaikus izmantojot uz modeli balstītu lietotni kā lietotājs ar organizācijas vienības atjaunināšanas privilēģijām (labs variants ir sistēmas administrators).
- Ielīmējiet un izpildiet konsolē šādu skriptu.
- Lai atspējotu CSP, ielīmējiet konsolē:
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!')
}