Nota
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba mendaftar masuk atau menukar direktori.
Capaian ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
Dasar Keselamatan Kandungan (CSP) kini disokong dalam apl dipacu model, kanvas dan kod. Artikel ini menerangkan cara mengkonfigurasi CSP untuk aplikasi dipacu model dan kanvas. Untuk CSP apl kod, lihat dokumentasi apl kod. Pentadbir boleh mengawal sama ada pengepala CSP dihantar dan sehingga kandungannya. Tetapan berada pada tahap persekitaran, yang bermaksud ia digunakan pada semua apl dalam persekitaran setelah dihidupkan.
Nota
Dasar keselamatan kandungan hanya terpakai kepada persekitaran yang menggunakan Dataverse.
Setiap komponen nilai pengepala CSP mengawal aset yang boleh dimuat turun. Rangkaian Pembangun Mozilla (MDN) menyediakan penerangan yang lebih terperinci. Nilai lalai adalah seperti berikut:
| Arahan | Nilai lalai | Boleh suai |
|---|---|---|
| skrip-src | * 'unsafe-inline' 'unsafe-eval' blob: |
No |
| pekerja-src | 'self' blob: |
No |
| gaya-src | * 'unsafe-inline' blob: |
No |
| fon-src | * data: |
No |
| nenek moyang bingkai | 'self' https://*.powerapps.com |
Ya |
Konfigurasi ini menghasilkan CSP 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; lalai.
Mod ketat
Togol CSP yang ketat mencipta CSP yang kebanyakannya tidak termasuk kad bebas atau arahan tidak selamat, seperti unsafe-inline. Apabila anda menghidupkan CSP Ketat, arahan sebelumnya menjadi arahan berikut yang diperincikan dalam bahagian ini.
<platform> Notasi bermaksud bahawa domain platform disediakan seperti yang diperlukan oleh produk. Domain dalam bahagian ini mungkin berubah dari semasa ke semasa apabila produk berkembang.
| Arahan | Nilai lalai (dipacu model) | Nilai lalai (kanvas) | Boleh suai |
|---|---|---|---|
| skrip-src | 'self' blob: <platform>' |
'self' <platform>' |
Ya |
| pekerja-src | 'self' blob: |
'self' blob: |
No |
| gaya-src | 'self' 'unsafe-inline' blob: <platform> |
'self' 'unsafe-inline' <platform> |
Ya |
| fon-src | 'self' data: <platform> |
'self' data: <platform> |
Ya |
| nenek moyang bingkai | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Ya |
| IMG-SRC | 'self' blob: data: <platform> |
'self' data: <platform> |
Ya |
| sambungan-src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Ya |
| bingkai-src | 'self' blob: <platform> |
'self' <platform> |
Ya |
| asas-uri | 'none' |
T/B | No |
| tindakan bentuk | <platform> |
T/B | Ya |
| lalai-src | 'self' |
'self' |
No |
Prasyarat
Untuk aplikasi penglibatan pelanggan Dynamics 365 dan aplikasi dipacu model lain, CSP hanya tersedia dalam persekitaran dalam talian dan dalam organisasi dengan penglibatan pelanggan Dynamics 365 (di premis), versi 9.1 atau versi yang lebih baru.
Konfigurasi CSP
Anda boleh togol dan konfigurasi CSP melalui Power Platform pusat pentadbiran. Adalah penting untuk mendayakan persekitaran pembangunan/ujian terlebih dahulu kerana mendayakan CSP boleh mula menyekat senario jika dasar dilanggar. Pusat pentadbiran juga menyokong mod laporan sahaja untuk membolehkan peningkatan pengeluaran yang lebih mudah.
Ambil langkah ini untuk mengkonfigurasi CSP:
- Daftar masuk ke pusat pentadbiran Power Platform.
- Dalam anak tetingkap navigasi, pilih Urus. Dalam anak tetingkap Urus , pilih Persekitaran.
- Pada halaman Persekitaran , pilih persekitaran.
- Dalam bar perintah, pilih Tetapan.
- Kembangkan Produk dan kemudian pilih Privasi + Keselamatan.
Imej berikut menunjukkan keadaan lalai tetapan:
Pelaporan
Togol Dayakan pelaporan mengawal sama ada aplikasi dipacu model dan kanvas menghantar laporan pelanggaran. Untuk mendayakannya, tentukan titik akhir. Apl menghantar laporan pelanggaran ke titik akhir ini tanpa mengira sama ada CSP dikuatkuasakan atau tidak. Jika CSP tidak dikuatkuasakan, apl menggunakan mod laporan sahaja. Untuk mendapatkan maklumat lanjut, rujuk dokumentasi pelaporan.
Pelaksanaan
Penguatkuasaan CSP dikawal secara bebas untuk aplikasi berpandukan model dan aplikasi kanvas untuk memberikan kawalan butiran terhadap dasar. Gunakan pangsi berpandukan model/kanvas untuk mengubah suai jenis aplikasi yang dimaksudkan.
Togol Kuatkuasakan dasar keselamatan kandungan menghidupkan dasar lalai untuk penguatkuasaan bagi jenis aplikasi yang diberikan. Menghidupkan togol ini mengubah tingkah laku apl dalam persekitaran ini untuk mematuhi dasar. Oleh itu, ikuti aliran pembolehan yang dicadangkan ini:
- Menguatkuasakan dasar pada persekitaran pembangun atau ujian.
- Mendayakan mod lapor sahaja dalam pengeluaran.
- Kuatkuasakan dasar dalam pengeluaran sebaik sahaja tiada pelanggaran dilaporkan.
Konfigurasikan arahan
Bahagian Konfigurasikan arahan membolehkan anda mengawal arahan individu dalam dasar. Pada masa ini, anda hanya boleh menyesuaikan frame-ancestors arahan.
Jika anda membiarkan arahan lalai dihidupkan, anda menggunakan nilai lalai yang dinyatakan dalam jadual. Jika anda mematikan togol, anda boleh menentukan nilai tersuai untuk arahan dan menambahkannya pada nilai lalai. Contoh berikut mengesetkan nilai tersuai untuk frame-ancestors. Arahan ditetapkan dalam frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com contoh ini. Tetapan ini bermakna apl boleh dihoskan dalam asal, , https://*.powerapps.com, dan https://www.foo.com, yang sama, https://www.bar.comtetapi tidak dalam asal lain. Gunakan butang Tambah untuk menambah entri pada senarai dan ikon Padam untuk mengalih keluarnya.
Konfigurasi biasa
Untuk penyepaduan Microsoft Teams menggunakan aplikasi Dynamics 365, tambahkan yang berikut pada frame-ancestors:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Untuk Apl Dynamics 365 untuk Outlook, tambahkan yang berikut pada frame-ancestors:
- Asal halaman utama Outlook Web App anda
https://outlook.office.comhttps://outlook.office365.com
Untuk membenamkan Power Apps dalam laporan Power BI, tambah yang berikut pada frame-ancestors:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Pertimbangan penting
Mematikan arahan lalai dan menyimpan dengan senarai kosong mematikan arahan sepenuhnya dan tidak menghantarnya sebagai sebahagian daripada pengepala respons CSP.
Contoh konfigurasi CSP
Berikut ialah beberapa contoh konfigurasi CSP.
Contoh 1 - pelaporan dimatikan
Dalam contoh:
- Pelaporan dimatikan.
- Penguatkuasaan berpandukan model didayakan.
-
frame-ancestorsdisesuaikan kepadahttps://www.contoso.comdanhttps://www.fabrikam.com.
-
- Penguatkuasaan kanvas dinyahdayakan.
Tajuk yang berkesan ialah:
- Aplikasi berpandukan model:
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; - Apl kanvas: Pengepala CSP tidak dihantar.
Contoh 2 - pelaporan dihidupkan
Dalam contoh:
- Pelaporan dihidupkan.
- Titik tamat pelaporan ditetapkan untuk
https://contoso.com/reporting-endpoint
- Titik tamat pelaporan ditetapkan untuk
- Penguatkuasaan berpandukan model didayakan.
-
frame-ancestorsdisimpan sebagai lalai
-
- Penguatkuasaan kanvas dinyahdayakan.
-
frame-ancestorsdisesuaikan denganhttps://www.contoso.com
-
Nilai CSP yang berkesan ialah:
- Aplikasi berpandukan model:
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; - Aplikasi kanvas:
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;
Ubah suai tetapan organisasi secara langsung
Anda boleh mengkonfigurasi CSP tanpa menggunakan UI dengan mengubah suai seting organisasi ini secara langsung:
IsContentSecurityPolicyEnabled mengawal sama ada pengepala Content-Security-Policy dihantar dalam aplikasi dipacu model.
ContentSecurityPolicyConfiguration mengawal nilai bahagian nenek moyang bingkai (seperti yang dilihat sebelum ini, ia ditetapkan kepada
'self'jikaContentSecurityPolicyConfigurationtidak ditetapkan). Tentukan tetapan ini dengan menggunakan objek JSON dengan struktur berikut –{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Konfigurasi ini diterjemahkan kepadascript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline' blob:; font-src * data:; frame-ancestors 'foo' 'bar';- (Dari MDN) HTTP Content-Security-Policy (CSP) arahan bingkai-moyang menentukan induk yang sah yang mungkin akan membenamkan halaman menggunakan
<frame>,<iframe>,<object>,<embed>, atau<applet>.
- (Dari MDN) HTTP Content-Security-Policy (CSP) arahan bingkai-moyang menentukan induk yang sah yang mungkin akan membenamkan halaman menggunakan
IsContentSecurityPolicyEnabledForCanvas mengawal sama ada pengepala Content-Security-Policy dihantar dalam aplikasi kanvas.
ContentSecurityPolicyConfigurationForCanvas mengawal dasar untuk kanvas menggunakan proses yang sama yang diterangkan dalam
ContentSecurityPolicyConfiguration.ContentSecurityPolicyReportUri mengawal sama ada pelaporan perlu digunakan. Tetapan ini digunakan oleh kedua-dua aplikasi berpandukan model dan kanvas. Rentetan yang sah menghantar laporan pelanggaran ke titik akhir yang ditentukan, menggunakan mod laporan sahaja jika
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvasdimatikan. Rentetan kosong menyahdayakan pelaporan. Untuk mendapatkan maklumat lanjut, rujuk dokumentasi pelaporan.
Konfigurasi CSP tanpa UI
Terutamanya untuk persekitaran tidak dalam pusat pentadbir Power Platform seperti konfigurasi di premis, pentadbir mungkin mahu mengkonfigurasi CSP menggunakan skrip untuk mengubah suai tetapan secara langsung.
Dayakan CSP tanpa UI
Ambil langkah ini untuk mendayakan CSP tanpa UI:
- Buka alat pembangunan pelayar semasa menggunakan aplikasi berpandukan model sebagai pengguna dengan kelayakan kemas kini entiti organisasi (Pentadbir Sistem ialah pilihan yang baik).
- Tampal dan laksanakan skrip berikut ke dalam konsol.
- Untuk mendayakan CSP, hantar konfigurasi lalai -
enableFrameAncestors(["'self'"]) - Sebagai contoh membolehkan asal lain membenamkan apl -
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!')
}
Lumpuhkan CSP tanpa UI
Ambil langkah ini untuk menyahdayakan CSP tanpa UI:
- Buka alat pembangunan pelayar semasa menggunakan aplikasi berpandukan model sebagai pengguna dengan kelayakan kemas kini entiti organisasi (Pentadbir Sistem ialah pilihan yang baik).
- Tampal dan laksanakan skrip berikut ke dalam konsol.
- Untuk menyahdayakan CSP, tampal ke dalam 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!')
}