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


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

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

Ескертпе

Мазмұн қауіпсіздігі саясаты пайдаланатын орталарға ғана қолданылады Dataverse.

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

Бағыт Әдепкі мән Реттелетін
script-src * 'unsafe-inline' 'unsafe-eval' blob: No
жұмысшы-src 'self' blob: No
style-src * 'unsafe-inline' blob: No
font-src * data: No
кадр-ата-бабалары 'self' https://*.powerapps.com Иә

Бұл конфигурация 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; әдепкі CSP береді.

Қатаң режім

Strict CSP қосқышы көбінесе wildcard немесе қауіпті директиваларды қамтымайтын CSP жасайды, мысалы unsafe-inline. Strict CSP-ны қосқанда, алдыңғы нұсқаулар осы бөлімде көрсетілген келесі нұсқауларға айналады. Бұл <platform> дегеніміз, платформа домендері өнімнің қажеттілігіне сәйкес ұсынылады. Бұл бөлімдегі домендер өнім өскен сайын уақыт өте өзгеруі мүмкін.

Бағыт Әдепкі мән (үлгіге негізделген) Әдепкі мән (кенеп) Реттелетін
script-src 'self' blob: <platform>' 'self' <platform>' Иә
жұмысшы-src 'self' blob: 'self' blob: No
style-src 'self' 'unsafe-inline' blob: <platform> 'self' 'unsafe-inline' <platform> Иә
font-src 'self' data: <platform> 'self' data: <platform> Иә
кадр-ата-бабалары 'self' https://*.powerapps.com 'self' https://*.powerapps.com Иә
IMG-SRC 'self' blob: data: <platform> 'self' data: <platform> Иә
Connect-src 'self' blob: data: wss: <platform> 'self' blob: <platform> Иә
Frame-src 'self' blob: <platform> 'self' <platform> Иә
База-ури 'none' Жоқ No
Пішін-әрекет <platform> Жоқ Иә
Ð Ð°Ñ Ð°T� 'self' 'self' No

Алғышарттар

Dynamics 365 тұтынушылармен байланыс қосымшалары мен басқа модельдік қосымшалар үшін CSP тек онлайн орталарда және Dynamics 365 клиенттермен жұмыс істеу (жергілікті нұсқасы), 9.1 немесе одан кейінгі нұсқасы бар ұйымдарда қолжетімді.

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

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

CSP-ны баптау үшін келесі қадамдарды орындаңыз:

  1. Power Platform басқару орталығынакіріңіз.
  2. Шарлау тақтасында Басқару опциясын таңдаңыз. ішінде Басқару тақтасында таңдаңыз Қоршаған орталар.
  3. Орталар бетінде ортаны таңдаңыз.
  4. Пәрмендер жолағында Параметрлер таңдаңыз.
  5. Өнім тармағын кеңейтіп, Құпиялылық + Қауіпсіздік опциясын таңдаңыз.

Келесі сурет параметрлердің әдепкі күйін көрсетеді:

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

Есеп беру

Есеп беруді қосу қосқышы үлгіге негізделген және кенеп қолданбаларының бұзушылық есептерін жіберуін басқарады. Оны қосу үшін соңғы нүктені көрсетіңіз. Қосымша осы соңғы нүктеге 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, бірақ басқа origins-те орналастырылмайды. Тізімге жазбаларды қосу үшін Қосу түймесін және оларды жою үшін Жою белгішесін пайдаланыңыз.

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

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

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

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

Outlook үшін Dynamics 365 қосымшасы үшін frame-ancestors-ге келесі мәліметтерді қосыңыз:

  • Сіздің Outlook Web App басты бетіңіздің шығу тегі
  • https://outlook.office.com
  • https://outlook.office365.com

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

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

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

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

CSP конфигурациясының мысалдары

Міне, CSP конфигурацияларының бірнеше мысалы.

1-мысал – есеп беру өшірілді

CSP мысалы 1, модельге негізделген

CSP мысалы 1, кенеп

Мысалда:

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

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

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

2-мысал – есеп беру қосылды

CSP мысалы 2, модельге негізделген

CSP мысалы 2, кенеп

Мысалда:

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

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

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

Ұйым параметрлерін тікелей өзгертіңіз

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

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

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

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

  • ContentSecurityPolicyConfigurationForCanvasContentSecurityPolicyConfiguration бөлімінде сипатталған бірдей процесті пайдаланып кенепке арналған саясатты басқарады.

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

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

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

UI жоқ CSP қосыңыз

UIсіз 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 өшіру

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!')
}