„Spatie“/„Laravel-CSP“ paketas tvarko dinaminius nonces, skirtus inline scenarijams ir stiliams, sukuriant unikalią NONCE vertę pagal HTTP užklausą ir automatiškai įšvirkščiant ją į turinio saugumo politikos (CSP) antraštes ir atitinkamus HTML elementus. Čia yra išsamus paaiškinimas, kaip jis veikia:
Nonce Generation
- Pakuotėje naudojama necegeneratoriaus sąsaja, kad dinamiškai generuotų nonCe eilutę kiekvienai užklausai.
- Pagal numatytuosius nustatymus galite įdiegti savo „NonCe Generator“ klasę, kuri grąžina unikalią atsitiktinę eilutę. Pvz., Galite integruoti su „Laravel Vite NonCe“ sistema, sukurdami tokią klasę kaip „LaravelVitenCenerator“, kuri naudoja „Vite :: cspnonce ()“, kad „Vite“ sukurtų „NonCe“, kurį sukuria „Vite“ turto kompiliavimo metu.
- Nurodote savo „NonCe Generator“ klasę „nonce_generator“ klaviše „CSP.PHP“ konfigūracijos failas.
Nonces taikymas politikoje
-Savo CSP politikos klasėje (kuri paprastai pratęsia „spatie \ csp \ politiką \ basic“), jūs naudojate tokius metodus kaip „addnonceFordirctive (Direktyvos: scenarijus)“ ir „AddNonceFordirctive (Directive :: Style)“, kad nurodytumėte, kad „Nonce“ turėtų būti pridedamas prie „scenarijaus-Src` ir` stiliaus-Src “nurodymų.
- Tai užtikrina, kad sugeneruotas nonCe yra įtrauktas į šių direktyvų CSP antraštę, leidžiančią įtraukti scenarijus ir stilius, kurie turi atitikimą „NonCe“ atributą vykdymui.
tarpinė programinė įranga ir antraštės injekcija
- Pakuotėje pateikiama tarpinė programinė įranga (`spatie \ csp \ addcSpheaders`), kurią registruojate savo HTTP branduolyje arba konkrečiuose maršrutuose.
- Ši tarpinė programinė įranga sukuria užklausos NONCE, taiko CSP politiką, įskaitant „NonCe“ direktyvas, ir prideda atitinkamas CSP antraštes prie HTTP atsakymo.
- Nonce vertė yra nuosekli užklausoje, todėl galite naudoti „Blade“ direktyvas, tokias kaip „@nonCe“, arba pagalbinės funkcijos, tokios kaip „csp_nonce ()“, savo nuomonėse, kad pateiktumėte „NonCe“ atributą į „Inline“ arba „` `` `` `“.
integracija su „Laravel Vite“
- Kai naudojate „Laravel Vite“, paketas gali panaudoti „Vite“ įmontuotą „NonCe“ generavimą per „Vite :: cspnonce ()“.
- Galite sukurti pasirinktinę „NonCe“ generatoriaus klasę, kuri grąžina „NonCe“ iš „Vite“, užtikrindami, kad CSP antraštėje naudojamas nonce atitiktų „NonCe“, taikomą „Vite“ injekuotoms scenarijams ir stiliams.
- Tai išvengia CSP pažeidimų, kuriuos sukelia ne CEE neatitikimai, ir leidžia saugius įterptinius scenarijus/stilius „Vite“ varomose „Laravel“ programose.
Papildomos funkcijos
- Paketas taip pat palaiko CSP politikos pateikimą kaip meta žymas (per „@cspmetatag“ „Blade“ direktyvą), kai negalite valdyti HTTP antraščių.
- Jis palaiko tik ataskaitų režimą, skirtą išbandyti CSP politiką, neužblokuojant išteklių.
- Galite pritaikyti įvairių aplinkų politiką (plėtrą ir gamybą).
Praktinės pastabos
- Turite įsitikinti, kad „NonCe“ yra išvestis į „Inline Scripts“/„Styles“, naudodami „Blade“@nonCe “direktyvą arba„ csp_nonce () `pagalbininką; Priešingu atveju naršyklė juos užblokuos.
- Naršyklės, tokios kaip „Chrome“, gali ištraukti nonce atributus iš scenarijaus žymų, įšvirkštų dinamiškai, todėl atsargiai naudokite „NonCe“ ir išbandykite elgesį.
- „NonCe“ yra atsitiktinė eilutė, sugeneruota kiekvienai užklausai, todėl „Inline Scripts“/„Styles“ yra saugesni, leidžiant atlikti tik tuos, kurie turi teisingą „NonCe“.
Apibendrinant galima pasakyti, kad „Spatie“/„Laravel-CSP“ dinamiškai generuoja ne CEE užklausą per konfigūruojamą nonCe generatorių, įtraukia šį „NonCe“ į scenarijų ir stilių CSP antraštes ir pateikia ašmenų direktyvas ir pagalbininkus, kad būtų galima išvesti nonce atributą į vidinius elementus. Ši integracija, ypač naudojant „Laravel Vite“, užtikrina, kad CSP saugiai leidžia saugiai leidžiančius scenarijus ir stilius, nenaudojant nesaugios linijos, gerindami programų saugumą, išlaikant funkcionalumą [1] [2] [3] [4] [6].
Citatos:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-nix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-mpty-when-sing-spatie-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nce-in-inline-- style-and-script injected-by-vue-in-a-laravel ir ir
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide- what- iis-and-how-to-enable-it/t/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src