La seguretat de les aplicacions web és un desafiament constant per a qualsevol organització que manegi dades crítiques. Un dels vectors d'atac més recurrents és la injecció de scripts maliciosos (XSS), que pot comprometre sessions d'usuari, robar informació sensible o redirigir a llocs fraudulents. Per mitigar aquest risc, una de les eines més eficaces és la Política de Seguretat de Contingut (CSP), en particular la directiva script-src. En aquest article explorarem com controlar els scripts permesos en una pàgina mitjançant hashes, nonces i strict-dynamic, oferint una visió pràctica i professional per a desenvolupadors i responsables de seguretat.
Abans d' aprofundir, convé entendre el context. CSP actua com una capa addicional de defensa que li diu al navegador quins són els orígens i continguts de scripts que l' aplicació ha autoritzat explícitament. La directiva script-src abasta tant scripts externs (carregats des d'una URL) com scripts inline i manejadors d'esdeveniments en atributs HTML. Sense una política adequada, qualsevol script injectat per un atacant podria executar-se. Per això, en entorns on desenvolupem aplicacions a mida, la implementació de CSP esdevé un requisit indispensable per garantir la ciberseguretat del producte final.
L'enfocament més senzill és usar llistes blanques d'orígens (script-src 'self' https://cdn.ejemplo.com). No obstant això, aquesta solució té limitacions importants. Si permetem un origen complet, estem confiant en tots els fitxers servits des d'allà, inclosos aquells que podrien ser compromesos. Tot i que podem restringir a rutes específiques, a la pràctica molts CDN i serveis de tercers exigeixen un accés ampli. A més, les llistes blanques no autoritzen scripts inline; per a això necessitem hashes o nonces. En la nostra feina amb clients que migren a serveis cloud AWS i Azure, hem vist com una política mal configurada pot bloquejar funcionalitats legítimes o obrir bretxes de seguretat.
Els hashes són empremtes criptogràfiques del contingut exacte d'un script inline. Funcionen bé quan l'script és estàtic, com una versió de l'aplicació generada en temps de compilació. El navegador calcula el hash i el compara amb el que apareix a la capçalera CSP. Si coincideixen, s' executa. Aquest mètode és robust, però falla quan l'script canvia per usuari o per petició, per exemple, en incloure un identificador de sessió o una configuració personalitzada. A més, qualsevol variació mínima (espais, salts de línia) invalida el hash. Per això, en escenaris on el contingut és dinàmic, els nonces resulten més apropiats.
Un nonce és un token aleatori que el servidor genera per a cada resposta HTTP. S' insereix tant a la capçalera CSP com a l' atribut nonce de l' etiqueta <script>. El navegador verifica que coincideixin, sense importar el contingut de l' script. Això permet injectar dades variables sense necessitat de recalcular hashes. La condició és que el nonce sigui criptogràficament aleatori i únic per petició; en cas contrari, un atacant podria predir-lo i saltar-se la protecció. Els nonces són ideals per a aplicacions que generen HTML fresc en cada petició (com les que integren intel·ligència artificial o agents IA per personalitzar l'experiència d'usuari). No obstant, no serveixen per a pàgines cassades o llocs estàtics, perquè el nonce es repetiria, perdent el seu valor. En aquests casos, els hashes són la millor alternativa.
Quan un script autoritzat necessita carregar altres scripts dinàmicament (per exemple, un SDK d'anàlisi o un widget de xat), sorgeix un problema: l'script fill no té nonce ni hash. La directiva strict-dynamic resol això propagant la confiança des de l'script original a tots els que aquest carregui mitjançant document. D'aquesta manera, evitem haver de llistar cada origen de tercers, reduint la superfície d'atac. Això sí, l'script original ha d'estar autoritzat mitjançant nonce o hash. És crucial auditar aquest script, ja que si és vulnerable o està compromès, pot executar codi maliciós. En Q2BSTUDIO, en desenvolupar programari a mida, apliquem strict-dynamic per integrar llibreries externes minimitzant riscos, sempre combinat amb un rigorós pentesting per detectar possibles punts de fuga.
Un altre aspecte a considerar són els manejadors d'esdeveniments inline com onclick o onload. Aquests també estan controlats per script-src. Si fem servir nonces o hashes, no podem aplicar-los directament a aquests atributs. La solució és migrar la lògica a blocs <script> amb addEventListener, o bé separar les regles mitjançant script-src-elem (per a etiquetes script) i script-src-attr (per a manejadors). Aquesta separació permet adoptar CSP de forma gradual, sense haver de triar entre unsafe-inline o bloquejar tot. En projectes de serveis intel·ligència de negoci que utilitzen Power BI, per exemple, se solen incloure scripts d'integració; segmentar les directives ajuda a mantenir la seguretat sense trencar la funcionalitat.
Finalment, recordem que CSP no és una solució màgica. No protegeix contra vulnerabilitats internes com open redirects, on un script confiable redirigeix a un lloc maliciós basant-se en paràmetres d'URL. La seguretat s' ha d' abordar en múltiples capes: validació d' entrades, sanejament de sortides, i polítiques CSP ben dissenyades. En Q2BSTUDIO oferim serveis de ciberseguretat i assessoria en implementació de CSP, ajudant empreses a protegir les seves aplicacions web mentre aprofiten tecnologies com ia per a empreses i agents IA de forma segura. A més, integrem aquestes pràctiques en els nostres processos d'automatització de processos per garantir que la seguretat acompanyi l'eficiència.
En resum, el control de scripts amb CSP és una disciplina que requereix entendre quan usar cada tècnica: hashes per a contingut estàtic, nonces per a contingut dinàmic per sessió, i strict-dynamic per a càrregues dinàmiques de tercers. L' elecció depèn de l' arquitectura de l' aplicació i del model de desplegament. Implementar una política robusta no només preveu atacs XSS, sinó que també genera confiança en els usuaris i compleix amb estàndards de compliment normatiu. Si desitges enfortir la seguretat de les teves aplicacions o necessites orientació en l'adopció d'aquestes pràctiques, en Q2BSTUDIO comptem amb un equip expert en desenvolupament, cloud i ciberseguretat llest per acompanyar-te.



