Polisa bezbednosti sadržaja (en. Content Security Policy) je standard računarske bezbednosti uveden da bi se sprečili Cross-site scripting (XSS), clickjacking i drugi napadi ubrizgavanja koda (en. 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 (en. 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(en. 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.

Ажурирано: 2015. Novi bezbedonosni standardi preporučeni od strane W3C-a, 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 (en. '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 уреди

 
Mapiranje između HTML5/JavaScript i CSP kontrola

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]
    • <script> blokovi,[moo 2]
    • DOM rukovaoci događajima kao HTML atributi(npr. onclick)
    • javascript: linkovi
  • Umetnuti CSS kod
    • <style> blokovi[moo 2]
    • style pripisan HTML elementu
  • Dinamička JavaScript evaluacija koda[moo 3]
    • eval()
    • string argumenti za setTimeout i setInterval 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 уреди

  1. ^ Ovo ponašanje može biti onemogućeno globalno korišćenjem posebnog 'unsafe-inline' izraza
  2. ^ а б Poverljivi umetnuti <script> i <style> blokovi mogu se individualno dodati na CSP belu listu korišćenjem nonce ili hash izraza.
  3. ^ Ovo ponašanje može biti onemogućeno globalno korišćenjem posebnog 'unsafe-eval' izraza
  4. ^ 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 уреди

Reference уреди

  1. ^ Sid Stamm (2009-03-11). „Security/CSP/Spec - MozillaWiki”. wiki.mozilla.org. Приступљено 2011-06-29. „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. 
  2. ^ „State of the draft”. 2011-11-30. Приступљено 2011-12-30. 
  3. ^ а б „Can I use Content Security Policy?”. Fyrd. Приступљено 22. 2. 2013. 
  4. ^ Robert Hansen (2009-06-01). „Mozilla's Content Security Policy”. Архивирано из оригинала 18. 3. 2015. г. Приступљено 2011-06-29. „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. 
  5. ^ „Content Security Policy 1.0”. W3C. Приступљено 2015-11-13. 
  6. ^ „Content Security Policy Level 3”. W3C. Приступљено 2015-11-13. 
  7. ^ „Chrome 25 Beta: Content Security Policy and Shadow DOM”. Google. 14. 1. 2013. Приступљено 22. 2. 2013. 
  8. ^ „Content Security Policy 1.0 lands in Firefox Aurora”. Mozilla Foundation. 29. 5. 2013. Приступљено 16. 6. 2013. 
  9. ^ „RapidRelease/Calendar”. Mozilla Foundation. 29. 5. 2013. Приступљено 16. 6. 2013. 
  10. ^ „Bug 96765 - Implement the "Content-Security-Policy" header”. WebKit. 31. 10. 2012. Приступљено 7. 8. 2015. 
  11. ^ „New Chromium security features, June 2011”. Google. 14. 6. 2011. Приступљено 22. 2. 2013. 
  12. ^ „Introducing Content Security Policy”. Mozilla Foundation. Приступљено 22. 2. 2013. 
  13. ^ „HTML META element”. Content Security Policy Level 2. W3C. Приступљено 2015-11-14. 
  14. ^ „Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox”. Windows Internet Explorer Engineering Team. Приступљено 13. 4. 2014. 
  15. ^ „ngCsp directive”. AngularJS. 
  16. ^ „django-security”. 
  17. ^ „Content security policy”. GitHub. 
  18. ^ а б „Web Application Security Working Group”. Приступљено 2015-11-13. 
  19. ^ „CSP 2015”. XSS Jigsaw. Приступљено 12. 12. 2015. 
  20. ^ „An Abusive Relationship with AngularJS”. Приступљено 5. 1. 2016. 
  21. ^ West, Mike (15. 6. 2012). „An Introduction to Content Security Policy”. HTML5 Rocks. Приступљено 22. 2. 2013. 
  22. ^ http://www.w3.org/TR/CSP/#example-violation-report
  23. ^ Na primer u Django CSP primalac je dostupan u django-security modulu.
  24. ^ „Content Security Policy Builder”. 
  25. ^ „Content Security Policy Reporting”. report-uri.io. Scott Helme. 
  26. ^ „CSP Processing Model”. 2012-11-15. Приступљено 2013-10-06. 
  27. ^ „Subverting CSP policies for browser add-ons (extensions).”. 2013-09-25. Приступљено 2013-10-06. 
  28. ^ „Re: [CSP] Request to amend bookmarklet/extensions sentence in CSP1.1”. 2014-08-03. Приступљено 2015-10-08. 
  29. ^ https://addons.mozilla.org/en-US/firefox/addon/noscript/
  30. ^ http://noscript.net/
  31. ^ https://chrome.google.com/webstore/detail/http-switchboard/mghdpehejfekicfjcdbfofhcmnjhgaag
  32. ^ https://addons.opera.com/en/extensions/details/http-switchboard/

Spoljašnji linkovi уреди