Делите путем


Смернице за безбедност садржаја

Политика безбедности садржаја (ЦСП) тренутно је подржана у апликацијама заснованим на моделу, платну и коду. Овај чланак објашњава како конфигурисати ЦСП за апликације засноване на моделу и платну. За кодне апликације ЦСП, погледајте документацију за кодне апликације . Администратори могу да контролишу да ли је CSP заглавље послато и, у одређеној мери, шта оно садржи. Подешавања су на нивоу окружења, што значи да се примењују на све апликације у окружењу када се једном укључе.

Белешка

Политика безбедности садржаја односи се само на окружења која користе Dataverse.

Свака компонента вредности ЦСП заглавља контролише средства која се могу преузети. Мозилла Девелопер Нетворк (МДН) пружа детаљније описе. Следе подразумеване вредности:

Упутство Подразумевана вредност Прилагодљиво
script-src * 'unsafe-inline' 'unsafe-eval' blob: No
worker-src 'self' blob: No
style-src * 'unsafe-inline' blob: No
фонт-срц * 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;.

Строги режим

Строги ЦСП прекидач ствара ЦСП који углавном не укључује џокере или несигурне директиве, као што су unsafe-inline. Када укључите Стрицт ЦСП, претходне директиве постају следеће директиве детаљно описане у овом одељку. Нотација <platform> значи да су домени платформе обезбеђени у складу са захтевима производа. Домени у овом одељку могу се временом мењати како производ расте.

Упутство Подразумевана вредност (модел-дривен) Подразумевана вредност (платно) Прилагодљиво
script-src 'self' blob: <platform>' 'self' <platform>' Да
worker-src 'self' blob: 'self' blob: No
style-src 'self' 'unsafe-inline' blob: <platform> 'self' 'unsafe-inline' <platform> Да
фонт-срц 'self' data: <platform> 'self' data: <platform> Да
оквир-преци 'self' https://*.powerapps.com 'self' https://*.powerapps.com Да
имг-срц 'self' blob: data: <platform> 'self' data: <platform> Да
Повезивање-СРЦ 'self' blob: data: wss: <platform> 'self' blob: <platform> Да
Оквир-СРЦ 'self' blob: <platform> 'self' <platform> Да
База-УРИ 'none' Не постоји No
форма-акција <platform> Не постоји Да
Дефаулт-срц 'self' 'self' No

Предуслови

За < ДИЦТ__Дyнамицс ⚐ 365 > Дyнамицс 365 апликације за ангажовање купаца и друге апликације засноване на моделу, ЦСП је доступан само у онлине окружењима и у организацијама са < ДИЦТ__Дyнамицс ⚐ 365 > Дyнамицс 365 Цустомер Енгагемент (он-премисес), верзија КСНУМКС или новија верзија.

Конфигуришите CSP

Можете да пребацујете и конфигуришете ЦСП преко админ центра Power Platform . Важно је прво омогућити дев/тест окружење, јер омогућавање ЦСП-а може почети да блокира сценарије ако се крши политика. Админ центар такође подржава режим само за извештај како би се омогућило лакше повећање производње.

Предузмите ове кораке да бисте конфигурисали ЦСП:

  1. Пријавите се у Power Platform центар администрације.
  2. У окну за навигацију изаберите Манаге. У окну Управљање , изаберите Окружења.
  3. На страници Окружења изаберите окружење.
  4. На командној траци изаберите Подешавања.
  5. Проширите Производ , а затим изаберите Приватност + Безбедност.

Следећа слика приказује подразумевано стање подешавања:

Подразумевана подешавања политике безбедности садржаја.

Пријављивање

Прекидач Омогући извештавање контролише да ли апликације засноване на моделу и платну шаљу извештаје о кршењу. Да бисте га омогућили, наведите крајњу тачку. Апликација шаље извештаје о кршењу на ову крајњу тачку без обзира да ли се ЦСП примењује или не. Ако се ЦСП не примењује, апликација користи режим само за извештај. Више информација потражите у документацији о извештавању.

Омогућите прекидач за извештавање.

Спровођење

Примена CSP се контролише независно за апликације засноване на моделу и апликације са подлогом како би се обезбедила гранулирана контрола над смерницама. Користите изведену табелу засновану на моделу/са подлогом да бисте изменили предвиђени тип апликације.

Прекидач Примени безбедносну политику садржаја укључује подразумевану политику за спровођење за дату врсту апликације. Укључивање овог прекидача мења понашање апликација у овом окружењу како би се придржавали правила. Стога , пратите овај предложени ток омогућавања:

  1. Примените политику на дев или тест окружењу.
  2. Омогућите режим само за извештавање у производњи.
  3. Спровести политику у производњи када се не пријаве кршења.

