elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Aporte] htmlEntities() para javascript.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] htmlEntities() para javascript.  (Leído 2,274 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
[Aporte] htmlEntities() para javascript.
« en: 16 Febrero 2020, 00:51 am »

Siempre me veo en la necesidad de codificar entidades a mano y acabo mirando una tabla porque no me acuerda alguna entidad en concreto. Por lo tanto hice una función en javascript que lo haga.
En principio la hice con el pseudoprotocolo
Código
  1. avascript:r='replace';d=document;a=prompt()[r](/ /g,"&#38;#38;#38;#32;")[r](/!/g,"&#38;#38;#38;#33;")[r](/"/g,"&#38;#38;#38;#34;")[r](/%/g,"&#38;#38;#38;#37;")[r](/'/g,"&#38;#38;#38;#39;")[r](/\(/g,"&#38;#38;#38;#40;")[r](/\)/g,"&#38;#38;#38;#41;")[r](/</g,"&#38;#38;#38;#60;")[r](/>/g,"&#38;#38;#38;#62;")[r](/`/g,"&#38;#38;#38;#96;")[r](/a/g,"&#38;#38;#38;#97;")[r](/A/g,"&#38;#38;#38;#65;")[r](/e/g,"&#38;#38;#38;#101;")[r](/E/g,"&#38;#38;#38;#69;")[r](/i/g,"&#38;#38;#38;#105;")[r](/I/g,"&#38;#38;#38;#73;")[r](/o/g,"&#38;#38;#38;#111;")[r](/O/g,"&#38;#38;#38;#79;")[r](/u/g,"&#38;#38;#38;#117;")[r](/U/g,"&#38;#38;#38;#85;")[r](/{/g,"&#38;#38;#38;#123;")[r](/}/g,"&#38;#38;#38;#125;")[r](/‘/g,"&#38;#38;#38;#8216;")[r](/’/g,"&#38;#38;#38;#8217")[r](/‚/g,"&#38;#38;#38;#8218;")[r](/“/g,"&#38;#38;#38;#8220;")[r](/”/g,"&#38;#38;#38;#8221;")[r](/„/g,"&#38;#38;#38;#8222;")[r](/&#8242;/g,"&#38;#38;#38;#8242;")[r](/&#8243;/g,"&#38;#38;#38;#8244;")[r](/‹/g,"&#38;#38;#38;#8249;")[r](/›/g,"&#38;#38;#38;#8250;")[r](/s/g,"&#38;#38;#38;#115;")[r](/S/g,"&#38;#38;#38;#83;");a=d.createTextNode(a);b=d.createElement('p');b.appendChild(a);d.writeln(b.innerHTML);

Pense que a alguien más le podría ser algo útil y no me costaba nada asique hice una aplicación/página web con una interfaz muy simple para hacer esta tarea de forma automatizada.

htmlEntities() es una función que codifica caracteres que puedan ser interpretados y/o peligrosos a sus respectivas entidades. Estás entidades son códigos que el navegador conoce y puede mostrar. Por ejemplo el caracter < es codificado como &lt;
Si en el código de tu página web permites que usuarios introduzcan caracteres como < podrían llegar a formar códigos que el navegador interprete como <img src="http://paginaporno.com/imagenPorno.jpg">, el navegador entiende la etiqueta imagen y muestra un imagen externa en tu página web sobre la que tu no tienes control. En vez de una imagen podría ser un código de javascript de un keylogger que te robase la cuenta. Otro caso común es que tu mismo quieras compartir un código para que los demás lo vean, pero el dichoso código en vez de mostrarse como texto, es interpretado por el navegador. O incluso en un ataque MITM interceptan una la respuesta a una petición por XHR. Para estes y otros casos una de las múltipes medidas que se toman es convertir los caracteres peligrosos en entidades. De esta forma el código no es interpretado por el navegador, en su lugar muestra el caracter correspondiente a dicha entidad.

Este programa que traigo hace precisamente esto. Le introduces un código o texto que no quieres que se interprete y te lo traduce a entidades html.

Solo debes copiar el código generado y lo pones en tu página web por ejemplo dentro de un div. En el blog que comencé hace unos días podeis ver que voy mostrando códigos. Para poder hacerlo codifico las entidades. Si no lo hiciese se ejecutaría y por lo tanto no podría compartir los códigos que creo.

Podeis copiar el código siguiente en un documento.html para abrirlo y utilizarlo o utilizar la función sin el resto de la página.
Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>htmlEntities</title>
  6. </head>
  7. <body>
  8. <h4 id="en" onclick="cambiarIdioma('en');" style="display:inline;font-size:40px">EN</h4>
  9. <h4 style="font-size:40px;display:inline"> | </h4>
  10. <h4 id="es" onclick="cambiarIdioma('es');" style="font-size:40px;display:inline;color:coral"> ES</h4>
  11. <div style="width:100%;align:center">
  12. <h1 style="color:coral;font-size: 60px;align:center;text-align:center;display: block; margin-right: auto; margin-left: auto;">htmlEntities()</h1>
  13. <input type="text" id="codigo" placeholder="Introduce tu código a parsear" style="width:95%;font-size: 60px; display: block; margin-right: auto; margin-left: auto; outline-color:coral">
  14. <br />
  15. <button type="button" id="bt" onclick="Parsear()" style="width:47.5%;font-size: 50px;display: block; margin-right: auto; margin-left: auto; background-color: #fafafa;outline-color: coral">Parsear</button>
  16.  
  17.  
  18. <br />
  19. <textarea id="ta" contenteditable="true" style="width:95%;height:400px;overflow-y:scroll;padding:10px;background-color:#eee;color:coral;align:center;display: block; margin-right: auto; margin-left: auto;">Aquí aparecerá tu código.</textarea>
  20. </div>
  21.  
  22. <script>
  23. function cambiarIdioma(identificador) {
  24.  if (identificador == "en") {   document.getElementById("codigo").placeholder = "Introduce your code to parse here";
  25. document.getElementById("ta").innerHTML = "Here is going to be your code.";
  26. document.getElementById("en").style.color="coral"; document.getElementById("es").style.color="black";
  27.  document.getElementById("bt").innerHTML="Parse";
  28.  }
  29.  
  30.  if (identificador == "es") { document.getElementById("codigo").placeholder = "Introduce tu código a parsear"; document.getElementById("en").style.color="black"; document.getElementById("es").style.color="coral"; document.getElementById("ta").innerHTML = "Aquí aparecerá tu código."; document.getElementById("bt").innerHTML="Parsear";
  31.  }
  32. }
  33.  
  34.  
  35. function Parsear() {
  36.  var miString = document.querySelector("#codigo").value;
  37.  
  38.  miString = htmlEntities(miString);
  39.  
  40.   document.querySelector("#ta").innerHTML= miString;
  41. }
  42.  
  43.  
  44. /* Codigo */
  45. function htmlEntities(string) {
  46. r='replace';d=document;a=string[r](/ /g,"&#38;#38;#38;#32;")[r](/!/g,"&#38;#38;#38;#33;")[r](/"/g,"&#38;#38;#38;#34;")[r](/%/g,"&#38;#38;#38;#37;")[r](/'/g,"&#38;#38;#38;#39;")[r](/\(/g,"&#38;#38;#38;#40;")[r](/\)/g,"&#38;#38;#38;#41;")[r](/</g,"&#38;#38;#38;#60;")[r](/>/g,"&#38;#38;#38;#62;")[r](/`/g,"&#38;#38;#38;#96;")[r](/a/g,"&#38;#38;#38;#97;")[r](/A/g,"&#38;#38;#38;#65;")[r](/e/g,"&#38;#38;#38;#101;")[r](/E/g,"&#38;#38;#38;#69;")[r](/i/g,"&#38;#38;#38;#105;")[r](/I/g,"&#38;#38;#38;#73;")[r](/o/g,"&#38;#38;#38;#111;")[r](/O/g,"&#38;#38;#38;#79;")[r](/u/g,"&#38;#38;#38;#117;")[r](/U/g,"&#38;#38;#38;#85;")[r](/{/g,"&#38;#38;#38;#123;")[r](/}/g,"&#38;#38;#38;#125;")[r](/‘/g,"&#38;#38;#38;#8216;")[r](/’/g,"&#38;#38;#38;#8217")[r](/‚/g,"&#38;#38;#38;#8218;")[r](/“/g,"&#38;#38;#38;#8220;")[r](/”/g,"&#38;#38;#38;#8221;")[r](/„/g,"&#38;#38;#38;#8222;")[r](/&#8242;/g,"&#38;#38;#38;#8242;")[r](/&#8243;/g,"&#38;#38;#38;#8244;")[r](/‹/g,"&#38;#38;#38;#8249;")[r](/›/g,"&#38;#38;#38;#8250;")[r](/s/g,"&#38;#38;#38;#115;")[r](/S/g,"&#38;#38;#38;#83;")[r](/\./g,"&#38;#38;#38;#46;");a=d.createTextNode(a);b=d.createElement('pre');b.appendChild(a);return b.innerHTML;
  47. }
  48.  
  49. </script>
  50. </body>
  51. </html>

Si encontrais algún bug o alguna forma de que se interprete código, avisar para mejorarlo.
No quite ni todas las entidades, ni solo las típicas, quité un poco las que yo creo que son mínimas imprescindibles.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?]Bypass de htmlentities()[/?] « 1 2 »
Nivel Web
braulio-- 10 9,326 Último mensaje 16 Abril 2009, 14:17 pm
por sirdarckcat
[Aporte] Framework para Crear Juegos con javascript
Desarrollo Web
AFelipeTrujillo 7 6,747 Último mensaje 12 Diciembre 2013, 05:32 am
por bboyleok
[Aporte]Codigo Fuente De Generador de Sodukos en javascript
Desarrollo Web
Flamer 2 3,201 Último mensaje 28 Febrero 2015, 23:44 pm
por Flamer
[Aporte] Controlar node.js desde navegador, vanilla javascript.
Desarrollo Web
@XSStringManolo 0 2,306 Último mensaje 13 Mayo 2020, 07:48 am
por @XSStringManolo
[Aporte] javascript - Proporción de números
Desarrollo Web
TickTack 6 3,660 Último mensaje 14 Enero 2021, 10:38 am
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines