Dalintis per


Turinio saugos strategija

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:

  1. Prisijunkite prie „Power Platform“ administravimo centro.
  2. Naršymo srityje pasirinkite Tvarkyti. Srityje Valdyti pasirinkite Aplinkos.
  3. Puslapyje **Aplinkos** pasirinkite aplinką.
  4. Komandų juostoje pasirinkite Nustatymai.
  5. Išskleiskite Produktas ir pasirinkite Privatumas + saugumas.

Toliau pateiktame paveikslėlyje rodoma numatytoji parametrų būsena:

Turinio saugos strategijos numatytieji parametrai.

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.

Įjunkite ataskaitų teikimo jungiklį į įjungtą.

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:

  1. Vykdykite strategiją kūrėjo arba bandymo aplinkoje.
  2. Įjungti tik ataskaitų režimą gamyboje.
  3. 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ą.

Konfigūruokite CSP direktyvas.

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.

Pasirinktinių CSP direktyvų nustatymas.

Į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.com
  • https://outlook.office365.com

Norėdami įdėti Power Apps į Power BI ataskaitas, į frame-ancestors jas įtraukite:

  • https://app.powerbi.com
  • https://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

1 pavyzdys, pagrįstas modeliu

1 CSP pavyzdys, drobė

Pavyzdyje:

  • Ataskaitų teikimas yra išjungtas.
  • Modeliu pagrįstas įgalinimas yra įjungtas.
    • frame-ancestors yra pritaikytas https://www.contoso.com ir https://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

2 pavyzdys, pagrįstas modeliu

2 CSP pavyzdys, drobė

Pavyzdyje:

  • Ataskaitų teikimas yra įjungtas.
    • Ataskaitų galinis punktas nustatytas kaip https://contoso.com/reporting-endpoint
  • Modeliu pagrįstas įgalinimas yra įjungtas.
    • frame-ancestors laikomas numatytuoju
  • Drobės įgalinimas išjungtas.
    • frame-ancestors yra pritaikytas https://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' jei ContentSecurityPolicyConfiguration nenustatyta). Apibrėžkite šį parametrą naudodami JSON objektą, kurio struktūra yra tokia – . { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } } Ši konfigūracija reiškia script-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>.
  • 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/IsContentSecurityPolicyEnabledForCanvas jis 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!')
}