bitlvl
SR

Analizator HTTP bezbednosnih zaglavlja i CSP-a

Pokrenite curl -sI https://vas.sajt/ i nalepite izlaz, ili nalepite samo CSP. Svako zaglavlje je objašnjeno, bezbednosna zaglavlja su ocenjena sa ispravkom za svaki propust, a Content-Security-Policy je proveren onako kako bi ga napadač čitao. Ova stranica ništa ne preuzima; samo čita ono što nalepite.

Svoja zaglavlja dobijate sa: curl -sI https://example.com/ (dodajte -L da pratite preusmerenja)

Rezultati i poruke ovog alata prikazuju se na engleskom.

Kako izgleda dobar skup zaglavlja

strict-transport-security: max-age=31536000; includeSubDomains; preload
content-security-policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; object-src 'none'; base-uri 'none'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
x-content-type-options: nosniff
x-frame-options: DENY
referrer-policy: strict-origin-when-cross-origin
permissions-policy: camera=(), microphone=(), geolocation=(), payment=()
cross-origin-opener-policy: same-origin
cross-origin-resource-policy: same-origin

To je ono što ovaj sajt šalje. Za aplikaciju sa inline skriptama CSP prelazi na nonce vrednosti: script-src 'nonce-<nasumično po odgovoru>' 'strict-dynamic', što je i strože i lakše za održavanje od liste dozvoljenih hostova.

Kako razmišlja CSP procena

CSP postoji da ograniči šta napadač može da uradi kad već pronađe tačku ubacivanja. Zato procena pita: za jedan ubačeni string, mogu li skripte da se izvrše? 'unsafe-inline' bez nonce vrednosti kaže da. Džoker ili izvor po šemi (*, https:, data:) kaže da. Host koji servira skripte koje napadač može da bira (javni CDN-ovi sa starim AngularJS-om, JSONP endpointi na googleapis.com, storage bucketi) kaže da, zbog čega je dugačka lista popularnih CDN-ova slabija nego što izgleda. Nedostajući object-src i base-uri su dve direktive koje ljudi zaboravljaju, a koje ponovo otvaraju vrata. Preostale direktive (frame-ancestors, form-action, default-src) bitne su za clickjacking i izvlačenje podataka, a ne za izvršavanje skripti, pa se ocenjuju niže.

Gde se postavljaju zaglavlja

  • nginx: add_header Name "value" always; — imajte na umu da add_header unutar location bloka poništava sva zaglavlja na nivou servera (proverite pomoću nginx location testera).
  • Apache: Header always set Name "value" u vhostu ili .htaccess (mod_headers).
  • Cloudflare: HSTS pod SSL/TLS → Edge Certificates; ostala zaglavlja preko Transform Rules → Modify Response Header, što radi i za origin servere koje ne možete da menjate.
  • Aplikacioni frejmvorci: helmet (Node), secure_headers (Rails), django-csp, Laravel middleware — oni generišu i nonce po odgovoru.

Bezbedno uvođenje CSP-a

  1. Šaljite ga kao Content-Security-Policy-Report-Only sa report-to endpointom i nedelju dana pratite izveštaje.
  2. Ispravite stvarna kršenja (inline handleri, vidžeti trećih strana), zanemarite šum od ekstenzija pregledača.
  3. Promenite ime zaglavlja u Content-Security-Policy. Zadržite report-only za testiranje sledeće izmene.

Pitanja

Koja zaglavlja su najvažnija?

Za sajt sa bilo kakvom interakcijom korisnika: prvo Content-Security-Policy, pa Strict-Transport-Security i X-Content-Type-Options. Politike uokviravanja i referrera je jeftino dodati. Ostalo je higijena: sakrijte verzije, označite kolačiće, uklonite zastarela zaglavlja.

Zašto je moj CSP ocenjen kao slab iako navodi samo pouzdane hostove?

Zato što poverenje nije pitanje; pitanje je da li bilo koja skripta na tim hostovima može da se natera da izvrši napadačev kod. Javni CDN-ovi hostuju hiljade verzija biblioteka, neke sa poznatim gedžetima (AngularJS šabloni, JSONP callbackovi). Politika zasnovana na nonce vrednostima sa strict-dynamic nema taj problem, i ova stranica je ocenjuje kao najjaču postavku.

Da li je X-XSS-Protection još koristan?

Ne. Chrome je uklonio XSS auditor 2019, Edge 2018; Firefox ga nikad nije imao. Zaglavlje je bezopasno kao „0“, a bilo je štetno kao „1; mode=block“ u starim pregledačima. Uklonite ga i koristite CSP.

Kako da dobijem zaglavlja stranice koja preusmerava?

curl -sIL https://example.com/ ispisuje svaki odgovor u lancu. Nalepite sve; poslednji odgovor se ocenjuje, a preusmerenja se navode. Proverite da http:// preusmerava na https:// u jednom skoku.

Da li se ocena poklapa sa securityheaders.com?

Otprilike: oba broje istih šest osnovnih zaglavlja. Ova stranica dodatno procenjuje sadržaj CSP-a, a ne samo njegovo prisustvo, i oduzima za curenja i zastarela zaglavlja, pa sajt sa slabim CSP-om ovde dobija nižu ocenu.