php - Varför använda hashade CSS-stilmallar och Javascript-filenamn?


När man tittar noggrant på koden för några av de mest populära webbplatserna har jag många gånger sett att CSS- och JavaScript-filnamn är så här,

<link type="text/css" rel="stylesheet" href="//sample.com/css/css__k3sYInttBtNNuJgtPSyqaYy9vVxS4qTZLrfs1ujQB9g__SH_QaIH3bnSp3nOw8n8afhszfHJlxVt51qRlrrrOnk0__fBOuweRojwN82z7EY4v-sVsMwU_P_vZSaU3fmyho6Do.css" media="all" />

<script type="text/javascript" src="//sample.com/js/js__-V23Vc4PVahQcqfyxss_rmNogErBARnPCvI7oPXC0qQ__O-yO5Gg8pRRaefl4d0X9qXUJTOSHq0yazxF-4tJCU_k__fBOuweRojwN82z7EY4v-sVsMwU_P_vZSaU3fmyho6Do.js"></script>

Det verkar som att filnamnen har hashas och jag vet inte varför. Så jag har fått följande problem.

  1. Vad är syftet med att använda denna typ av metod?

  2. Jag har också sett Väldigt komplexa mappnamn. Varför är det så?

  3. Finns det några säkerhetsrisker?

  4. Kan vi dynamiskt ändra fil-/mappnamn med PHP för maximal säkerhet?

Jag är lite ny på det här området.

Svar #1

Du kan anta att dessa fil-/mappnamn inte är vad utvecklarna arbetar med under utvecklingsfasen, utan snarare en artefakt av filernas byggprocess. JavaScript och CSS byggs ofta ihop till en enda fil från flera källfiler, vilket involverar mer eller mindre kompilering/transpilering och paketsteg.

Anledningen till att du skulle vilja att filnamnet innehåller/inkluderar en hash av filen är att detta tvingar en cacheogiltigförklaring varje gång filen ändras. Statiska filer kan cachas av webbläsaren, servern och ett antal andra agenter däremellan. Detta är okej så länge filen inte ändras. Men när en ny version släpps, bör användaren få denna nya version. Om filnamnet på resursen ändras, kommer webbläsaren alltid att begära den nya versionen av filen från servern, istället för att använda en cachad version.

Du bör inte lita på komplexa filnamn som denna som en säkerhets-/auktorisationsfunktion. Filnamnen refereras i appens indexfil och är därför kända av slutanvändaren. Dessutom är säkerhet genom fördunkling generellt en dålig idé.