Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Politika bezpečnosti obsahu (CSP) je momentálne podporovaná v modelovo riadených, canvas a kódových aplikáciách. Tento článok vysvetľuje, ako konfigurovať CSP pre modelovo riadené a canvas aplikácie. Pre code apps CSP pozri dokumentáciu k code apps. Správcovia môžu kontrolovať, či sa hlavička CSP odosiela a do určitej miery aj to, čo obsahuje. Nastavenia sú na úrovni prostredia, čo znamená, že sa aplikujú na všetky aplikácie v prostredí po zapnutí.
Poznámka
Zásady zabezpečenia obsahu sa vzťahujú iba na prostredia používajúce Dataverse.
Každá zložka hodnoty hlavičky CSP riadi aktíva, ktoré je možné stiahnuť. Mozilla Developer Network (MDN) poskytuje podrobnejšie popisy. Predvolené hodnoty sú uvedené nižšie:
| Direktíva | Predvolená hodnota | Prispôsobiteľný |
|---|---|---|
| zdroj skriptu | * 'unsafe-inline' 'unsafe-eval' blob: |
No |
| zdroj pracovníka | 'self' blob: |
No |
| zdroj štýlu | * 'unsafe-inline' |
No |
| zdroj písma | * data: |
No |
| predkov rámcov | 'self' https://*.powerapps.com |
Áno |
Táto konfigurácia má za následok predvolený CSP s hodnotou script-src * 'unsafe-inline' 'unsafe-eval' blob: ; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;.
Prísny režim
Prepínač Strict CSP vytvára CSP, ktorý väčšinou neobsahuje divoké karty ani nebezpečné direktívy, ako napríklad unsafe-inline. Keď zapnete Prísne CSP, predchádzajúce smernice sa stanú nasledujúcimi smernicami podrobne popísanými v tejto sekcii. Zápis <platform> znamená, že domény platformy sú poskytované podľa požiadaviek produktu. Domény v tejto sekcii sa môžu časom meniť, ako produkt rastie.
| Direktíva | Predvolená hodnota (riadená modelom) | Predvolená hodnota (plátno) | Prispôsobiteľný |
|---|---|---|---|
| zdroj skriptu | 'self' blob: <platform>' |
'self' <platform>' |
Áno |
| zdroj pracovníka | 'self' blob: |
'self' blob: |
No |
| zdroj štýlu | 'self' 'unsafe-inline' <platform> |
'self' 'unsafe-inline' <platform> |
Áno |
| zdroj písma | 'self' data: <platform> |
'self' data: <platform> |
Áno |
| predkov rámcov | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Áno |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Áno |
| Pripojiť-SRC | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Áno |
| Rám-SRC | 'self' blob: <platform> |
'self' <platform> |
Áno |
| základný identifikátor URI | 'none' |
Nie je k dispozícii | No |
| forma akcie | <platform> |
Nie je k dispozícii | Áno |
| predvolené-src | 'self' |
'self' |
No |
Požiadavky
Pre aplikácie Dynamics 365 Customer Engagement a ďalšie aplikácie riadené modelom je CSP k dispozícii iba v online prostrediach a v organizáciách s aplikáciou Dynamics 365 Customer Engagement (on-premises) verzie 9.1 alebo novšej.
Konfigurovať CSP
CSP môžete prepínať a konfigurovať prostredníctvom centra spravovania. Power Platform Je dôležité najprv povoliť vývojové/testovacie prostredie, pretože povolenie CSP by mohlo v prípade porušenia pravidiel začať blokovať scenáre. Administratívne centrum tiež podporuje režim iba reportovania , čo umožňuje jednoduchšie rozbehnutie produkcie.
Postupujte podľa týchto krokov na konfiguráciu CSP:
- Prihláste sa do centra spravovania Power Platform.
- V navigačnej table vyberte položku Spravovať. V table Spravovať vyberte možnosť Prostredia.
- Na stránke Prostredia vyberte prostredie.
- Na paneli príkazov vyberte položku Nastavenia.
- Rozbaľte položku Produkt a potom vyberte položku Súkromie a zabezpečenie.
Nasledujúci obrázok zobrazuje predvolený stav nastavení:
Nahlasuje sa
Prepínač Povoliť hlásenie ovláda, či aplikácie riadené modelom a aplikácie plátna odosielajú hlásenia o porušeniach. Na jeho povolenie zadajte koncový bod. Aplikácia posiela na tento koncový bod hlásenia o porušení bez ohľadu na to, či je CSP vynucované alebo nie. Ak CSP nie je vynucované, aplikácia používa režim iba hlásenia. Ďalšie informácie nájdete v dokumentácii k vykazovaniu.
Presadzovanie
Presadzovanie CSP je riadené nezávisle pre modelom riadené aplikácie a aplikácie plátna, aby sa zabezpečila podrobná kontrola nad politikami. Na úpravu zamýšľaného typu aplikácie použite modelom riadený kontingenčný ovládací prvok/kontingenčný ovládací prvok plátna.
Prepínač Vynútiť politiku zabezpečenia obsahu zapne predvolené pravidlo na presadzovanie pre daný typ aplikácie. Zapnutím tohto prepínača sa správanie aplikácií v tomto prostredí zmení tak, aby boli v súlade s pravidlami. Preto postupujte podľa navrhovaného procesu umožnenia:
- Vynuťte túto politiku v vývojárskom alebo testovacom prostredí.
- V produkčnom prostredí povoliť „režim iba pre zostavy“.
- Dodržiavajte túto politiku v produkcii, keď nebudú nahlásené žiadne porušenia.
Konfigurovať nariadenia
Sekcia Konfigurovať smernice umožňuje ovládať jednotlivé smernice v rámci politiky. Momentálne si môžete prispôsobiť frame-ancestors iba túto direktívu.
Ak necháte predvolenú direktívu zapnutú, použijete predvolenú hodnotu uvedenú v tabuľke. Ak vypnete prepínač, môžete nastaviť vlastné hodnoty pre direktívu a pridať ich k predvolenej hodnote. Nasledujúci príklad nastavuje vlastné hodnoty pre frame-ancestors. Smernica je nastavená v tomto príklade frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com . Toto nastavenie znamená, že aplikácia môže byť hostovaná v tom istom pôvode, https://*.powerapps.com, https://www.foo.coma , https://www.bar.comale nie v iných zdrojoch. Pomocou tlačidla Pridať pridáte položky do zoznamu a pomocou ikony Odstrániť ich odstránite.
Bežné konfigurácie
Pre integráciu pomocou aplikácie Dynamics 365 pridajte do priečinka Microsoft Teams nasledujúci kód: ...frame-ancestors
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Pre Dynamics 365 App for Outlook pridajte k frame-ancestors nasledovné:
- Pôvod domovskej stránky aplikácie Outlook Web App
https://outlook.office.comhttps://outlook.office365.com
Pre vkladanie do správ pridajte do prehľadu Power Apps nasledujúci kód: Power BI frame-ancestors
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Dôležité aspekty
Vypnutím predvolenej direktívy a uložením s prázdnym zoznamom sa direktíva úplne vypne a neodošle sa ako súčasť hlavičky odpovede CSP.
Príklady konfigurácie CSP
Tu je niekoľko príkladov konfigurácií CSP.
Príklad 1 – hlásenie vypnuté
V príklade:
- Vykazovanie je vypnuté.
- Modelom riadené presadzovanie je povolené.
-
frame-ancestorsje prispôsobený nahttps://www.contoso.comahttps://www.fabrikam.com.
-
- Vynucovanie na plátne je zakázané.
Efektívne hlavičky sú:
- Modelom riadené aplikácie:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob: data:; worker-src 'self' blob: data:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors https://www.contoso.com https://www.fabrikam.com; - Canvas aplikácie: CSP hlavička nie je odoslaná.
Príklad 2 – hlásenie zapnuté
V príklade:
- Vykazovanie je zapnuté.
- Koncový bod vykazovania je nastavený na
https://contoso.com/reporting-endpoint
- Koncový bod vykazovania je nastavený na
- Modelom riadené presadzovanie je povolené.
-
frame-ancestorsje ponechané ako predvolené
-
- Vynucovanie na plátne je zakázané.
-
frame-ancestorsje prispôsobenýhttps://www.contoso.com
-
Efektívne hodnoty CSP sú:
- Modelom riadené aplikácie:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob:; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; report-uri https://contoso.com/reporting-endpoint; - Aplikácie plátna:
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;
Priama úprava nastavení organizácie
CSP môžete nakonfigurovať bez použitia používateľského rozhrania priamou úpravou týchto nastavení organizácie:
IsContentSecurityPolicyEnabled ovláda, či sa hlavička Content-Security-Policy odosiela v aplikáciách riadených modelom.
ContentSecurityPolicyConfiguration riadi hodnotu časti predkov rámca (ako už bolo vidieť, nastaví sa na
'self', akContentSecurityPolicyConfigurationnie je nastavená). Definujte toto nastavenie pomocou JSON objektu s nasledujúcou štruktúrou –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Táto konfigurácia sa premieta doscript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';- (Z MDN) Direktíva frame-ancestors HTTP Content-Security-Policy (CSP) špecifikuje platných nadradených prvkov, ktoré môžu vložiť stránku pomocou
<frame>,<iframe>,<object>,<embed>alebo<applet>.
- (Z MDN) Direktíva frame-ancestors HTTP Content-Security-Policy (CSP) špecifikuje platných nadradených prvkov, ktoré môžu vložiť stránku pomocou
IsContentSecurityPolicyEnabledForCanvas ovláda, či sa v aplikáciách plátna odosiela hlavička Content-Security-Policy.
ContentSecurityPolicyConfigurationForCanvas riadi politiku pre plátno pomocou rovnakého postupu, aký je opísaný v
ContentSecurityPolicyConfiguration.Parameter ContentSecurityPolicyReportUri určuje, či sa má použiť generovanie prehľadov. Toto nastavenie používajú modelom riadené aplikácie aj aplikácie plátna. Platný reťazec odosiela hlásenia o porušení do zadaného koncového bodu pomocou režimu iba hlásenia, ak je parameter
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasvypnutý. Prázdny reťazec zakáže vytváranie zostáv. Ďalšie informácie nájdete v dokumentácii k vykazovaniu.
Konfigurácia CSP bez používateľského rozhrania
Najmä v prostrediach, ktoré nie sú v centre spravovania Power Platform, ako sú napríklad lokálne konfigurácie, môžu správcovia chcieť nakonfigurovať CSP pomocou skriptov na priamu úpravu nastavení.
Povoliť CSP bez používateľského rozhrania
Ak chcete povoliť CSP bez používateľského rozhrania, postupujte podľa týchto krokov:
- Otvorte vývojárske nástroje prehliadača pri používaní modelom riadenej aplikácie ako používateľ s oprávneniami na aktualizáciu entity organizácie (dobrou možnosťou je správca systému).
- Vložte a spustite nasledujúci skript do konzoly.
- Ak chcete povoliť CSP, zadajte predvolenú konfiguráciu -
enableFrameAncestors(["'self'"]) - Ako príklad umožnenia vloženia aplikácie do iných zdrojov -
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!')
}
Zakázať CSP bez používateľského rozhrania
Ak chcete deaktivovať CSP bez používateľského rozhrania, postupujte takto:
- Otvorte vývojárske nástroje prehliadača pri používaní modelom riadenej aplikácie ako používateľ s oprávneniami na aktualizáciu entity organizácie (dobrou možnosťou je správca systému).
- Vložte a spustite nasledujúci skript do konzoly.
- Ak chcete zakázať CSP, prilepte do konzoly:
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!')
}