HTTP yanıt başlığı Content-Security-Policy, sitenin kullanıcı ajanının belirli bir sayfa için hangi kaynakları yüklediğini kontrol etmesini sağlar. Özel durumlar dışında, politikalar kümesi esas olarak sunucunun kaynak ve script uç noktalarını belirtmeyi içerir. Bu, çapraz site betik saldırılarını durdurmaya yardımcı olur
Belge:Bağlantı girişi görünür.
Bu makale, W3C'nin İçerik Güvenlik Politikası'nı (kısaca CSP) açıklamaktadır. Adından da anlaşılacağı gibi, bu spesifikasyon içerik güvenliğiyle ilgilidir ve esas olarak bir sayfanın hangi kaynakları yükleyebileceğini tanımlamak ve XSS oluşumunu azaltmak için kullanılır.
Erken dönem Chrome, X-WebKit-CSP yanıt başlığı üzerinden CSP'yi desteklerken, firefox ve IE X-Content-Security-Policy'yi desteklerken, Chrome25 ve Firefox23 standart Content-Security-Policy (Content-Security-Policy) modelini desteklemeye başladı.
Web uygulamalarıyla ilgili kullanıcı adları, şifreler, makine adları ve/veya hassas dosya konumları gibi hassas bilgiler toplanabilir Yeni başlayan kullanıcılar, kullanıcı adları, şifreler, kredi kartı numaraları, sosyal güvenlik numaraları gibi hassas bilgileri sağlamaya ikna edilebilir
Öncelikle, MVC ASP.NET yeni bir proje oluşturalım, yeni bir js betiği oluşturalım ve Baidu istatistiklerinin js kodunu dinamik olarak şu şekilde yükleyelim:
Yukarıdaki şekilde gösterildiği gibi, üçüncü taraf JS'de çerez çalmak, içerik değiştirmek, bağlantıları atlamak gibi zararlı kodlar varsa, üçüncü taraf bir tarafa (Baidu) başarıyla getirilen JS script kodunu görebiliriz.
Güvensiz üçüncü taraf JS betiklerinin ortaya çıkmasını nasıl durdurabilirim?
Çözüm
Yanıt başlığı"İçerik-Güvenlik-Politikası" eklemesela:
Direktif | Komut değeri örneği | Göstermek | default-src | 'Kendi' cnd.a.com | Tüm kaynak türleri için varsayılan yükleme politikasını (JS, IMAGE, CSS, WEB FONT, AJAX istekleri, iframe'ler, multimedya vb.) tanımlayın ve ayrı tanımlanmış politika yoksa belirli kaynak türleri için varsayılan politikayı kullanın. | script-src | 'Kendi' js.a.com | JavaScript için bir yükleme politikası tanımlayın. | style-src | 'Kendi' css.a.com | Bir stil için yükleme politikası tanımlayın. | img-src | 'Kendi' img.a.com | Görüntüler için bir yükleme politikası tanımlayın. | connect-src | 'benlik' | Ajax, WebSockets vb. talepler için politikaların yüklenmesi. İzin verilmezse, tarayıcı 400 statüsüyle bir yanıtı simüle eder. | font-src | font.a.com | WebFont için yükleme politikası. | object-src | 'benlik' | <object><embed> <applet> Flash gibi eklentiler için yükleme politikaları, , veya . gibi etiketler için tanıtıldı. | media-src | media.a.com | <audio> <video> HTML multimedya için yükleme stratejileri, örneğin veya gibi etiketler için tanıtıldı. | frame-src | 'benlik' | Çerçeveler için yükleme politikası. | kum kutusu | Izin Formları | İstenen kaynak için sandbox'u (bir iframe'in sandbox özelliğine benzer) etkinleştirin. | report-uri | /report-uri | Eğer talep edilen kaynak politika tarafından izin verilmiyorsa, tarayıcıya hangi adrese kayıt bilgilerini göndereceğini söyleyin. Özel: Tarayıcının sadece kayıtları raporlamasını ve hiçbir şeyi engellememesini istiyorsanız, bunun yerine İçerik-Güvenlik Politikası-Sadece Rapor başlığını kullanabilirsiniz. |
Projenin web.config dosyasını özel bir yanıt başlığı eklemek için şu şekilde değiştirelim:
Projeyi aşağıda gösterildiği gibi tekrar çalıştırın:
Tarayıcı, üçüncü taraf js betiklerinin yüklenmesini başarıyla engelledi:
'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' betisini yüklemeyi reddetti çünkü aşağıdaki İçerik Güvenliği Politikası direktifini ihlal ediyor: "script-src 'self' http://localhost:56888/ ". 'script-src-elem' açıkça ayarlanmadığı için 'script-src' yedek olarak kullanılmıştır. (Son)
|