Конфигурисање директива

Одељак Конфигуриши директиве вам омогућава да контролишете појединачне директиве унутар политике. Тренутно можете прилагодити само директиву frame-ancestors .

Конфигуришите ЦСП директиве.

Ако оставите подразумевану директиву укључену, користите подразумевану вредност специфицирану у табели . Ако искључите прекидач, можете специфицирати прилагођене вредности за директиву и додати их подразумеваној вредности. Следећи пример поставља прилагођене вредности за 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, али не и у другим изворима. Користите дугме Додај да додате уносе на листу и икону Обриши да бисте их уклонили.

Постављање прилагођених ЦСП директива.

Уобичајене конфигурације

За интеграцију < ДИЦТ__Мицрософт ⚐ Теамс > Мицрософт Теамс користећи апликацију &лт;c0&гт;< ДИЦТ__Дyнамицс ⚐ 365 > Дyнамицс 365 &лт; / c0&гт;, додајте следеће у &лт;c1 / &гт;:

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

За апликацију < ДИЦТ__Дyнамицс ⚐ 365 > Дyнамицс 365 за Оутлоок , додајте следеће у &лт;c0 / &гт;:

  • Порекло почетне странице ваше Оутлоок веб апликације
  • https://outlook.office.com
  • https://outlook.office365.com

За уграђивање < ДИЦТ__Поwер ⚐ Аппс > Поwер Аппс у < ДИЦТ__Поwер ⚐ БИ > Поwер БИ извештаје, додајте следеће у &лт;c0 /&гт;:

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

Важна разматрања

Искључивање подразумеване директиве и чување са празном листом у потпуности искључује директиву и не шаље је као део заглавља одговора CSP.

Примери конфигурације ЦСП-а

Ево неколико примера ЦСП конфигурација.

Пример 1 - извештавање искључено

ЦСП пример КСНУМКС, вођен моделом

ЦСП пример 1, платно

У примеру:

  • Извештавање је искључено.
  • Примена заснована на моделу је омогућена.
    • frame-ancestors је прилагођен https://www.contoso.com и https://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;
  • Цанвас апликације: ЦСП заглавље се не шаље.

Пример 2 - извештавање је укључено

ЦСП пример КСНУМКС, заснован на моделу

ЦСП пример 2, платно

У примеру:

  • Извештавање је укључено.
    • Крајња тачка извештавања је подешена на https://contoso.com/reporting-endpoint
  • Примена заснована на моделу је омогућена.
    • frame-ancestors се чува као подразумевано
  • Примена подлоге је онемогућена.
    • frame-ancestors је прилагођен за https://www.contoso.com

Ефективне вредности ЦСП-а су:

  • Апликације засноване на моделу: 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;

Измените поставке организације директно

Можете конфигурисати ЦСП без коришћења корисничког интерфејса тако што ћете директно модификовати ове поставке организације:

  • ИсЦонтентСецуритиПолицyЕнаблед контролише да ли се заглавље Цонтент-Сецурити-Полицy шаље у апликацијама заснованим на моделу.

  • ЦонтентСецуритyПолицyЦонфигуратион контролише вредност дела фраме-анцесторс (као што је раније виђено, поставља се на 'self' ако ContentSecurityPolicyConfiguration није подешено). Дефинишите ову поставку помоћу ЈСОН објекта са следећом структуром – { "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>.
  • ИсЦонтентСецуритиПолицyЕнабледФорЦанвас контролише да ли се заглавље Цонтент-Сецурити-Полицy шаље у апликацијама платна.

  • ЦонтентСецуритиПолицyЦонфигуратионФорЦанвас контролише политику за платно користећи исти процес описан у ContentSecurityPolicyConfiguration.

  • ЦонтентСецуритиПолицyРепортУри контролише да ли треба користити извештавање. Ову поставку користе и апликације засноване на моделу и апликације са подлогом. Важећи стринг шаље извештаје о кршењу на наведену крајњу тачку, користећи режим само за извештаје ако IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvas је искључен. Празна ниска онемогућава извештавање. Више информација потражите у документацији о извештавању.

Конфигурисање CSP без корисничког интерфејса

Посебно за окружења која нису у Power Platform центру администрације као што су локалне конфигурације, администратори ће можда морати да конфигуришу 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!')
}

Онемогућавање ЦСП без корисничког интерфејса

Предузмите ове кораке да бисте онемогућили ЦСП без корисничког интерфејса:

  • Отворите развојне алатке прегледача док користите апликацију засновану на моделу као корисник са привилегијама ажурирања ентитета организације (администратор система је добра опција).
  • Налепите и извршите следећу скрипту у конзолу.
  • Да бисте онемогућили 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!')
}