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

131
Visualizações
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?

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

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.

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