Teknobench

Generatur tal-Hash SRI

Iġġenera hashes Subresource Integrity (SRI) sha384 għal fajl JavaScript jew CSS u ikkopja l-attributi integrity u crossorigin lesti, lokalment.

Waħħal il-kontenut tal-fajl jew iftaħ il-fajl innifsu: din l-għodda ma tniżżilx URLs. Il-qari ta’ script minn sit ieħor ikun jeħtieġ li dak is-server jippermettih (CORS) jew server tagħna biex jgħabbih għalik, u xejn li tagħmel hash tiegħu hawn ma jħalli l-brawżer tiegħek. Agħmel hash tal-fajl eżatt li se tservi.

Hash

It-test jiġi hashjat bħala UTF-8. Il-brawżers jibdlu t-tmiem tal-linja ta’ Windows (CRLF) f’LF fit-test imwaħħal, u byte wieħed mibdul ibiddel il-hash: iftaħ il-fajl innifsu meta tkun fid-dubju.

Algoritmi

L-URL jinkiteb biss fis-snippet, qatt ma jintalab. Ħallih vojt biex tuża l-isem tal-fajl.

Kif tiġġenera hash SRI

  1. Taħt Hash, agħżel Kodiċi mwaħħal jew Fajls.
  2. Waħħal il-kontenut eżatt tal-script jew tal-stylesheet f’Kontenut tal-script jew tal-stylesheet u agħfas Iġġenera hash SRI, jew waqqa’ fajl wieħed jew aktar .js u .css fiż-żona tat-twaqqigħ. L-hashes jiġu aġġornati hekk kif tikteb.
  3. Żomm SHA-384 (rakkomandat) immarkat, jew żid SHA-256 u SHA-512. Kull algoritmu mmarkat iżid token wieħed mal-valur.
  4. Agħżel it-Tag (awtomatiku mill-isem tal-fajl, <script>, <script type="module"> jew <link rel="stylesheet">), ikteb l-URL tar-riżorsa għas-snippet (fakultattiv) u agħżel il-mod crossorigin.
  5. Ikkopja l-valur integrity jew it-tag kollu.
  6. Biex tiċċekkja tag li diġà tuża, waħħal il-valur tiegħu jew it-tag kollu f’Iċċekkja valur integrity eżistenti (fakultattiv).

X’jagħmel is-Subresource Integrity

Meta paġna tgħabbi script minn CDN, il-brawżer jafda kulma jibgħat dak is-server. Jekk is-CDN jiġi kompromess jew il-fajl jinbidel, il-kodiċi modifikat jaħdem b’aċċess sħiħ għall-paġna tiegħek. Is-Subresource Integrity (W3C SRI) issakkar dan it-toqba: tippubblika l-hash mistenni tal-fajl fl-attribut integrity, il-brawżer jagħmel hash ta’ dak li jniżżel, u jirrifjuta li jħaddem l-script jew japplika l-istylesheet jekk it-tnejn ma jaqblux.

<script src="https://cdn.example.com/lib.min.js"
        integrity="sha384-H8BRh8j48O9oYatfu5AZzq6A9RINhZO5H16dQZngK7T62em8MUt1FLm52t+eX6xO"
        crossorigin="anonymous"></script>

Il-valur huwa l-isem tal-algoritmu, dash u d-digest Base64 tal-bytes tal-fajl. Dak l-eżempju huwa l-hash ta’ alert('Hello, world.'); mill-ispeċifikazzjoni SRI. Meta jiġu elenkati diversi hashes, il-brawżers iħarsu biss lejn l-aqwa algoritmu preżenti u jaċċettaw il-fajl jekk xi hash ta’ dak l-algoritmu jaqbel. Hekk sit jista’ jelenka żewġ verżjonijiet ta’ fajl waqt rollout.

Għaliex crossorigin huwa meħtieġ

Għal fajl fuq origin ieħor, il-brawżer jista’ jiċċekkja l-integrità tiegħu biss jekk it-tweġiba tinġab fil-mod CORS, għalhekk it-tag jeħtieġ attribut crossorigin u s-server irid iwieġeb b’header Access-Control-Allow-Origin. Uża anonymous (mingħajr cookies) għal CDNs pubbliċi; use-credentials huwa għal riżorsi privati rari. Mingħajr CORS il-brawżer jibblokka l-fajl minflok jgħabbih mingħajr kontroll.

Għaliex din l-għodda ma tgħabbix URLs

Din l-għodda tagħmel hash biss ta’ kodiċi li twaħħal jew fajls li tiftaħ. It-tniżżil ta’ script mill-URL tiegħu ġewwa l-paġna jaħdem biss meta dak is-server jippermetti qari cross-origin, u li tevita dan ikun jeħtieġ server li jġib il-fajl għalik, li jara wkoll dak li tagħmel hash tiegħu. Kollox hawn jaħdem fil-brawżer tiegħek. L-aktar metodu sempliċi huwa li tniżżel il-fajl eżatt li se tirreferi (l-istess verżjoni u l-istess build minifikata) u tiftaħu hawn.

Mistoqsijiet frekwenti

Liema algoritmu għandi nuża?

SHA-384 huwa l-għażla tas-soltu u dak li l-biċċa l-kbira tas-CDNs jippubblikaw. SHA-256 u SHA-512 huma wkoll appoġġjati mill-brawżers moderni kollha. MD5 u SHA-1 mhumiex permessi f’SRI.

Il-hash tiegħi huwa korrett iżda l-brawżer xorta jibblokka l-fajl. Għaliex?

Iċċekkja li s-server jibgħat Access-Control-Allow-Origin u li t-tag għandu crossorigin. Kun żgur ukoll li s-CDN iservi l-istess bytes: verżjoni differenti, minifier awtomatiku jew qatgħa tas-linja finali nieqsa kollha jibdlu l-hash.

Għaliex il-kodiċi mwaħħal jagħti hash differenti mill-fajl?

Il-brawżers jikkonvertu t-tmiem tal-linja ta’ Windows (CRLF) għal LF fl-oqsma tat-test, u editur jista’ jżid jew jneħħi byte order mark jew qatgħa tas-linja finali. Iftaħ il-fajl innifsu biex tagħmel hash tal-bytes eżatti tiegħu.

Neħtieġ SRI għal fajls fuq id-dominju tiegħi stess?

Jipproteġi minn bidliet magħmula wara li kkalkulajt il-hash, għalhekk huwa l-aktar importanti għal hosts ta’ terzi persuni. Għall-fajls tiegħek stess, bundler li jiġġenera l-hashes waqt il-build normalment huwa aktar faċli.

SRI jaħdem għal immaġini jew fonts?

L-attribut integrity huwa appoġġjat fuq <script> u <link rel="stylesheet"> (u fuq <link rel="preload"> jew modulepreload għal dawn). L-immaġini u l-fonts ma jistgħux jużawh.