Utilia

Generator ng Content Security Policy

Bumuo ng Content-Security-Policy header, meta tag at Report-Only na bersyon gamit ang preset, nonce at SHA-256 hash, at suriin ang umiiral na policy.

Magsimula sa preset

Ang mga Google host ay mga halimbawa mula sa patnubay ng Google sa CSP para sa Google tag. Binabago ito ng Google paminsan-minsan: tingnan ang kasalukuyang dokumentasyon at alisin ang hindi mo ginagamit.

Mga direktiba

Mga source na pinaghihiwalay ng espasyo. Iwanang blangko ang isang field para alisin ang direktiba (ang mga fetch directive ay babalik sa default-src).

Mabilisang dagdag

Ang nonce ay dapat bagong random na halaga sa bawat response, na ginagawa ng iyong server at inuulit sa bawat <script nonce="…">. Ang fixed na nonce ay walang proteksyon.

I-hash ang isang inline script o style

Sakop ng hash ang eksaktong teksto sa pagitan ng mga tag, kasama ang mga espasyo at line break: anumang pagbabago ay nangangailangan ng bagong hash. Ang mga inline event handler (onclick=…) ay nangangailangan din ng 'unsafe-hashes'.

Mga ulat ng paglabag

Nagdadagdag ng report-uri (mas lumang browser) at report-to na may Reporting-Endpoints header.

Sa isang <meta> tag, binabalewala ng browser ang frame-ancestors, report-uri, report-to at sandbox, at hindi sinusuportahan ang Report-Only. Ilagay ang tag sa itaas ng <head>: nakakabit lamang ito sa nilalamang kasunod nito.

Pagsusuri ng policy na ito

Suriin ang umiiral na policy

Paano bumuo ng policy

  1. Pumili ng panimulang punto sa Magsimula sa preset: Mahigpit (nonce + strict-dynamic), Nakalock na static na site, Karaniwang website o Karaniwan + Google Analytics / Ads. Bubukas ang editor gamit ang preset na karaniwang website.
  2. Ayusin ang Mga direktiba. Tumatanggap ang bawat field ng mga source na pinaghihiwalay ng espasyo; kapag blangko ang field, hindi isasama ang direktiba.
  3. Gamitin ang Mabilisang dagdag para magdagdag ng keyword sa napiling Direktiba: 'self', 'none', 'unsafe-inline', 'strict-dynamic', https:, data:… Naglalagay ang Magdagdag ng nonce ng random na 128-bit na nonce.
  4. Para payagan ang isang partikular na inline script nang walang 'unsafe-inline', i-paste ito (o ang HTML sa paligid nito) sa I-hash ang isang inline script o style at i-click ang Kalkulahin ang SHA-256 at idagdag.
  5. Lagyan ng tsek ang upgrade-insecure-requests kung may lumang URL pa na gumagamit ng http://, at opsyonal na maglagay ng URL ng report endpoint.
  6. Kopyahin ang HTTP header, ang Report-Only header o ang HTML tag. Nag-a-update ang Pagsusuri ng policy na ito habang nagta-type ka.

Para suriin ang policy na mayroon ka na, i-paste ito sa Suriin ang umiiral na policy at i-click ang Suriin ang policy; kinokopya ng I-load sa editor ito sa mga field.

Ano ang ginagawa ng Content Security Policy

Sinasabi ng CSP sa browser kung saang origin maaaring mag-load ang isang page ng script, style, larawan, font, frame at koneksyon. Ang pangunahing trabaho nito ay limitahan ang cross-site scripting (XSS): kahit makapasok ang isang attacker ng markup sa iyong page, pinipigilan ng maayos na policy ang na-inject na script na tumakbo. Kinokontrol din nito kung sino ang maaaring mag-frame ng iyong page (frame-ancestors), saan maaaring mag-post ang form (form-action) at kung ano ang maaaring ituro ng <base> (base-uri).

Ang mga fetch directive tulad ng img-src o font-src ay bumabalik sa default-src kapag wala sila. Ang base-uri, form-action at frame-ancestors ay hindi bumabalik, kaya tahasang hinihingi ng pagsusuri ang mga ito.

Nonce, hash at strict-dynamic

Ang pagpayag sa mga host (script-src https://cdn.example.com) ay mukhang ligtas pero madalas na malalampasan: naghahatid ang malalaking domain ng JSONP endpoint at lumang library na maaaring gamitin muli ng attacker. Ang inirerekomendang paraan ng mga browser security team ay isang strict CSP: bawat lehitimong <script> ay may dalang nonce na ginawa ng server para sa bawat response, o pinapayagan ng hash nito, at hinahayaan ng 'strict-dynamic' ang mga pinagkakatiwalaang script na mag-load ng mga script na kailangan nila. Sa setup na iyon, ang https: at 'unsafe-inline' ay fallback lamang para sa napakalumang browser; binabalewala ang mga ito ng modernong browser.

Gumagana lamang ang nonce kung nagbabago ito sa bawat response at hindi mahuhulaan. Ang inilalagay ng Magdagdag ng nonce ay halimbawa lamang: kailangang gumawa ng sarili ang iyong server o framework. Sinasakop ng hash ang eksaktong byte ng inline code, kaya ang muling pag-format ng script ay nangangailangan ng bagong hash.

Header, Report-Only at meta tag

Ipadala ang policy bilang HTTP response header hangga’t kaya. I-deploy muna ito bilang Content-Security-Policy-Report-Only: nag-uulat ang browser ng mga paglabag (sa console, at sa iyong endpoint kung may nakatakda) nang hindi hinaharangan ang anuman, para maayos mo ang iyong page bago ipatupad. Ang report setting ay nagdadagdag ng report-uri para sa lumang browser at report-to na may Reporting-Endpoints header.

Ang bersyong <meta http-equiv> ay maginhawa sa static hosting, pero binabalewala ng browser ang frame-ancestors, report-uri, report-to at sandbox dito, at walang Report-Only meta tag. Inaalis ng tool ang mga direktibang iyon sa tag at sinasabi ito.

Mga madalas itanong

Problema ba ang 'unsafe-inline' sa style-src?

Hindi gaanong mapanganib kaysa sa script-src at karaniwan ito, dahil maraming library ang naglalagay ng inline style. Maaari pa ring sirain ng na-inject na CSS ang page o mag-leak ng data, kaya inililista ito ng pagsusuri bilang mababang severity.

Kumpleto ba ang mga host ng Google Analytics?

Mga halimbawa ang mga ito mula sa patnubay ng Google sa CSP para sa Google tag. Inaayos ito ng Google sa paglipas ng panahon at maaaring kailanganin ang rehiyonal na domain; tingnan ang kasalukuyang dokumentasyon ng Google at alisin ang hindi mo ginagamit. Kailangan din ng inline na gtag.js snippet ng nonce o hash.

Bakit hinaharangan ng policy ko ang sarili kong inline script?

Kapag nakatakda na ang script-src nang walang 'unsafe-inline', hinaharangan ang bawat inline <script> at onclick= attribute. Ilipat ang code sa file, o magdagdag ng nonce o hash.

Pinapalitan ba ng CSP ang pag-escape sa input ng user?

Hindi. Pangalawang linya ng depensa ang CSP. Panatilihin ang pag-escape sa output at pag-validate ng input; nililimitahan ng policy ang pinsala kapag may nakalusot.

Pwede ba akong magkaroon ng maraming policy?

Oo: kung tumatanggap ang isang page ng ilang CSP header, dapat matugunan ng isang resource ang lahat ng ito. I-paste ang isang policy nang paisa-isa sa evaluator.