Nata
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti prisijungti arba pakeisti katalogus.
Norint pasiekti šį puslapį, reikalingas leidimas. Galite pabandyti pakeisti katalogus.
Turinio saugos strategija (CSP) šiuo metu palaikoma modeliu, drobės ir kodo programose. Šiame straipsnyje paaiškinama, kaip konfigūruoti modeliu pagrįstų ir drobės programų CSP. Kodo programų CSP ieškokite kodo programų dokumentacijoje. Administratoriai gali kontroliuoti, ar CSP antraštė išsiunčiama ir, tam tikru mastu, jos turinį. Parametrai yra aplinkos lygiu, o tai reiškia, kad įjungus jie taikomi visoms aplinkoje esančioms programoms.
Pastaba.
Turinio saugos strategija taikoma tik toms aplinkoms, kuriose jos naudojamos Dataverse.
Kiekvienas CSP antraštės reikšmės komponentas valdo išteklius, kuriuos galima atsisiųsti. "Mozilla" kūrėjų tinklas (MDN) pateikia išsamesnius aprašymus. Numatytosios reikšmės pateiktos toliau.
| Direktyva | Numatytoji reikšmė | Galima tinkinti |
|---|---|---|
| scenarijus-src | * 'unsafe-inline' 'unsafe-eval' blob: |
No |
| Darbuotojas-SRC | 'self' blob: |
No |
| stilius-src | * 'unsafe-inline' |
No |
| šriftas-src | * data: |
No |
| rėmo protėviai | 'self' https://*.powerapps.com |
Taip |
Dėl šios konfigūracijos gaunamas numatytasis CSP script-src * 'unsafe-inline' 'unsafe-eval' blob: ; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;.
Griežtas režimas
Griežto CSP jungiklis sukuria CSP, kuriame dažniausiai nėra pakaitos simbolių ar nesaugių direktyvų, pvz. unsafe-inline, . Įjungus griežtą CSP, ankstesnės direktyvos tampa toliau pateiktomis direktyvomis, išsamiai aprašytomis šiame skyriuje. Šis <platform> žymėjimas reiškia, kad platformos domenai pateikiami taip, kaip reikalauja produktas. Šios sekcijos domenai laikui bėgant gali keistis augant produktui.
| Direktyva | Numatytoji vertė (pagal modelį) | Numatytoji reikšmė (drobė) | Galima tinkinti |
|---|---|---|---|
| scenarijus-src | 'self' blob: <platform>' |
'self' <platform>' |
Taip |
| Darbuotojas-SRC | 'self' blob: |
'self' blob: |
No |
| stilius-src | 'self' 'unsafe-inline' <platform> |
'self' 'unsafe-inline' <platform> |
Taip |
| šriftas-src | 'self' data: <platform> |
'self' data: <platform> |
Taip |
| rėmo protėviai | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Taip |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Taip |
| jungtis-src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Taip |
| rėmas-src | 'self' blob: <platform> |
'self' <platform> |
Taip |
| bazė-uri | 'none' |
Netaikoma | No |
| formos veiksmas | <platform> |
Netaikoma | Taip |
| default-src | 'self' |
'self' |
No |
Būtinosios sąlygos
"Dynamics 365 Customer Engagement" programoms ir kitoms modeliu pagrįstoms programoms CSP pasiekiamas tik internetinėse aplinkose ir organizacijose, kuriose naudojama "Dynamics 365 Customer Engagement (on-premises)" 9.1 arba naujesnė versija.
Konfigūruoti CSP
Galite perjungti ir konfigūruoti CSP naudodami Power Platform administravimo centrą. Svarbu pirmiausia įjungti kūrėjo / testavimo aplinką, nes įgalinus CSP gali būti pradėti blokuoti scenarijai, jei bus pažeista politika. Administravimo centras taip pat palaiko tik ataskaitų režimą , kad būtų lengviau pradėti gamybą.
Norėdami sukonfigūruoti CSP, atlikite šiuos veiksmus:
- Prisijunkite prie „Power Platform“ administravimo centro.
- Naršymo srityje pasirinkite Tvarkyti. Srityje Valdyti pasirinkite Aplinkos.
- Puslapyje **Aplinkos** pasirinkite aplinką.
- Komandų juostoje pasirinkite Nustatymai.
- Išskleiskite Produktas ir pasirinkite Privatumas + saugumas.
Toliau pateiktame paveikslėlyje rodoma numatytoji parametrų būsena:
Pranešama
Perjungiklis Įgalinti ataskaitų teikimą valdo, ar modeliu pagrįstos ir drobės programos siunčia pažeidimų ataskaitas. Norėdami jį įjungti, nurodykite galinį punktą. Programa siunčia pažeidimų ataskaitas į šį galinį punktą, nepriklausomai nuo to, ar CSP vykdomas, ar ne. Jei CSP netaikomas, programoje naudojamas tik ataskaitų teikimo režimas. Išsamesnės informacijos žr. ataskaitų dokumentacijoje.
Vykdymas
Modeliu pagrįstoms ir drobės programoms CSP įgalinimas valdomas atskirai, todėl strategijas galima kontroliuoti palaipsniui. Naudodami modeliu pagrįstą / drobės greitąjį rikiavimą modifikuokite atitinkamą programos tipą.
Perjungiklis Vykdyti turinio saugos strategiją įjungia numatytąją vykdymo strategiją tam tikram programos tipui. Įjungus šį jungiklį, programų veikimas šioje aplinkoje pasikeičia, kad būtų laikomasi politikos. Todėl vadovaukitės šiuo siūlomu įgalinimo srautu:
- Vykdykite strategiją kūrėjo arba bandymo aplinkoje.
- Įjungti tik ataskaitų režimą gamyboje.
- Vykdykite strategiją gamyboje, kai nepranešama apie pažeidimus.
Konfigūruoti direktyvas
Skyriuje Konfigūruoti direktyvas galite valdyti atskiras strategijos direktyvas. Šiuo metu galite tinkinti frame-ancestors tik direktyvą.
Jei paliksite įjungtą numatytąją direktyvą, naudosite lentelėje nurodytą numatytąją reikšmę. Jei išjungsite perjungiklį, galėsite nurodyti pasirinktines direktyvos reikšmes ir pridėti jas prie numatytosios reikšmės. Toliau pateiktame pavyzdyje nustatomos pasirinktinės reikšmės .frame-ancestors Direktyva yra nustatyta frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com šiame pavyzdyje. Šis parametras reiškia, kad programa gali būti nuomojama toje pačioje kilmėje, https://*.powerapps.com, https://www.foo.comir https://www.bar.com, bet ne kitoje kilmėje. Naudokite mygtuką Pridėti , kad įtrauktumėte įrašus į sąrašą, ir piktogramą Ištrinti , kad juos pašalintumėte.
Įprastos konfigūracijos
Norėdami Microsoft Teams integruoti naudodami "Dynamics 365" programą, į "Dynamics 365" programą įtraukite frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Jei norite, į šį Dynamics 365 App for Outlook frame-ancestors tekstą įtraukite:
- Jūsų "Outlook Web App" pagrindinio puslapio kilmė
https://outlook.office.comhttps://outlook.office365.com
Norėdami įdėti Power Apps į Power BI ataskaitas, į frame-ancestors jas įtraukite:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Svarbi informacija
Išjungus numatytąją direktyvą ir įrašius su tuščiu sąrašu, direktyva bus visiškai išjungta ir bebus siunčiama kaip CSP atsako antraštės dalis.
CSP konfigūracijos pavyzdžiai
Štai keletas CSP konfigūracijų pavyzdžių.
1 pavyzdys – ataskaitų teikimas išjungtas
Pavyzdyje:
- Ataskaitų teikimas yra išjungtas.
- Modeliu pagrįstas įgalinimas yra įjungtas.
-
frame-ancestorsyra pritaikytashttps://www.contoso.comirhttps://www.fabrikam.com.
-
- Drobės įgalinimas išjungtas.
Efektyvios antraštės yra:
- Modeliu pagrįstos programos:
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; - Drobės programos: CSP antraštė nesiunčiama.
2 pavyzdys – ataskaitų teikimas įjungtas
Pavyzdyje:
- Ataskaitų teikimas yra įjungtas.
- Ataskaitų galinis punktas nustatytas kaip
https://contoso.com/reporting-endpoint
- Ataskaitų galinis punktas nustatytas kaip
- Modeliu pagrįstas įgalinimas yra įjungtas.
-
frame-ancestorslaikomas numatytuoju
-
- Drobės įgalinimas išjungtas.
-
frame-ancestorsyra pritaikytashttps://www.contoso.com
-
Veiksmingos CSP vertės yra šios:
- Modeliu pagrįstos programos:
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; - Drobės programos:
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;
Tiesiogiai modifikuokite organizacijos parametrus
Galite konfigūruoti CSP nenaudodami vartotojo sąsajos, tiesiogiai modifikuodami šiuos organizacijos parametrus:
IsContentSecurityPolicyEnabled valdo, ar turinio saugos strategijos antraštė siunčiama modeliu pagrįstomis programomis.
ContentSecurityPolicyConfiguration valdo kadrų protėvių dalies reikšmę (kaip matyti anksčiau, ji nustatoma kaip
'self'jeiContentSecurityPolicyConfigurationnenustatyta). Apibrėžkite šį parametrą naudodami JSON objektą, kurio struktūra yra tokia – .{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }Ši konfigūracija reiškiascript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';- (Iš MDN) HTTP turinio saugos strategijos (CSP) kadrų prototipų direktyva nurodyto tinkamas pirmines reikšmes, kurios gali įdėti puslapį naudodamos
<frame>,<iframe>,<object>,<embed>arba<applet>.
- (Iš MDN) HTTP turinio saugos strategijos (CSP) kadrų prototipų direktyva nurodyto tinkamas pirmines reikšmes, kurios gali įdėti puslapį naudodamos
IsContentSecurityPolicyEnabledForCanvas valdo, ar turinio saugos strategijos antraštė siunčiama drobės programose.
ContentSecurityPolicyConfigurationForCanvas valdo drobės strategiją, naudodama tą patį aprašytą procesą
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri kontroliuoja, ar ataskaitos turi būti naudojamos. Šį parametrą naudoja ir modeliu pagrįstos, ir drobės programos. Tinkama eilutė siunčia pažeidimų ataskaitas į nurodytą galinį punktą, naudodama tik ataskaitų režimą, jei
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasjis išjungtas. Tuščia eilutė išjungia ataskaitų teikimą. Išsamesnės informacijos žr. ataskaitų dokumentacijoje.
CSP konfigūravimas be UI
Ypač aplinkose, kurios nėra Power Platform administravimo centre, pvz., vietinėse konfigūracijose, administratoriai gali norėti konfigūruoti CSP naudodami scenarijus, kad tiesiogiai modifikuotų parametrus.
Įgalinti CSP be vartotojo sąsajos
Atlikite šiuos veiksmus, kad įgalintumėte CSP be vartotojo sąsajos:
- Atidarykite naršyklės kūrėjo įrankius naudodami modeliu pagrįstą programą kaip vartotojas, turintis organizacijos objekto naujinimo privilegijas (sistemos administratorius yra geras pasirinkimas).
- Įklijuokite ir vykdykite šį scenarijų į konsolę.
- Norėdami įjungti CSP, perduokite numatytąją konfigūraciją -
enableFrameAncestors(["'self'"]) - Kaip pavyzdys, kaip leisti kitoms kilmės šalims įterpti programą -
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!')
}
Išjunkite CSP be vartotojo sąsajos
Atlikite šiuos veiksmus, kad išjungtumėte CSP be vartotojo sąsajos:
- Atidarykite naršyklės kūrėjo įrankius naudodami modeliu pagrįstą programą kaip vartotojas, turintis organizacijos objekto naujinimo privilegijas (sistemos administratorius yra geras pasirinkimas).
- Įklijuokite ir vykdykite šį scenarijų į konsolę.
- Norėdami išjungti CSP, įklijuokite į 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!')
}