HTTP atsakymo antraštė Content-Security-Policy leidžia svetainei valdyti, kuriuos išteklius vartotojo agentas įkelia tam tikrame puslapyje. Išskyrus ypatingus atvejus, nustatytos strategijos daugiausia apima serverio šaltinio ir scenarijaus galinių taškų nurodymą. Tai padės sustabdyti kelių svetainių scenarijų atakas
Dokumentacija:Hipersaito prisijungimas matomas.
Šiame straipsnyje aprašoma W3C turinio saugos politika arba sutrumpintai CSP. Kaip rodo pavadinimas, ši specifikacija yra susijusi su turinio saugumu ir daugiausia naudojama norint apibrėžti, kokius išteklius puslapis gali įkelti, ir sumažinti XSS atsiradimą.
Ankstyvoji "Chrome" palaikė CSP per "X-WebKit-CSP" atsakymo antraštę, o "Firefox" ir "IE" palaikė "X-Content-Security-Policy", o "Chrome25" ir "Firefox23" pradėjo palaikyti standartinę turinio saugos politiką.
Gali būti renkama slapta informacija apie žiniatinklio programas, pvz., naudotojų vardai, slaptažodžiai, įrenginių pavadinimai ir (arba) slaptos failų vietos Pradedantieji vartotojai gali būti įtikinti pateikti neskelbtiną informaciją, pvz., vartotojo vardus, slaptažodžius, kredito kortelių numerius, socialinio draudimo numerius ir kt
Pirmiausia sukurkime naują projektą ASP.NET MVC, sukurkime naują js scenarijų ir dinamiškai įkelkime Baidu statistikos js kodą taip:
Kaip parodyta aukščiau esančiame paveikslėlyje, galime pamatyti JS scenarijaus kodą, kuris buvo sėkmingai įvestas į trečiąją šalį ("Baidu"), jei trečiosios šalies JS yra kenkėjiško kodo, pvz., slapukų vagystė, turinio keitimas, nuorodų šokinėjimas ir kt.
Kaip sustabdyti nesaugių trečiųjų šalių JS scenarijų įvedimą?
Sprendimo būdas
Atsako galvutėPridėti "Content-Security-Policy"pavyzdžiui:
Direktyva | Instrukcijos vertės pavyzdys | Iliustruoti | default-src | "Savarankiškai" cnd.a.com | Apibrėžkite numatytąją visų tipų išteklių (JS, IMAGE, CSS, WEB FONT, AJAX užklausų, iframes, multimedijos ir kt.) įkėlimo politiką ir naudokite numatytąją tam tikrų tipų ištekliams, jei nėra atskiros apibrėžtos politikos. | scenarijus-src | "Savarankiškai" js.a.com | Apibrėžkite "JavaScript" įkėlimo politiką. | stilius-src | "Savarankiškai" css.a.com | Apibrėžkite stiliaus įkėlimo strategiją. | img-src | "Savarankiškai" img.a.com | Apibrėžkite vaizdų įkėlimo strategiją. | jungtis-src | "Aš" | Ajax, WebSockets ir kt. užklausų įkėlimo politika. Jei neleidžiama, naršyklė imituoja atsakymą, kurio būsena yra 400. | šriftas-src | font.a.com | WebFont įkėlimo strategija. | objektas-src | "Aš" | <object><embed> <applet> Įskiepių, pvz., "flash", įkėlimo strategijos, įvestos žymoms, pvz., arba . | žiniasklaida-src | media.a.com | <audio> <video> HTML daugialypės terpės įkėlimo strategijos, įvestos žymoms, pvz., arba . | rėmas-src | "Aš" | Rėmelių pakrovimo politika. | smėlio dėžė | leisti formas | Įgalinti smėlio dėžę (panašią į "iframe" smėlio dėžės ypatybę) reikalingam ištekliui. | report-uri | /report-uri | Nurodykite naršyklei, kuriuo adresu pateikti žurnalo informaciją, jei prašomas išteklius neleidžiamas pagal strategiją. Specialus: jei norite, kad naršyklė praneštų tik apie žurnalus ir nieko neblokuotų, galite naudoti antraštę Content-Security-Policy-Report-Only. |
Pakeiskime projekto web.config failą, kad pridėtume pasirinktinę atsakymo antraštę taip:
Paleiskite projektą iš naujo, kaip parodyta toliau:
Naršyklė sėkmingai užblokavo trečiųjų šalių js scenarijų įkėlimą:
Atsisakyta įkelti scenarijų "https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319", nes jis pažeidžia šią turinio saugos strategijos direktyvą: "script-src 'self' http://localhost:56888/ ". Atkreipkite dėmesį, kad "script-src-elem" nebuvo aiškiai nustatytas, todėl "script-src" naudojamas kaip atsarginis variantas. (Pabaiga)
|