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.
Nota
Pusat pentadbiran Power Platform baharu dan dipertingkatkan kini tersedia secara umum. Kami sedang mengemas kini dokumentasi untuk mencerminkan perubahan ini, jadi semak semula untuk memastikan anda mendapat kemas kini terkini.
Dasar Keselamatan Kandungan (CSP) kini disokong dalam dipacu model dan kanvas Power Apps. Pentadbir boleh mengawal sama ada pengepala CSP dihantar dan sehingga kandungannya. Tetapan berada pada tahap persekitaran, yang bermaksud ia akan digunakan pada semua apl dalam persekitaran sebaik sahaja dihidupkan.
Nota
Dasar keselamatan kandungan hanya terpakai kepada persekitaran yang menggunakan Dataverse.
Setiap komponen nilai pengepala CSP mengawal aset yang boleh dimuat turun dan diterangkan dengan lebih terperinci pada Mozilla Developer Network (MDN). Nilai lalai adalah seperti berikut:
Arahan | Nilai lalai | Boleh suai |
---|---|---|
skrip-src | * 'unsafe-inline' 'unsafe-eval' |
No |
pekerja-src | 'self' blob: |
No |
gaya-src | * 'unsafe-inline' |
No |
fon-src | * data: |
No |
nenek moyang bingkai | 'self' https://*.powerapps.com |
Ya |
Konfigurasi ini menghasilkan CSP script-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com;
lalai. Dalam peta jalan kami, kami mempunyai keupayaan untuk mengubah suai pengepala yang tidak boleh disesuaikan pada masa ini.
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. Kami juga menyokong "mod lapor sahaja" untuk membolehkan susur dengan lebih mudah dalam pengeluaran.
Untuk mengkonfigurasikan CSP:
- Daftar masuk ke pusat pentadbiran Power Platform.
- Dalam anak tetingkap navigasi, pilih Urus, kemudian dalam anak tetingkap Urus , pilih Persekitaran.
- Pada halaman Persekitaran , pilih persekitaran.
- Dalam bar perintah, pilih Tetapan.
- Kembangkan Produk, 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. Anda dikehendaki menentukan titik akhir untuk mendayakannya. Laporan pelanggaran dihantar ke titik akhir ini tanpa mengira sama ada CSP dikuatkuasakan atau tidak (menggunakan mod laporan sahaja jika CSP tidak dikuatkuasakan). 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 apl yang diberikan. Menghidupkan togol ini mengubah tingkah laku apl dalam persekitaran ini untuk mematuhi dasar. Oleh itu, aliran pendayaan yang dicadangkan akan:
- Dikuatkuasakan ke atas persekitaran pembangunan/ujian.
- Mendayakan mod lapor sahaja dalam pengeluaran.
- Dikuatkuasakan dalam pengeluaran sebaik sahaja pelanggaran dilaporkan.
Konfigurasikan arahan
Bahagian ini membolehkan anda mengawal arahan individu dalam dasar ini. Pada masa ini, hanya frame-ancestors
boleh disesuaikan.
Membiarkan arahan lalai dihidupkan menggunakan nilai lalai yang dinyatakan dalam jadual yang ditunjukkan sebelum ini dalam artikel ini. Mematikan togol membolehkan pentadbir menentukan nilai tersuai untuk arahan dan menambahkannya pada nilai lalai. Contoh di bawah menetapkan nilai tersuai untuk frame-ancestors
. Arahan akan ditetapkan dalam frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com
contoh ini, bermakna apl boleh dihoskan dalam asal yang sama, https://*.powerapps.com
,dan https://www.foo.com
https://www.bar.com
, tetapi tidak dalam asal lain. Gunakan butang Tambah untuk menambah entri pada senarai dan ikon Padam untuk mengalih keluarnya.
Konfigurasi biasa
Untuk Microsoft Teams penyepaduan menggunakan aplikasi Dynamics 365, tambahkan yang berikut kepada frame-ancestors
:
https://teams.microsoft.com/
https://teams.cloud.microsoft/
https://msteamstabintegration.dynamics.com/
Untuk itu Dynamics 365 App for Outlook, tambah yang berikut kepada frame-ancestors
:
- Asal halaman utama Outlook Web App anda
https://outlook.office.com
https://outlook.office365.com
Untuk membenamkan Power Apps dalam Power BI laporan, tambahkan yang berikut kepada frame-ancestors
:
https://app.powerbi.com
https://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
Mari kita lihat beberapa contoh konfigurasi CSP.
Contoh 1 - pelaporan dimatikan
Dalam contoh:
- Pelaporan dimatikan.
- Penguatkuasaan berpandukan model didayakan.
-
frame-ancestors
disesuaikan kepadahttps://www.foo.com
danhttps://www.bar.com
-
- Penguatkuasaan kanvas dinyahdayakan.
Pengepala yang berkesan ialah:
- Aplikasi berpandukan model:
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;
- Aplikasi kanvas: Pengepala CSP tidak akan dihantar.
Contoh 2 - pelaporan dihidupkan
Dalam contoh:
- Pelaporan dihidupkan.
- Titik tamat pelaporan ditetapkan untuk
https://www.mysite.com/myreportingendpoint
- Titik tamat pelaporan ditetapkan untuk
- Penguatkuasaan berpandukan model didayakan.
-
frame-ancestors
disimpan sebagai lalai
-
- Penguatkuasaan kanvas dinyahdayakan.
-
frame-ancestors
disesuaikan denganhttps://www.baz.com
-
Nilai CSP yang berkesan ialah:
- Apl dipacu model:
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;
- 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.baz.com; report-uri https://www.mysite.com/myreportingendpoint;
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 di atas, ia ditetapkan kepada
'self'
jikaContentSecurityPolicyConfiguration
tidak ditetapkan). Tetapan ini ditakrifkan 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'; 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
/IsContentSecurityPolicyEnabledForCanvas
dimatikan. 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!')
}