Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A tartalombiztonsági szabályzat (CSP) jelenleg a modellalapú, vászonalapú és kódalapú alkalmazásokban támogatott. Ez a cikk bemutatja, hogyan konfigurálhatja a CSP-t modellalapú és vászonalapú alkalmazásokhoz. A kódalkalmazások CSP-jének megtekintéséhez tekintse meg a kódalkalmazások dokumentációját. A rendszergazdák szabályozhatják, hogy a rendszer elküldje-e a CSP-fejlécet, és bizonyos mértékig azt is, hogy az mit tartalmazzon. A beállítások a környezeti szinten vannak, ami azt jelenti, hogy a rendszer a környezet összes alkalmazására alkalmazza őket, amint be van kapcsolva.
Megjegyzés:
A tartalomra vonatkozó biztonsági házirend csak a Dataverse szolgáltatást használó környezetekre vonatkozik.
A CSP fejlécértékének minden összetevője szabályozza a letölthető objektumokat. A Mozilla Developer Network (MDN) részletesebb leírást nyújt. Az alapértelmezett értékek a következők:
| Irányelv | Alapértelmezett érték | Testre szabható |
|---|---|---|
| script-src | * 'unsafe-inline' 'unsafe-eval' blob: |
No |
| worker-src | 'self' blob: |
No |
| style-src | * 'unsafe-inline' blob: |
No |
| font-src | * data: |
No |
| frame-ancestors | 'self' https://*.powerapps.com |
Igen |
Ez a konfiguráció a következő alapértelmezett CSP-t eredményezi: 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;.
Szigorú mód
A Szigorú CSP kapcsoló olyan CSP-t hoz létre, amely többnyire nem tartalmaz helyettesítő karaktereket vagy nem biztonságos irányelveket, például unsafe-inline. A szigorú CSP bekapcsolásakor az előző irányelvek az ebben a szakaszban részletezett alábbi irányelvekké válnak. A <platform> jelölés azt jelenti, hogy a termék által megkövetelt platformtartományokat kell megadni. A jelen szakaszban szereplő tartományok idővel változhatnak a termék növekedésével.
| Irányelv | Alapértelmezett érték (modellalapú) | Alapértelmezett érték (vászon) | Testre szabható |
|---|---|---|---|
| script-src | 'self' blob: <platform>' |
'self' <platform>' |
Igen |
| worker-src | 'self' blob: |
'self' blob: |
No |
| style-src | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Igen |
| font-src | 'self' data: <platform> |
'self' data: <platform> |
Igen |
| frame-ancestors | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Igen |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Igen |
| connect-src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Igen |
| frame-src | 'self' blob: <platform> |
'self' <platform> |
Igen |
| base-uri | 'none' |
N/A | No |
| form-action | <platform> |
N/A | Igen |
| default-src | 'self' |
'self' |
No |
Prerequisites
Az Dynamics 365 ügyfél-előjegyzési alkalmazások és más modellalapú alkalmazások esetében a CSP csak online környezetekben és Dynamics 365 helyszíni ügyfélkapcsolattal rendelkező szervezetekben érhető el, 9.1-es vagy újabb verzióban.
CSP konfigurálása
A CSP-t a Power Platform felügyeleti központjában kapcsolhatja és konfigurálhatja. Fontos, hogy először engedélyezze a fejlesztési/tesztelési környezetet, mivel a CSP engedélyezése megkezdheti a forgatókönyvek blokkolását, ha a szabályzatot megsértik. Emellett a felügyelti központ támogatja a csak jelentés módot is, amely könnyebb felzárkózást tesz lehetővé az éles környezetben.
Végezze el az alábbi lépéseket a CSP konfigurálásához:
- Jelentkezzen be a Power Platform felügyeleti központba.
- Válassza a navigációs ablakban található Kezelés elemet. A Kezelés panelen válassza a Környezetek lehetőséget.
- A Környezetek lapon válasszon ki egy környezetet.
- A parancssávon válassza a Beállítások lehetőséget.
- Bontsa ki a Termék csomópontot, és válassza az Adatvédelem + biztonság lehetőséget.
Az alábbi képen a beállítások alapértelmezett állapota látható:
Jelentéskészítés
A Jelentéskészítés engedélyezése váltógomb szabályozza, hogy a modellvezérelt és vászonalapú alkalmazások küldenek-e szabálysértési jelentéseket. Az engedélyezéshez adjon meg egy végpontot. Az alkalmazás szabálysértési jelentéseket küld ennek a végpontnak, függetlenül attól, hogy a CSP kényszerítve van-e. Ha a CSP nincs kényszerítve, az alkalmazás csak jelentéskészítési módot használ. További információért lásd: jelentéskészítési dokumentáció.
Kényszerítés
A CSP alkalmazásának irányítása független a modellvezérelt és a vászonalapú alkalmazások esetében, hogy ezáltal részletesebben szabályozhatók legyenek a házirendek. A kívánt alkalmazástípus módosításához használja a modellvezérelt/vászonalapú pivot vezérlőt.
A Tartalomvédelmi szabályzat kényszerítése kapcsoló bekapcsolja az alapértelmezett házirendet az adott alkalmazástípus kényszerítéséhez. A kapcsoló bekapcsolása módosítja az alkalmazások viselkedését ebben a környezetben, hogy megfeleljen a szabályzatnak. Ezért kövesse a javasolt engedélyezési folyamatot:
- A szabályzat kényszerítése fejlesztői vagy tesztelési környezetben.
- Csak jelentés mód engedélyezése működési környezetben.
- A szabályzat kényszerítése működési környezetben, ha a rendszer nem jelent szabálysértést.
Iránymutatások konfigurálása
Az Irányelvek konfigurálása szakasz lehetővé teszi az egyes irányelvek szabályozását a szabályzaton belül. Jelenleg csak testre szabhatja az frame-ancestors irányelvet.
Ha az alapértelmezett direktívát bekapcsolva hagyja, a táblában megadott alapértelmezett értéket használja. Ha kikapcsolja a kapcsolót, megadhatja az irányelv egyéni értékeit, és hozzáfűzheti őket az alapértelmezett értékhez. Az alábbi példa egyéni értékeket állít be a következőhöz frame-ancestors: . Ebben a példában az irányelv frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com értékre van beállítva. Ez a beállítás azt jelenti, hogy az alkalmazás ugyanabban a forrásban üzemeltethető, https://*.powerapps.comhttps://www.foo.comés https://www.bar.commás forrásokban nem. A Hozzáadás gombbal bejegyzéseket adhat hozzá a listához, a Törlés ikonnal pedig eltávolíthatja azokat.
Gyakori konfigurációk
Ha Microsoft Teams integrációt szeretne Dynamics 365 alkalmazással, adja hozzá a következőket frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
A Dynamics 365 App for Outlook esetében adja hozzá a következőket (ehhez: frame-ancestors):
- Az Outlook Web App kezdőlapja
https://outlook.office.comhttps://outlook.office365.com
A Power Apps Power BI jelentésekbe való beágyazásához adja hozzá a következőket frame-ancestors:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Fontos tényezők
Az alapértelmezett irányelv kikapcsolása és az üres listával történő mentés teljesen kikapcsolja az irányelvet, és nem küldi el azt a CSP-válasz fejlécének részeként.
Példa CSP-konfigurációra
Íme néhány példa a CSP-konfigurációkra.
1. példa – a jelentéskészítés ki van kapcsolva
A példában:
- A jelentéskészítés ki van kapcsolva.
- A modellvezérelt kényszerítés engedélyezve van.
-
frame-ancestorsahttps://www.contoso.coméshttps://www.fabrikam.comszámára van testreszabva.
-
- A vászon kényszerítése le van tiltva.
A hatályos fejlécek a következőek:
- Modellvezérelt alkalmazások:
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; - Vászonalapú alkalmazások: A CSP-fejléc nincs elküldve.
2. példa – a jelentéskészítés be van kapcsolva
A példában:
- A jelentéskészítés be van kapcsolva.
- A jelentési végpont értéke a következőre van állítva:
https://contoso.com/reporting-endpoint
- A jelentési végpont értéke a következőre van állítva:
- A modellvezérelt kényszerítés engedélyezve van.
-
frame-ancestorsértéke alapértelmezett
-
- A vászon kényszerítése le van tiltva.
-
frame-ancestorsszemélyre van szabva a következőhöz:https://www.contoso.com
-
Az érvényes CSP-értékek a következők:
- Modellvezérelt alkalmazások:
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; - Vászonalapú alkalmazások:
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;
Szervezeti beállítások módosítása közvetlenül
A CSP-t a felhasználói felület használata nélkül is konfigurálhatja a szervezeti beállítások közvetlen módosításával:
IsContentSecurityPolicyEnabled azt irányítja, hogy a Tartalomra-vonatkozó-biztonsági-házirend fejlécet a rendszer elküldi-e a modellvezérelt alkalmazásokban.
A ContentSecurityPolicyConfiguration szabályozza a frame-ancestors rész értékét (ahogy korábban látható,
'self'értéket állít be, ha a(z)ContentSecurityPolicyConfigurationbeállítás nincs megadva). Ezt a beállítást egy JSON-objektummal definiálhatja a következő struktúrával –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Ez a konfiguráció a következőket jelenti:script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';- (Az MDN felületéről) A HTTP Tartalomra-vonatkozó-biztonsági-házirend (CSP) frame-ancestors irányelv olyan érvényes szülőket határoz meg, amelyek beágyazhatnak egy oldalt a következők használatával:
<frame>,<iframe>,<object>,<embed>vagy<applet>.
- (Az MDN felületéről) A HTTP Tartalomra-vonatkozó-biztonsági-házirend (CSP) frame-ancestors irányelv olyan érvényes szülőket határoz meg, amelyek beágyazhatnak egy oldalt a következők használatával:
IsContentSecurityPolicyEnabledForCanvas azt irányítja, hogy a Tartalomra-vonatkozó-biztonsági-házirend fejlécet a rendszer elküldi-e a vászonalapú alkalmazásokban.
AContentSecurityPolicyConfigurationForCanvas a vászon szabályzatát a következő részben (
ContentSecurityPolicyConfiguration) leírt eljárással szabályozza.ContentSecurityPolicyReportUri határozza meg, hogy a jelentéskészítést használni kell-e. Ezt a beállítást a modellvezérelt és a vászonalapú alkalmazások is használják. Az érvényes sztring szabálysértési jelentéseket küld a megadott végpontra, csak jelentési módban, ha a(z)
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvaski van kapcsolva. Az üres sztring letiltja a jelentéskészítést. További információért lásd: jelentéskészítési dokumentáció.
CSP konfigurálása felhasználói felület nélkül
Különösen a Power Platform felügyeleti központjában nem jelenlévő környezetek (például helyszíni konfigurációk) esetében a rendszergazdák a beállítások közvetlen módosítása érdekében szkriptek használatával is konfigurálhatják a CSP-t.
CSP engedélyezése felhasználói felület nélkül
Az alábbi lépésekkel engedélyezheti a CSP-t felhasználói felület nélkül:
- Nyissa meg a böngésző fejlesztői eszközeit, miközben a modellvezérelt alkalmazást szervezeti entitás frissítési jogosultsággal rendelkező felhasználóként használja (a rendszergazdaként való használat jó lehetőség).
- Illessze be a következő szkriptet a konzolba, majd hajtsa végre.
- A CSP engedélyezéséhez adja át az alapértelmezett konfigurációt:
enableFrameAncestors(["'self'"]) - Példa arra, hogy más források is beágyazzák az alkalmazást:
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!')
}
A CSP letiltása felhasználói felület nélkül
Az alábbi lépésekkel tilthatja le a CSP-t felhasználói felület nélkül:
- Nyissa meg a böngésző fejlesztői eszközeit, miközben a modellvezérelt alkalmazást szervezeti entitás frissítési jogosultsággal rendelkező felhasználóként használja (a rendszergazdaként való használat jó lehetőség).
- Illessze be a következő szkriptet a konzolba, majd hajtsa végre.
- A CSP letiltásához illessze be a konzolba a következőt:
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!')
}