Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

197
Visualizações
Cómo permitir secuencias de comandos JS en línea usando Nonces para CSP

Estoy tratando de implementar CSP en mi sitio. Cambio mucho mis scripts en línea, por lo que los hash son una mala idea para mí para CSP

Leí que los Nonces, que son números enteros aleatorios, se pueden usar para implementar CSP.

Estoy usando WordPress. Y debajo está mi encabezado CSP.

 Header add Content-Security-Policy "default-src 'self'; script-src unsafe-hashes 'self' https://milyin.com https://cdnjs.cloudflare.com https://cdn.tiny.cloud https:; object-src 'none';base-uri 'none';img-src https: data:;style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.google.com https:;report-uri https://milyin.com/?csp=true"

Como puede ver, los scripts en línea no se ejecutarán desde allí. Entonces, cómo implementarlo.

La investigación inicial me encontró con la idea de los hashes, y el hecho de que puedo obtener hash de scripts de Chrome Dev Tools lo hizo simple y obvio.

Sin embargo, el hecho de que el más mínimo cambio en cualquier script me obligara a cambiar el hash fue un dolor de cabeza.

Así que escuché de nonces.

Sugiera cómo implementarlo y (si es posible) diga si existe alguna forma más fácil para usuarios de wordpress como yo.

Así que tengo un par de dudas:

  1. ¿Qué es Nonce? Según tengo entendido, es un número entero aleatorio de mi agrado.

  2. ¿Puedo usar el mismo nonce en todos los scripts? Quiero decir, ¿puedo decir Header add Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-69' y luego poner <script nonce="69" en todos y cada uno de los scripts de mi sitio? ?

  3. ¿Necesito cambiar Nonce con frecuencia? Quiero decir, si Nonce es constante, entonces alguien puede simplemente inyectar script con el mismo nonce y hacer que funcione. Cómo prevenir eso.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

1.) ¿Qué es Nonce? Según tengo entendido, es un número entero aleatorio de mi agrado.

Nonce es un valor codificado en base64:

 ; Nonces: 'nonce-[nonce goes here]' nonce-source = "'nonce-" base64-value "'" base64-value = 1*( ALPHA / DIGIT / "+" / "/" / "-" / "_" )*2( "=" )

2.) ¿Puedo usar el mismo nonce en todos los scripts? Quiero decir, ¿puedo decir Header add Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-69' y luego poner <script nonce="69" en todos y cada uno de los scripts de mi sitio? ?

Sí, puede usar un nonce generado una vez y no necesita generar un nonce nuevo para cada secuencia de comandos en la página.
Para generar nonce puedes usar:

  • el mod_cspnonce en el caso del servidor web Apache
  • la variable $request_id en el caso del servidor web NGINX 1.11.0+

3.) ¿Necesito cambiar Nonce con frecuencia? Quiero decir, si Nonce es constante, entonces alguien puede simplemente inyectar script con el mismo nonce y hacer que funcione. Cómo prevenir eso.

De acuerdo con la especificación CSP , el servidor DEBE generar un valor nonce único cada vez que transmite una política. El valor generado DEBE tener al menos 128 bits de longitud (antes de la codificación) y DEBE generarse a través de un generador de números aleatorios criptográficamente seguro para garantizar que el valor sea difícil de predecir para un atacante.
Significa que debe regenerar un nonce en cada carga de página.

Por cierto, tiene un error en el ... script-src unsafe-hashes 'self' ... - el token unsafe-hashes debe ser entre comillas simples: 'unsafe-hashes' . Pero de todos modos no es útil ya que no es compatible con Safari.

about 4 years ago · Juan Pablo Isaza Relatório

0

Se debe generar un nonce único para cada carga de páginas. La arquitectura para implementar un CSP basado en nonce se usa generalmente en aplicaciones web personalizadas, y sería muy complejo para un sitio de Wordpress, ya que imagino que puede estar usando Caching / CDN.

Sugeriría permanecer con el 'unsafe-inline' para el sitio de Wordpress. Si tiene otras páginas más importantes (como una página de pago/administración), puede crear un CSP separado.

Dicho esto, si sigue adelante e implementa un CSP con nonces, probablemente necesitará agregar los permisos 'strict-dynamic' y 'unsafe-eval' .

about 4 years ago · Juan Pablo Isaza Relatório

0

Escribí una clase pequeña para generar el encabezado y nonce para usar más tarde. Cada construcción de la clase CspBuilder creará un nonce único que se puede usar más adelante. Siempre que se haga referencia a los scripts en un archivo .php, esto funcionará:

 $Csp = (new \CspBuilder(true)) -> addCspPolicyNonce(CspDirective::Script) -> setCspHeader();

El efecto secundario de setCspHeader() es la generación de una Content-Security-Policy completa. Siempre que incluya un script en un archivo PHP, use:

 <script nonce="<?=$Csp->getNonce?>">

Hay muchas más opciones en esta clase pequeña y completamente verificada. Lea la descripción o el código. Enlace aquí: https://github.com/theking2/php-csp-builder

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda