Бөлісу құралы:


Мазмұн қауіпсіздігі саясаты

Мазмұн қауіпсіздігі саясатына (CSP) қазіргі уақытта үлгіге негізделген және кенепте қолдау көрсетіледі Power Apps. Әкімшілер CSP тақырыбының жіберілген-жіберілмегенін және белгілі бір дәрежеде оның нені қамтитынын басқара алады. Параметрлер орта деңгейінде, яғни ол қосылғаннан кейін ортадағы барлық қолданбаларға қолданылады.

CSP тақырыбы мәнінің әрбір құрамдас бөлігі жүктеп алуға болатын активтерді басқарады және Mozilla Developer Network (MDN) толығырақ сипатталған. Әдепкі мәндер төменде көрсетілген:

Бағыт Әдепкі мән Реттелетін
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 Иә

Бұл әдепкі CSP-ге әкеледі script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;. Жол картамызда қазіргі реттелмейтін тақырыптарды өзгерту мүмкіндігі бар.

Алғышарттар

  • Dynamics 365 Customer Engagement қолданбалары және үлгіге негізделген басқа қолданбалар үшін CSP тек онлайн орталарда және Dynamics 365 Customer Engagement (on-premises), 9.1 немесе одан кейінгі нұсқасы бар ұйымдарда қолжетімді.

CSP конфигурациялау

CSP-ті Power Platform басқару орталығы арқылы ауыстыруға және конфигурациялауға болады. Әуелі әзірлеу/сынақ ортасында қосу маңызды себебі, саясат бұзылса, CSP қосу сценарийлерді блоктай бастауы мүмкін. Біз сондай-ақ өндірісті жеңілдету үшін «тек есеп беру режимін» қолдаймыз.

CSP конфигурациялау үшін Power Platform басқару орталығы ->Орталар ->Параметрлер ->Құпиялылық +Қауіпсіздік тармағына өтіңіз. Келесі сурет параметрлердің әдепкі күйін көрсетеді:

Мазмұн қауіпсіздігі саясатының әдепкі параметрлері

Есеп беру

"Есеп беруді қосу" ауыстырып-қосқышы үлгіге негізделген және кенеп қолданбаларының бұзушылық есептерін жіберуін басқарады. Оны қосу үшін соңғы нүктені көрсету қажет. Бұзушылық туралы есептер CSP орындалғанына немесе орындалмағанына қарамастан осы соңғы нүктеге жіберіледі (CSP орындалмаса, тек есеп беру режимін пайдалану). Қосымша ақпарат алу үшін есеп беру құжаттамасын қараңыз.

Есеп берудің соңғы нүктесін қосу

Мәжбүрлі түрде қолдану

CSP талаптарының орындалуы саясаттарды егжей-тегжейлі бақылауды қамтамасыз ету үшін үлгіге негізделген және кенеп қолданбалары үшін тәуелсіз басқарылады. Жоспарланған қолданба түрін өзгерту үшін үлгіге негізделген/кенеп бұрылысын пайдаланыңыз.

"Мазмұн қауіпсіздігі саясатын қолдану" қосқышы берілген қолданба түрі үшін орындау үшін әдепкі саясатты қосады. Бұл қосқышты қосу саясатты сақтау үшін осы ортадағы қолданбалардың әрекетін өзгертеді. Осылайша, ұсынылған қосу ағыны келесідей болады:

  1. Әзірлеуші/сынақ ортасында қолдану.
  2. Өндірісте тек есеп беру режимін қосыңыз.
  3. Ешбір бұзушылықтар тіркелмегеннен кейін өндіріске енгізіңіз.

Директиваларды реттеу

Соңғы бөлім «Директиваларды конфигурациялау». Бұл бөлім саясат ішіндегі жеке директиваларды басқаруға мүмкіндік береді. Қазіргі уақытта тек frame-ancestors теңшеуге болады.

CSP директиваларын конфигурациялаңыз

Әдепкі директиваны қосулы күйде қалдыру осы мақаланың басында көрсетілген кестеде көрсетілген әдепкі мәнді пайдаланады. Ауыстырғышты өшіру әкімшілерге директиваның теңшелетін мәндерін көрсетуге және оларды әдепкі мәнге қосуға мүмкіндік береді. Төмендегі мысал frame-ancestors үшін теңшелетін мәндерді орнатады. Директива осы мысалда frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com деп орнатылады, яғни қолданба бір бастауда орналастырылуы мүмкін, https://*.powerapps.com, https://www.foo.com және https://www.bar.com, бірақ басқа бастауларда емес. Тізімге жазбаларды қосу үшін Қосу түймешігін және оларды жою үшін жою белгішесін пайдаланыңыз.

Пайдаланушы CSP директиваларын орнату

Жалпы конфигурациялар

Microsoft Teams Dynamics 365 қолданбасын пайдаланып біріктіру үшін frame-ancestors ішіне келесіні қосыңыз:

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

Dynamics 365 App for Outlookүшін Outlook Web App негізгі бетінің шығу тегін frame-ancestors қосуыңыз керек.

Power Apps есептерге Power BI енгізу үшін frame-ancestors ішіне келесіні қосыңыз:

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

Маңызды жайттар

Әдепкі директиваны өшіру және бос тізіммен сақтау директиваны толығымен өшіреді және оны CSP жауап тақырыбының бөлігі ретінде жібермейді.

Мысалдар

CSP конфигурациясының бірнеше мысалын қарастырайық:

1-мысал

CSP 1 мысалы

Жоғарыдағы мысалын пайдаланайық.

  • Есеп беру өшірілген.
  • Үлгіге негізделген мәжбүрлеу мүмкіндігі қосылған.
    • frame-ancestorshttps://www.foo.com және https://www.bar.com теңшелген
  • Кенепті орындау өшірілген.

Тиімді тақырыптар:

  • Үлгіге негізделген бағдарламалар: 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;
  • Кенеп қолданбалары: CSP тақырыбы жіберілмейді.

2-мысал

CSP 2 мысалы

Жоғарыдағы мысалын пайдаланайық.

  • Есеп беру өшірілген.
    • Соңғы нүктеге хабарлау https://www.mysite.com/myreportingendpoint орнатылған
  • Үлгіге негізделген мәжбүрлеу мүмкіндігі қосылған.
    • frame-ancestors әдепкі ретінде сақталады
  • Кенепті орындау өшірілген.
    • frame-ancestorshttps://www.baz.com теңшеледі

Тиімді CSP мәндері:

  • Үлгіге негізделген қолданбалар: 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;
  • Кенеп бағдарламалары: 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;

Ұйым параметрлері

CSP келесі ұйым параметрлерін тікелей өзгерту арқылы UI қолданбай конфигурациялануы мүмкін:

  • IsContentSecurityPolicyEnabled Content-Security-Policy тақырыбының үлгіге негізделген бағдарламаларда жіберілуін бақылайды.

  • ContentSecurityPolicyConfiguration frame-ancestors бөлігінің мәнін басқарады (жоғарыда көрсетілгендей, ContentSecurityPolicyConfiguration орнатылмаса, 'self' орнатылады). Бұл параметр келесі құрылымы бар JSON нысанымен ұсынылған – { "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Бұл script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar'; деп аударылады

    • (MDN сайтынан) HTTP Content-Security-Policy (CSP) frame-ancestors директивасы <frame>, <iframe>, <object>, <embed> немесе <applet> арқылы бетті ендіруі мүмкін жарамды негізгі бірліктерді көрсетеді.
  • IsContentSecurityPolicyEnabledForCanvas Content-Security-Policy тақырыбының кенеп бағдарламаларында жіберілуін бақылайды.

  • ContentSecurityPolicyConfigurationForCanvas жоғарыда ContentSecurityPolicyConfiguration ішінде сипатталған бірдей процесс арқылы кенеп бағдарламалары саясатын басқарады.

  • ContentSecurityPolicyReportUri есеп беруді пайдалану керек пе, соны бақылайды. Бұл параметрді модельге негізделген және кенеп қолданбалары пайдаланады. Жарамды жол, IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas өшірілген болса, тек есеп беру режимін пайдаланып, көрсетілген соңғы нүктеге бұзушылық есептерін жібереді. Бос жол есеп беруді өшіреді. Қосымша ақпарат алу үшін есеп беру құжаттамасын қараңыз.

Пайдаланушы интерфейсінсіз CSP конфигурациялау

Әсіресе жергілікті конфигурациялар сияқты Power Platform басқару орталығында орналаспаған орталар үшін әкімшілер параметрлерді тікелей өзгерту үшін сценарийлерді пайдаланып CSP конфигурациялауы мүмкін.

Пайдаланушы интерфейсінсіз CSP қосу

Қадамдар:

  • Модельге негізделген қолданбаны ұйым нысанын жаңарту артықшылықтары бар пайдаланушы ретінде пайдалану кезінде шолғыш әзірлеу құралдарын ашыңыз (Жүйе әкімшісі - жақсы нұсқа).
  • Төмендегі сценарийді консольге қойып, орындаңыз.
  • Жай ғана CSP қосу үшін әдепкі конфигурацияны өткізіңіз - enableFrameAncestors(["'self'"])
  • Қолданбаны ендіру үшін қосымша бастауларды қосу мысалы ретінде - 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!')
}

UI жоқ CSP қосу

Қадамдар:

  • Модельге негізделген қолданбаны ұйым нысанын жаңарту артықшылықтары бар пайдаланушы ретінде пайдалану кезінде шолғыш әзірлеу құралдарын ашыңыз (Жүйе әкімшісі - жақсы нұсқа).
  • Төмендегі сценарийді консольге қойып, орындаңыз.
  • CSP өшіру үшін консольге мынаны қойыңыз: 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!')
}