Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Reemplazo de Jquery para la función .html() que no intentará reescribir el html en Redactor imperavi - Vulnerabilidad Xss

Esto se trata como un problema de vulnerabilidad XSS. Estoy usando el componente redactor de Imperavi y parece que no puede generar el valor de salida correcto cuando el Html no es válido.

El problema es cuando insertamos cadenas como esta:

 <<SCRIPT a=2>qssQ5GkdwWU=7;//<</SCRIPT>

El redactor elimina las etiquetas del script y genera esta cadena. Esto es de esperar debido a los ataques XSS.

 <qssQ5GkdwWU=7;//<

El problema ocurre cuando el redactor intenta establecer el valor anterior en el elemento del redactor usando html.(html) . Pensará que hay un elemento y generará esto:

 <qssq5gkdwwu=7;> </qssq5gkdwwu=7;>

¿Cómo puedo establecer el valor para el elemento pero evitando este comportamiento?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede anular la función htmlPrefilter de JQuery:

 htmlPrefilter: function( html ) { return html; },

Si el problema son los caracteres especiales, intente escapar de ellos de esta manera:

 // trying to set following string as innerHTML let c = '<qssQ5GkdwWU=7;//<'; // with default jquery $('.one').html(c); // modify filter function, and do your own character escaping jQuery.htmlPrefilter = function(html) { let clean = html.replace(/[&<"']/g, function(m) { switch (m) { case '&': return '&amp;'; case '<': return '&lt;'; case '"': return '&quot;'; default: return '&#039;'; } }); return clean; } // now try on second div $('.two').html(c);
 <script src="https://code.jquery.com/jquery-3.6.0.js"></script> One:<span class="one"></span><br> Two:<span class="two"></span><br>

Ejecute el script anterior preferiblemente antes de cargar Redactor.


Si decide hacer su propia desinfección, puede usar DOMPurify o una biblioteca similar.

 let content = 'Malicius content <img src="https://dummyimage.com/30" onload="this.style.border=`2px solid red`;alert(`attacked! :p`);" >'; // default jquery $('.one').html(content); // modify filter function, do your own sanitization jQuery.htmlPrefilter = function(html) { html = DOMPurify.sanitize(html); console.log('sanitized: ', html) return html; } // trying on second div $('.two').html(content);
 <script src="https://code.jquery.com/jquery-3.6.0.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.3.4/purify.min.js" integrity="sha512-jGh38w63cHRzfBHtyKgEMMkJswUFXDA3YXrDjaE8ptzxV5DDkLDUDjtGUy5tmDkOXHWsItKfFjocaEtj1WuVnQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> One:<span class="one"></span><br> Two: <span class="two"></span><br>

La primera imagen tiene un borde rojo. Y debido a la desinfección, el segundo no lo hace.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda