Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İçerik Güvenliği İlkesi (CSP) şu anda model temelli, tuval ve kod uygulamalarında desteklenmektedir. Bu makalede, model temelli ve tuval uygulamaları için CSP'yi yapılandırma açıklanmaktadır. Kod uygulamaları CSP için kod uygulamaları belgelerine bakın. Yöneticiler, CSP üst bilgisinin gönderilip gönderilmediğini ve bir dereceye kadar ne içerdiğini denetleyebilir. Ayarlar ortam düzeyindedir; bu da ortam üzerindeki tüm uygulamalara bir kez açıldıktan sonra uygulanacağı anlamına gelir.
Not
İçerik güvenlik ilkesi yalnızca Dataverse kullanan ortamlar için geçerlidir.
CSP üst bilgi değerinin her bileşeni, indirilebilen varlıkları denetler. Mozilla Geliştirici Ağı (MDN) daha ayrıntılı açıklamalar sağlar. Varsayılan değerler aşağıdaki gibidir:
| Yönerge | Varsayılan değer | Özelleştirilebilir |
|---|---|---|
| script-src | * 'unsafe-inline' 'unsafe-eval' blob: |
Hayır |
| worker-src | 'self' blob: |
Hayır |
| style-src | * 'unsafe-inline' |
Hayır |
| font-src | * data: |
Hayır |
| frame-ancestors | 'self' https://*.powerapps.com |
Evet |
Bu yapılandırma, varsayılan CSP'nin script-src * 'unsafe-inline' 'unsafe-eval' blob: ; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; olmasını sağlar.
Katı mod
Strict CSP geçişi, çoğunlukla joker karakterler veya güvenli olmayan yönergeler (örneğin unsafe-inline) içermeyen bir CSP oluşturur. Strict CSP'yi açtığınızda, yukarıdaki yönergeler bu bölümde ayrıntıları verilen aşağıdaki yönergeler haline gelir.
<platform> gösterimi, platform etki alanlarının ürün tarafından gereklilik olarak sağlandığı anlamına gelir. Ürün büyüdükçe bu bölümdeki etki alanları zaman içinde değişebilir.
| Yönerge | Varsayılan değer (model temelli) | Varsayılan değer (tuval) | Özelleştirilebilir |
|---|---|---|---|
| script-src | 'self' blob: <platform>' |
'self' <platform>' |
Evet |
| worker-src | 'self' blob: |
'self' blob: |
Hayır |
| style-src | 'self' 'unsafe-inline' <platform> |
'self' 'unsafe-inline' <platform> |
Evet |
| font-src | 'self' data: <platform> |
'self' data: <platform> |
Evet |
| frame-ancestors | 'self' https://*.powerapps.com |
'self' https://*.powerapps.com |
Evet |
| img-src | 'self' blob: data: <platform> |
'self' data: <platform> |
Evet |
| connect-src | 'self' blob: data: wss: <platform> |
'self' blob: <platform> |
Evet |
| frame-src | 'self' blob: <platform> |
'self' <platform> |
Evet |
| base-uri | 'none' |
Geçersiz | Hayır |
| form-action | <platform> |
Geçersiz | Evet |
| default-src | 'self' |
'self' |
Hayır |
Ön koşullar
Dynamics 365 Customer Engagement uygulamaları ve diğer model temelli uygulamalar için CSP yalnızca çevrimiçi ortamlarda ve Dynamics 365 Customer Engagement (on-premises), sürüm 9.1 veya sonraki bir sürüme sahip kuruluşlarda kullanılabilir.
CSP'yi yapılandırma
CSP'yi Power Platform yönetim merkezi aracılığıyla değiştirebilir ve yapılandırabilirsiniz. Öncelikle bir geliştirme/test ortamını etkinleştirmek önemlidir çünkü CSP'yi etkinleştirmek, politikanın ihlal edilmesi durumunda senaryoları engellemeye başlayabilir. Yönetim merkezi, üretimde daha kolay artış sağlamak için yalnızca rapor modunu da destekler.
CSP'yi yapılandırmak için şu adımları izleyin:
- Power Platform yönetim merkezinde oturum açın.
- Gezinti bölmesinde Yönet'i seçin. Yönet bölmesinde Ortamlar'ı seçin.
- Ortamlar sayfasında, bir ortam seçin.
- Komut çubuğunda Ayarlar'ı seçin.
- Ürün öğesini genişletin ve Gizlilik + Güvenlik öğesini seçin.
Aşağıdaki resimde ayarların varsayılan durumu gösterilmektedir:
Bildirme
Raporlamayı etkinleştir geçiş düğmesi, model temelli uygulamaların ve tuval uygulamalarının ihlal raporları gönderip göndermediğini denetler. Etkinleştirmek için bir uç nokta belirtin. Uygulama, CSP'nin zorlanıp zorlanmadığına bakılmaksızın ihlal raporlarını bu uç noktasına gönderir. CSP zorlanmazsa uygulama sadece rapor modunu kullanır. Daha fazla bilgi için bkz. belgeleri raporlama.
Zorlama
CSP zorlama, ilkeler üzerinde ayrıntılı denetim sağlamak için model temelli uygulamalar ve tuval uygulamaları için bağımsız olarak denetlenir. Hedeflenen uygulama türünü değiştirmek için model temelli uygulama/tuval uygulaması özetini kullanın.
İçerik güvenliği ilkesi anahtarı, belirli bir uygulama türü için varsayılan ilkenin uygulanmasını açar. Bu geçiş düğmesi açıldığında, bu ortamdaki uygulamaların davranışı ilkeye uyacak şekilde değiştirilir. Bu nedenle, şu önerilen etkinleştirme akışını izleyin:
- İlkeyi geliştirme veya test ortamında zorunlu kılma.
- Üretim ortamında yalnızca rapor modunu etkinleştirin.
- İhlal bildirilmediğinde ilkeyi üretim ortamında uygulamaya koyun.
Yönergeleri yapılandır
Yönergeleri yapılandır bölümü, ilke içindeki tek tek yönergeleri denetlemenize olanak tanır. Şu anda yalnızca frame-ancestors yönergesini özelleştirebilirsiniz.
Varsayılan yönergeyi açık bırakırsanız, tabloda belirtilen varsayılan değeri kullanırsınız. Düğmeyi kapalı konuma getirirseniz yönerge için özel değerler belirtebilir ve bunları varsayılan değere ekleyebilirsiniz. Aşağıdaki örnek, frame-ancestors için özel değerler ayarlar. Bu örnekteki yönerge frame-ancestors: 'self' https://*.powerapps.com https://www.foo.com https://www.bar.com olarak ayarlanmıştır. Bu ayar, uygulamanın aynı kaynakta, https://*.powerapps.com, https://www.foo.com, ve https://www.bar.com içinde barındırılabildiği, ancak diğer kaynaklarda barındırılamadığı anlamına gelir. Listeye giriş eklemek için Ekle düğmesini ve kaldırmak için sil simgesini kullanın.
Ortak yapılandırmalar
Dynamics 365 uygulamasını kullanarak Microsoft Teams entegrasyonu için frame-ancestors öğesine aşağıdakileri ekleyin:
https://teams.microsoft.com/https://teams.cloud.microsoft/https://msteamstabintegration.dynamics.com/
Dynamics 365 App for Outlook için frame-ancestors öğesine aşağıdakileri ekleyin:
- Outlook Web Uygulaması giriş sayfası kaynağınız
https://outlook.office.comhttps://outlook.office365.com
Power Apps'i Power BI raporlarına yerleştirmek için frame-ancestors öğesine aşağıdakileri ekleyin:
https://app.powerbi.comhttps://ms-pbi.pbi.microsoft.com
Dikkat edilmesi gereken önemli hususlar
Varsayılan yönerge kapatılarak boş bir listeyle kaydedildiğinde yönerge tamamen kapatılır ve CSP yanıtı üst bilgisinin bir parçası olarak gönderilmez.
CSP yapılandırma örnekleri
CSP yapılandırmalarına birkaç örnek aşağıda verilmiştir.
Örnek 1 - Raporlama kapatıldı
Örnekte:
- Raporlama kapalıdır.
- Model temelli zorlama etkindir.
-
frame-ancestorsiçinhttps://www.contoso.comvehttps://www.fabrikam.comözelleştirilmiştir.
-
- Tuval zorlaması devre dışı bırakılmıştır.
Geçerli üst bilgiler şunlardır:
- Model temelli uygulamalar:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob: data:; worker-src 'self' blob: data:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors https://www.contoso.com https://www.fabrikam.com; - Tuval uygulamaları: CSP başlığı gönderilmez.
Örnek 2 - Raporlama açıldı
Örnekte:
- Raporlama açıktır.
- Raporlama uç noktası
https://contoso.com/reporting-endpointolarak ayarlanmıştır
- Raporlama uç noktası
- Model temelli zorlama etkindir.
-
frame-ancestorsvarsayılan olarak korunur
-
- Tuval zorlaması devre dışı bırakılmıştır.
-
frame-ancestors,https://www.contoso.comolarak özelleştirilmiştir
-
Geçerli CSP değerleri şunlardır:
- Model temelli uygulamalar:
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval' blob:; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'self' https://*.powerapps.com; report-uri https://contoso.com/reporting-endpoint; - Tuval uygulamaları:
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;
Kuruluş ayarlarını doğrudan değiştirin
Bu kuruluş ayarlarını doğrudan değiştirerek CSP'yi kullanıcı arabirimini kullanmadan yapılandırabilirsiniz:
IsContentSecurityPolicyEnabled, İçerik Güvenliği İlkesi üst bilgisinin model temelli uygulamalarda gönderilip gönderilmeyeceğini denetler.
ContentSecurityPolicyConfiguration, çerçeve alt öğelerinin değerini kontrol eder (önceden görüldüğü gibi,
'self'ayarlanmamışsaContentSecurityPolicyConfigurationolarak ayarlanır). Aşağıdaki yapıya sahip bir JSON nesnesi kullanarak bu ayarı tanımlayın:{ "Frame-Ancestor": { "sources": [ { "source": "foo" }, { "source": "bar" } ] } }. Bu yapılandırmascript-src * 'unsafe-inline' 'unsafe-eval'; worker-src 'self' blob:; style-src * 'unsafe-inline'; font-src * data:; frame-ancestors 'foo' 'bar';olarak çevrilir- (MDN'den) HTTP İçerik Güvenliği İlkesi (CSP) frame-ancestors yönergesi
<frame>,<iframe>,<object>,<embed>veya<applet>kullanarak bir sayfa ekleyebilecek geçerli üst öğeleri belirtir.
- (MDN'den) HTTP İçerik Güvenliği İlkesi (CSP) frame-ancestors yönergesi
IsContentSecurityPolicyEnabledForCanvas, İçerik Güvenliği İlkesi üst bilgisinin tuval uygulamalarında gönderilip gönderilmeyeceğini denetler.
ContentSecurityPolicyConfigurationForCanvas,
ContentSecurityPolicyConfiguration'te açıklanan aynı işlemi kullanarak tuval için politikayı kontrol eder.ContentSecurityPolicyReportUri, raporun kullanılmasının gerekip gerekmediğini denetler. Bu ayar model temelli uygulamalar ve tuval uygulamaları tarafından kullanılır.
IsContentSecurityPolicyEnabled/IsContentSecurityPolicyEnabledForCanvaskapalıysa geçerli dize, yalnızca rapor modunu kullanarak belirtilen uç noktaya ihlal raporları gönderir. Boş dize, raporlamayı devre dışı bırakır. Daha fazla bilgi için bkz. belgeleri raporlama.
Kullanıcı arabirimi olmadan CSP'yi yapılandırma
Özellikle yerinde yapılandırmalar gibi Power Platform yönetim merkezinde bulunmayan ortamlarda yöneticiler, ayarları doğrudan değiştirmek için komut dosyalarını kullanarak CSP'yi yapılandırmak isteyebilir.
Kullanıcı arabirimi olmadan CSP'yi etkinleştirme
Kullanıcı arabirimi olmadan CSP'yi etkinleştirmek için şu adımları uygulayın:
- Model temelli uygulamayı kuruluş varlığı güncelleştirme ayrıcalıklarına sahip bir kullanıcı olarak kullanırken tarayıcı geliştirme araçlarını açın (Sistem Yöneticisi iyi bir seçenektir).
- Aşağıdaki komut dosyasını konsola yapıştırın ve yürütün.
- CSP'yi etkinleştirmek için varsayılan yapılandırmayı geçirin -
enableFrameAncestors(["'self'"]) - Uygulamayı eklemek için diğer kökenleri etkinleştirmenin bir örneği olarak -
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!')
}
Kullanıcı arabirimi olmadan CSP'yi devre dışı bırak
Kullanıcı arabirimi olmadan CSP'yi devre dışı bırakmak için şu adımları uygulayın:
- Model temelli uygulamayı kuruluş varlığı güncelleştirme ayrıcalıklarına sahip bir kullanıcı olarak kullanırken tarayıcı geliştirme araçlarını açın (Sistem Yöneticisi iyi bir seçenektir).
- Aşağıdaki komut dosyasını konsola yapıştırın ve yürütün.
- CSP'yi devre dışı bırakmak için
disableCSP()ifadesini konsola yapıştırın
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!')
}