Polisa bezbednosti sadržaja
Polisa bezbednosti sadržaja (engl. Content Security Policy) je standard računarske bezbednosti uveden da bi se sprečilo umetanje skriptova (engl. Cross-site scripting, XSS), clickjacking i drugi napadi ubrizgavanja koda (engl. code injection) koji proizilaze iz izvršavanja zlonamernog sadržaja u okviru pouzdane veb-stranice.[1] To je glavna preporuka od strane W3C grupe za bezbednost veb-aplikacija,[2] široko podržana od strane modernih veb-pregledača.[3] Polisa bezbednosti sadržaja daje standardni metod vlasnicima veb-sajtova da se izjasne o dozvoljenom poreklu sadržaja za koji bi pregledačima bilo dozvoljeno da učitaju na taj veb-sajt — pokriveni tipovi su JavaScript, CSS, HTML okviri, veb vorkeri, Veb-tipografija, slike, ugnježdeni objekti kao što su Java apleti, ActiveX, audio i video fajlovi, i druga HTML5 svojstva.
Status
[уреди | уреди извор]Standard, originalno nazvan "Ograničenja sadržaja", bio je predložen od strane Roberta Hansena u 2004. godini,[4] i prvi put realizovan u Firefox 4 i vrlo brzo usvojen i od strane ostalih pregledača. Prva verzija ovog standarda objavljena je 2012. godine kao glavna preporuka od strane W3C[5] a ubrzo je objavljena i verzija drugog nivoa 2014. godine. Ажурирано: 2015.[ажурирање] nacrt nivoa 3 se razvija sa novim karakteristikama koje bi bile brzo usvojene od strane veb-pregledača.[6]
Naredni nazivi zaglavlja se koriste kao deo eksperimenalne implementacije Polise bezbednosti sadržaja (CSP):[3]
Content-Security-Policy
— standardno ime zaglavlja, predloženo iz W3C dokumenta. Google Chrome podržava ovo od svoje verzije 25.[7] Firefox daje podršku od verzije 23,[8] objavljene 6. avgusta, 2013.[9] WebKit podržava od svoje verzije 528.[10]X-WebKit-CSP
— zastarelo; eksperimentalno zaglavlje, uvedeno u Google Chrome i druge pregledače zasnovane na WebKit-u (Safari) u 2011.[11]X-Content-Security-Policy
— zastarelo; eksperimentalno zaglavlje, uvedeno u pregledače zasnovane na Gecko 2 (Firefox 4 to Firefox 22, Thunderbird 3.3, SeaMonkey 2.1).[12]
Veb-sajt može deklarisati različita CSP zaglavlja, kao i mešati ona koja se izvršavaju i ona koja služe samo za izveštavanje. Pregledač će obrađivati svako zaglavlje posebno.
Takođe, CSP može biti isporučen i bez HTML koda, korišćenjem HTML META elementa, samo što će, u ovom slučaju, njegova efikasnost biti ograničena.[13]
Podrška za sandbox direktivu je takođe dostupna u Internet Explorer 10 i Internet Explorer 11 koji koriste eksperimentalno X-Content-Security-Policy
zaglavlje.[14]
Jedan broj programskih okvira (engl. frameworks) podržava CSP, kao na primer AngularJS[15] i Django.[16] Uputstva za Ruby on Rails su postavljena od strane GitHub-a.[17] Podrška za veb-programske okvire je, međutim, potrebna samo ako CSP sadržaj na neki način zavisi od statusa veb-aplikacije - kao što je korišćenje jednokratno generisanih kodova (engl. nonce
). Drugim rečima, CSP je češće statički i može biti dostavljen od strane viših slojeva veb aplikacije, npr. veb servera.
Od 2015. godine su preporučeni od strane W3C organizacije novi bezbednosni standardi, najvećim delom komplementarni sa CSP:[18]
- Sub-Resource Integrity (SRI), osigurava dobro poznate, pouzdane fajl resurse (obično JavaScript, CSS) da se učitavaju sa drugih servera (obično CDNs)
- Mixed Content, pojašnjava politiku namenjenu pregledačima na stranicama koje se učitavaju putem HTTPS i HTTP
- Upgrade Insecure Requests, nagoveštava pregledačima kako da rukuju nasleđenim linkovima na stranicama migriranim na HTTPS
- Credential Management, objedninjeni JavaScript API za pristup korisničkim akreditacijama, sa ciljem da olakša složene prijavne šeme
- Referrer Policy, CSP nadogradnja koja upućuje pregledač na generaciju Referer zaglavlja.[18]
U decembru 2015. godine objavljen je metod zaobilaženja jednokratno generisanih kodova (engl. 'nonce'
) sa bele liste.[19] Drugi metod upotpunjuje belu listu CSP-a kako bi se eksploatisale stare i ranjive verzije JavaScript biblioteka smeštene na istim serverima (najčešće sa CDN servera).[20]
Način rada
[уреди | уреди извор]Ukoliko se Content-Security-Policy
zaglavlje nalazi u odgovoru servera, odgovarajući klijent sprovodi deklarativnu politiku bele liste. Jedan primer cilja politike je strožiji način izvršavanja JavaScript-a u cilju sprečavanja određenih cross-site scripting napada. U praksi, ovo znači da su brojne funkcionalosti onemogućene:
- Umetnuti JavaScript kod[moo 1]
- Umetnuti CSS kod
<style>
blokovi[moo 2]style
pripisan HTML elementu
- Dinamička JavaScript evaluacija koda[moo 3]
eval()
- string argumenti za
setTimeout
isetInterval
funkcije new Function()
konstruktor
- Dinamički CSS izrazi
CSSStyleSheet.insertRule()
metod
Dok upotreba CSP-a u novoj aplikaciji može biti prilično jednostavna, posebno sa CSP-kompatibilnim JavaScript okvirima, [moo 4] postojeće aplikacije mogu da zahtevaju refaktorisanje - relaksiranje politike. U praksi se za CSP-kompatiblne aplikacije preporučuje da se kod učita iz spoljašnjih izvornih fajlova (<script src>
), parsiranje JSON umesto evaluacije i korišćenje EventTarget.addEventListener()
da bi se podesili rukovaoci događajima.[21]
Naglasiti
[уреди | уреди извор]- ^ Ovo ponašanje može biti onemogućeno globalno korišćenjem posebnog
'unsafe-inline'
izraza - ^ а б Poverljivi umetnuti
<script>
i<style>
blokovi mogu se individualno dodati na CSP belu listu korišćenjemnonce
ilihash
izraza. - ^ Ovo ponašanje može biti onemogućeno globalno korišćenjem posebnog
'unsafe-eval'
izraza - ^ Na primer, AngularJS zahteva da samo jedan fleg za inicijalizaciju bude postavljen na CSP-kompatibilni mod —
<html ng-app ng-csp>
Izveštaj
[уреди | уреди извор]Kada god zatevani resurs ili izvršavanje skripta prekrši politiku, pregledač će "ispaliti" POST
zahtev za vrednošu koja je navedena u report-uri
[22] i koja sadrži detalje prekršaja.
CSP izveštaji su standardne JSON strukture i mogu biti prikupljene bilo preko sopstvenog aplikacijskog API-ja[23] ili javnim CSP primaocima izveštaja.[24][25]
Dodaci pregledača i proširenja za izuzeća
[уреди | уреди извор]U skladu sa CSP modelom obrade,[26]CPS ne bi trebalo da utiče na rad dodataka ili proširanja pregledača instaliranih od strane korisnika. Ova CPS funkcionalnost omogućava svakom dodatku ili proširanju da umetne skript u veb-sajtove, bez obzira na izvor nastajanja tog skripta, i na taj način bude izuzet iz CPS politika. Radna grupa za bezbednost veb-aplikacija W3C-a razmatra da li bi takav skript mogao da bude deo Trusted Computing Base implementacije veb-pregledača. Međutim, u radnoj grupi su predstavnici Cox Communications-a tvrdili da bi ovo izuzimanje moglo biti potencijalni sigurnosni propust koji bi mogao da bude iskorišćen od strane zlonamernih ili kompromitovanih dodataka ili proširenja.[27][28]
Pogledati ostalo
[уреди | уреди извор]- NoScript — anti-XSS zaštita i Application Boundaries Enforcer (ABE), proširenje za Firefox[29][30]
- HTTP Switchboard — korisnički definisana CSP pravila, proširenje za Google Chrome[31] i Opera[32]
- HTTP Strict Transport Security
- HTTP Public Key Pinning
Reference
[уреди | уреди извор]- ^ Stamm, Sid (11. 3. 2009). „Security/CSP/Spec - MozillaWiki”. wiki.mozilla.org. Приступљено 29. 6. 2011. „Content Security Policy is intended to help web designers or server administrators specify how content interacts on their web sites. It helps mitigate and detect types of attacks such as XSS and data injection.”
- ^ „State of the draft”. 30. 11. 2011. Приступљено 30. 12. 2011.
- ^ а б „Can I use Content Security Policy?”. Fyrd. Приступљено 22. 2. 2013.
- ^ Hansen, Robert (1. 6. 2009). „Mozilla's Content Security Policy”. Архивирано из оригинала 18. 3. 2015. г. Приступљено 29. 6. 2011. „Content Restrictions - a way for websites to tell the browser to raise their security on pages where the site knows the content is user submitted and therefore potentially dangerous.”
- ^ „Content Security Policy 1.0”. W3C. Приступљено 13. 11. 2015.
- ^ „Content Security Policy Level 3”. W3C. Приступљено 13. 11. 2015.
- ^ „Chrome 25 Beta: Content Security Policy and Shadow DOM”. Google. 14. 1. 2013. Приступљено 22. 2. 2013.
- ^ „Content Security Policy 1.0 lands in Firefox Aurora”. Mozilla Foundation. 29. 5. 2013. Приступљено 16. 6. 2013.
- ^ „RapidRelease/Calendar”. Mozilla Foundation. 29. 5. 2013. Приступљено 16. 6. 2013.
- ^ „Bug 96765 - Implement the "Content-Security-Policy" header”. WebKit. 31. 10. 2012. Приступљено 7. 8. 2015.
- ^ „New Chromium security features, June 2011”. Google. 14. 6. 2011. Приступљено 22. 2. 2013.
- ^ „Introducing Content Security Policy”. Mozilla Foundation. Приступљено 22. 2. 2013.
- ^ „HTML META element”. Content Security Policy Level 2. W3C. Приступљено 14. 11. 2015.
- ^ „Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox”. Windows Internet Explorer Engineering Team. Приступљено 13. 4. 2014.
- ^ „ngCsp directive”. AngularJS.
- ^ „django-security”.
- ^ „Content security policy”. GitHub.
- ^ а б „Web Application Security Working Group”. Приступљено 13. 11. 2015.
- ^ „CSP 2015”. XSS Jigsaw. Архивирано из оригинала 20. 12. 2015. г. Приступљено 12. 12. 2015.
- ^ „An Abusive Relationship with AngularJS”. Приступљено 5. 1. 2016.
- ^ West, Mike (15. 6. 2012). „An Introduction to Content Security Policy”. HTML5 Rocks. Приступљено 22. 2. 2013.
- ^ Content Security Policy Level 2
- ^ Na primer u Django CSP primalac je dostupan u django-security modulu.
- ^ „Content Security Policy Builder”. Архивирано из оригинала 27. 09. 2013. г. Приступљено 22. 07. 2016.
- ^ „Content Security Policy Reporting”. report-uri.io. Scott Helme.
- ^ „CSP Processing Model”. 15. 11. 2012. Приступљено 6. 10. 2013.
- ^ „Subverting CSP policies for browser add-ons (extensions).”. 25. 9. 2013. Приступљено 6. 10. 2013.
- ^ „Re: [CSP] Request to amend bookmarklet/extensions sentence in CSP1.1”. 3. 8. 2014. Приступљено 8. 10. 2015.
- ^ NoScript Security Suite :: Add-ons for Firefox
- ^ NoScript - JavaScript/Java/Flash blocker for a safer Firefox experience! - what is it? - InformAction
- ^ „Архивирана копија”. Архивирано из оригинала 17. 08. 2014. г. Приступљено 22. 07. 2016.
- ^ HTTP Switchboard extension - Opera add-ons
Spoljašne veze
[уреди | уреди извор]- Content Security Policy W3C Working Draft
- Content Security Policy Builder Архивирано на сајту Wayback Machine (27. септембар 2013)
- CSP Tester (browser extension)
- Secure Coding Guidelines for Content Security Policy
- CSP Violation Reporting
- CSP Deployment Survey Архивирано на сајту Wayback Machine (28. септембар 2016)