Partekatu honen bidez:


Edukiaren segurtasun-gidalerroak

Edukiaren segurtasun-gidalerroak (CSP) ereduetan eta mihiseetan onartzen dira Power Apps. Administratzaileek CSP goiburua bidaltzen den eta, neurri batean, zer daukan kontrola dezakete. Ezarpenak ingurune-mailan daude, hau da, aktibatu ondoren inguruneko aplikazio guztietan aplikatuko litzateke.

CSP goiburuko balioaren osagai bakoitzak deskargatu daitezkeen aktiboak kontrolatzen ditu eta Mozilla Developer Network (MDN) xehetasun gehiagorekin deskribatzen da. Lehenespenez, balioak hauek dira:

Zuzentaraua Balio lehenetsia Pertsonalizagarria
script-src * 'unsafe-inline' 'unsafe-eval' No
worker-src 'self' blob: No
style-src * 'unsafe-inline' No
font-src * data: No
frame-ancestors 'self' https://*.powerapps.com Yes

Honek CSP lehenetsia sortzen du script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;. Gure ibilbide-orrian, gaur egun pertsonaliza daitezkeen goiburuak aldatzeko gaitasuna dugu.

Aurrebaldintzak

  • Dynamics 365 bezeroen konpromisorako aplikazioetarako eta ereduetan oinarritutako beste aplikazioetarako, CSP sareko inguruneetan eta Dynamics 365 bezeroen konpromisoa (lokal) 9.1 bertsioa edo berriagoa duten erakundeetan soilik dago erabilgarri.

Konfiguratzea CSP

CSP Power Platform administrazio zentroaren bidez alda eta konfigura daiteke. Garrantzitsua da lehenik garapen/proba ingurune batean gaitzea , CSP gaitzea egoerak blokeatzen has daitekeelako politika urratzen bada. Gainera, "txostenak soilik modua" onartzen dugu ekoizpena errazagoa izan dadin.

CSP konfiguratzeko, joan Power Platform administrazio-zentroa ->Inguruneak ->Ezarpenak ->Pribatutasuna + segurtasuna. Hurrengo irudiak ezarpenen lehenetsitako egoera erakusten du:

Edukiaren segurtasun-gidalerroak ezarpen lehenetsiak

Salatzen

"Gaitu txostenak" aukerak kontrolatzen du ereduetan oinarritutako eta mihise-aplikazioek urratze-txostenak bidaltzen dituzten ala ez. Gaitzeko, amaierako puntu bat zehaztu behar da. Urratze-txostenak amaiera-puntu honetara bidaltzen dira, CSP behartuta dagoen ala ez kontuan hartu gabe (txostenak soilik modua erabiliz, CSP behartuta ez badago). Informazio gehiagorako, ikusi -en dokumentazioa berri ematea.

Txostenaren amaiera-puntua gaitzen

Betearazpena

CSP betearaztea modu independentean kontrolatzen da ereduetan oinarritutako eta mihiseen aplikazioetarako, politiken gaineko kontrol zehatza emateko. Erabili ereduan oinarritutako/mihisearen pibota nahi den aplikazio mota aldatzeko.

"Behartu edukiaren segurtasun-gidalerroak" txandakatzaileak aplikazio motarako betearazteko politika lehenetsia aktibatzen du. Etengailu hau aktibatuz gero, ingurune honetako aplikazioen portaera aldatzen da gidalerroari atxikitzeko. Beraz, iradokitako gaikuntza-fluxua hau izango litzateke:

  1. Aplikatu garapen/proba ingurune batean.
  2. Gaitu txostenak egiteko modua ekoizpenean.
  3. Ekoizpenean bete ezazu arau-hausterik salatzen ez denean.

Konfiguratu gidalerroak

Atal honek gidalerroaren barruan zuzentarau indibidualak kontrolatzeko aukera ematen du. Gaur egun, frame-ancestors soilik pertsonalizatu daiteke.

Konfiguratu CSP zuzentarauak

Zuzentarau lehenetsia aktibatuta uzteak artikulu honetan lehenago agertzen den taulan zehaztutako balio lehenetsia erabiltzen du. Etengailua desaktibatzeari esker, administratzaileek zuzentaraurako balio pertsonalizatuak zehazteko eta balio lehenetsiari eransteko aukera ematen die. Beheko adibideak frame-ancestors-rako balio pertsonalizatuak ezartzen ditu. Zuzentaraua frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com adibide honetan ezarriko litzateke, hau da, aplikazioa jatorri berean egon liteke, https://*.powerapps.com, https://www.foo.com eta https://www.bar.com, baina ez beste jatorrietan. Erabili Gehitu botoia zerrendara sarrerak gehitzeko eta ezabatzeko ikonoa horiek kentzeko.

CSP zuzentarau pertsonalizatuak ezartzea

Konfigurazio arruntak

Microsoft Teams Dynamics 365 aplikazioa erabiliz integratzeko, gehitu honako hau frame-ancestors:

  • https://teams.microsoft.com/
  • https://teams.cloud.microsoft/
  • https://msteamstabintegration.dynamics.com/

