Utilia

Gjenerues i Content Security Policy (CSP)

Krijo një header Content-Security-Policy, etiketë meta dhe version Report-Only me modele, nonce dhe hash SHA-256, dhe audito një politikë ekzistuese.

Nis nga një model i gatshëm

Hostet e Google janë shembuj nga udhëzimet e CSP të Google për etiketën Google. Google i ndryshon herë pas here: kontrollo dokumentacionin aktual dhe hiq ato që nuk i përdor.

Direktivat

Burime të ndara me hapësirë. Lëre një fushë bosh që ta lësh direktivën jashtë (direktivat e marrjes kalojnë atëherë te default-src).

Shtim i shpejtë

Një nonce duhet të jetë një vlerë e re e rastësishme në çdo përgjigje, e gjeneruar nga serveri yt dhe e përsëritur në çdo <script nonce="…">. Një nonce i fiksuar nuk mbron asgjë.

Llogarit hash për një skript ose stil brenda faqes

Hash-i mbulon tekstin e saktë mes etiketave, përfshirë hapësirat dhe ndërprerjet e rreshtit: çdo ndryshim kërkon hash të ri. Edhe trajtuesit e ngjarjeve brenda faqes (onclick=…) kërkojnë 'unsafe-hashes'.

Raporte shkeljesh

Shton report-uri (shfletuesit më të vjetër) dhe report-to me një header Reporting-Endpoints.

Në një etiketë <meta> shfletuesit i shpërfillin frame-ancestors, report-uri, report-to dhe sandbox, dhe Report-Only nuk mbështetet. Vendose etiketën në krye të <head>: vlen vetëm për përmbajtjen që vjen pas saj.

Shqyrtimi i kësaj politike

Vlerëso një politikë ekzistuese

Si ta ndërtosh një politikë

  1. Zgjidh një pikënisje te Nis nga një model i gatshëm: Strikt (nonce + strict-dynamic), Faqe statike e mbyllur, Faqe interneti tipike ose Tipike + Google Analytics / Ads. Redaktuesi hapet me modelin e faqes tipike.
  2. Rregullo Direktivat. Çdo fushë pranon burime të ndara me hapësirë; një fushë e zbrazët e lë direktivën jashtë.
  3. Përdor Shtim i shpejtë për të shtuar një fjalë kyçe te Direktiva e zgjedhur: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Shto një nonce fut një nonce të rastësishëm 128-bit.
  4. Që të lejosh një skript të caktuar brenda faqes pa 'unsafe-inline', ngjite (ose ngjit HTML-në përreth) te Llogarit hash për një skript ose stil brenda faqes dhe kliko Llogarit SHA-256 dhe shto.
  5. Shëno upgrade-insecure-requests nëse disa URL të vjetra përdorin ende http://, dhe opsionalisht shkruaj një URL e pikës së raportimit.
  6. Kopjo Header HTTP, Header Report-Only ose Etiketa HTML . Shqyrtimi i kësaj politike përditësohet teksa shkruan.

Për të audituar një politikë që e ke tashmë, ngjite te Vlerëso një politikë ekzistuese dhe kliko Vlerëso politikën; Ngarko në redaktues e kopjon në fushat e formularit.

Çfarë bën një Content Security Policy

Një CSP i tregon shfletuesit nga cilat origjina mund të ngarkojë një faqe skripte, stile, imazhe, shkronja, kuadro dhe lidhje. Roli i saj kryesor është të kufizojë cross-site scripting (XSS): edhe nëse një sulmues injekton kod në faqen tënde, një politikë e mirë e pengon skriptin e injektuar të ekzekutohet. Ajo kontrollon gjithashtu kush mund ta ngulë faqen tënde në një kuadër (frame-ancestors), ku mund të dërgohen formularët (form-action) dhe te çfarë mund të tregojë <base> (base-uri).

Direktivat e marrjes si img-src ose font-src bien te default-src kur mungojnë. base-uri, form-action dhe frame-ancestors nuk bien te asnjë rezervë, prandaj shqyrtimi i kërkon në mënyrë të shprehur.

Nonce, hash dhe strict-dynamic

Të lejosh hoste (script-src https://cdn.example.com) duket e sigurt, por shpesh anashkalohet: domenet e mëdha strehojnë pika JSONP dhe biblioteka të vjetra që një sulmues mund t’i ripërdorë. Qasja e rekomanduar nga ekipet e sigurisë së shfletuesve është një CSP strikt: çdo <script> legjitim mbart një nonce të gjeneruar nga serveri për çdo përgjigje, ose lejohet nga hash-i i tij, dhe 'strict-dynamic' i lejon ato skripte të besuara të ngarkojnë skriptet që u duhen. Në këtë rast https: dhe 'unsafe-inline' janë vetëm rezervë për shfletuesit shumë të vjetër; ata modernë i shpërfillin.

Një nonce funksionon vetëm nëse ndryshon në çdo përgjigje dhe është i paparashikueshëm. Ai që fut Shto një nonce është një shembull: serveri ose framework-u yt duhet të gjenerojë nonce-n e vet. Një hash mbulon bajtët e saktë të kodit brenda faqes, prandaj riformatimi i skriptit kërkon një hash të ri.

Header, Report-Only dhe etiketa meta

Dërgoje politikën si header përgjigjeje HTTP sa herë që mundesh. Vendose fillimisht si Content-Security-Policy-Report-Only: shfletuesit raportojnë shkeljet (në konsolë dhe te pika jote, nëse e ke caktuar) pa bllokuar asgjë, kështu që i rregullon faqet para se ta zbatosh. Cilësimet e raportimit shtojnë report-uri për shfletuesit më të vjetër dhe report-to me një header Reporting-Endpoints.

Versioni <meta http-equiv> është i përshtatshëm në strehim statik, por shfletuesit i shpërfillin frame-ancestors, report-uri, report-to dhe sandbox në të, dhe nuk ekziston etiketë meta Report-Only. Mjeti i heq këto direktiva nga etiketa dhe të njofton për to.

Çfarë kontrollon shqyrtimi

Lista Shqyrtimi i kësaj politike shënon shkallën e rrezikut (E lartë, E mesme, E ulët, Informacion) për problemet e zakonshme: 'unsafe-inline' ose 'unsafe-eval' te script-src, shenja joker (*) dhe skema të tëra si https:, mungesa e object-src, base-uri, frame-ancestors ose form-action, fjalë kyçe pa thonjëza, direktiva të panjohura ose të përsëritura dhe burime http://. Çdo mesazh e shpjegon arsyen, ndaj mund ta përdorësh edhe për të mësuar si funksionon CSP.

Gjithçka ndodh në shfletuesin tënd: politikat që ngjit nuk dërgohen askund.

Pyetje të shpeshta

A është problem 'unsafe-inline' te style-src?

Është më pak i rrezikshëm se te script-src dhe shumë i zakonshëm, sepse shumë biblioteka vendosin stile brenda faqes. CSS-ja e injektuar mund ta ndryshojë pamjen e faqes ose të nxjerrë të dhëna, prandaj shqyrtimi e shënon me rrezik të ulët.

A janë të plota hostet e Google Analytics?

Janë shembuj nga udhëzimet e CSP të Google për etiketën Google. Google i rregullon me kalimin e kohës dhe mund të duhen domene rajonale; kontrollo dokumentacionin aktual të Google dhe hiq ato që nuk i përdor. Skripti i vogël gtag.js brenda faqes kërkon gjithashtu një nonce ose hash.

Pse politika ime po më bllokon skriptet e mia brenda faqes?

Sapo vendoset script-src pa 'unsafe-inline', çdo <script> brenda faqes dhe çdo atribut onclick= bllokohet. Zhvendose kodin në një skedar, ose shto një nonce ose hash.

A e zëvendëson një CSP pastrimin e të dhënave të përdoruesit?

Jo. Një CSP është një vijë e dytë mbrojtjeje. Vazhdo të pastrosh daljen dhe të validosh hyrjen; politika e kufizon dëmin kur diçka kalon.

A mund të kem disa politika?

Po: nëse një faqe merr disa header-e CSP, një burim duhet t’i plotësojë të gjitha. Ngjit një politikë në herë te vlerësuesi.