Dynamics 365 App for Outlook-rako, gehitu honako hau frame-ancestors-ra:

  • Zure Outlook Web App hasierako orriaren jatorria
  • https://outlook.office.com
  • https://outlook.office365.com

Power Apps Txostenetan Power BI kapsulatzeko, gehitu honako hau frame-ancestors:

  • https://app.powerbi.com
  • https://ms-pbi.pbi.microsoft.com

Gogoeta garrantzitsuak

Zuzentarau lehenetsia desaktibatu eta zerrenda huts batekin gordetzeak zuzentaraua erabat desaktibatzen du eta ez du CSP erantzunen goiburuaren zati gisa bidaltzen.

Adibideak

Ikus ditzagun CSP konfigurazioaren adibide pare bat:

1. adibidea

CSP adibidea 1

Adibidean:

  • Txostenak desaktibatuta daude.
  • Eredu bidezko betearazpena gaituta dago.
    • frame-ancestors hona pertsonalizatu da: https://www.foo.com eta https://www.bar.com
  • Mihise betearaztea desgaituta dago.

Goiburu eraginkorrak hauek izango lirateke:

  • Ereduetan oinarritutako aplikazioak: 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;
  • Mihise aplikazioak: CSP goiburua ez litzateke bidaliko.

2. adibidea

CSP adibidea 2

Adibidean:

  • Txostenak aktibatuta daude.
    • Txostenak sortzeko amaiera-puntua hona ezarrita: https://www.mysite.com/myreportingendpoint
  • Eredu bidezko betearazpena gaituta dago.
    • frame-ancestors lehenetsi gisa mantentzen da
  • Mihise betearaztea desgaituta dago.
    • frame-ancestors hona pertsonalizatu da: https://www.baz.com

CSP balio eraginkorrak hauek izango lirateke:

  • Ereduetan oinarritutako aplikazioak: 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;
  • Mihise-aplikazioak: 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;

Erakundearen ezarpenak

CSP UI-a erabili gabe konfigura daiteke erakundearen ezarpen hauek zuzenean aldatuz:

  • IsContentSecurityPolicyEnabled kontrolatzen du eduki-segurtasun gidalerroen goiburua bidaltzen den ereduetan oinarritutako aplikazioan.

  • ContentSecurityPolicyConfiguration marko-arbasoen zatiaren balioa kontrolatzen du (goian ikusten den bezala, 'self' ez bada ContentSecurityPolicyConfiguration ezarrita dago). Ezarpen hau egitura hau duen JSON objektu batek adierazten du - { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Hori bihurtuko litzateke script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';

    • (MDNtik) HTTP Edukiaren segurtasun-gidalerroek (CSP) marko-arbasoen zuzentarauak orrialde bat txertatu dezaketen guraso baliodunak zehazten ditu erabiliz <frame>, <iframe>, <object>, <embed>, edo <applet>.
  • IsContentSecurityPolicyEnabledForCanvas kontrolatzen du eduki-segurtasun gidalerroen goiburua bidaltzen den mihise-aplikazioan.

  • ContentSecurityPolicyConfigurationForCanvas kontrolatzen du mihisesaren gidalerroak erabiliz prozesu bera hemen zehaztuta ContentSecurityPolicyConfiguration goian.

  • ContentSecurityPolicyReportUri txostenak erabili behar diren kontrolatzen du. Ezarpen hau ereduetan oinarritutako eta mihise-aplikazioek erabiltzen dute. Baliozko kate batek urratze-txostenak bidaltzen ditu zehaztutako amaierako puntura, txostenak soilik modua erabiliz IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas desaktibatuta badago. Kate huts batek txostenak desgaitzen ditu. Informazio gehiagorako, ikusi -en dokumentazioa berri ematea.

CSP konfiguratzea erabiltzaile-interfaze gabe

Batez ere, Power Platform administrazio zentroan ez dauden inguruneetarako, hala nola lokal konfigurazioak, baliteke administratzaileek CSP konfiguratu nahi izatea script-ak erabiliz ezarpenak zuzenean aldatzeko.

Erabiltzaile-interfaze gabe CSP gaitzea

Urratsak:

  • Ireki arakatzailea garatzeko tresnak ereduan oinarritutako aplikazioa erakundearen entitateen eguneratze-pribilegioak dituen erabiltzaile gisa erabiltzen duzun bitartean (Sistema Administratzailea aukera ona da).
  • Itsatsi eta exekutatu beheko scripta kontsolan.
  • CSP gaitzeko, pasa konfigurazio lehenetsia - enableFrameAncestors(["'self'"])
  • Beste jatorri batzuek aplikazioa txertatzeko gaitzeko adibide gisa - 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!')
}

Erabiltzaile-interfaze gabe CSP desgaitzea

Urratsak:

  • Ireki arakatzailea garatzeko tresnak ereduan oinarritutako aplikazioa erakundearen entitateen eguneratze-pribilegioak dituen erabiltzaile gisa erabiltzen duzun bitartean (Sistema Administratzailea aukera ona da).
  • Itsatsi eta exekutatu honako script hau kontsolan.
  • CSP desgaitzeko, itsatsi kontsolan: 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!')
}