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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Duda, seguridad XSS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda, seguridad XSS  (Leído 2,723 veces)
CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Duda, seguridad XSS
« en: 9 Junio 2014, 14:05 pm »

Buenas compañeros, esto es simplemente una duda que me surgió mientras hacia unas cuantas pruebas ¿Qué creen de esta seguridadi Anti-XSS?

Efectivamente, el XSS lo hacen inyectando etiquetas html, o hasta javascript.
Pero se sabe que para abrir una etiqueta se utiliza "<" y para cerrarla "/>
Bueno enfin, este es el código html el cual envía lo que escribe el usuario:
Código
  1. <TITLE>Index duda</TITLE>
  2. </HEAD>
  3.  
  4.  
  5. <A HREF="xss.php?var=hola">Saludar</A>
  6. <BR><BR>
  7. <A HREF="xss.php?var=adios">Despedirse</A>
  8.  
  9. </BODY>
  10. </HTML>
  11.  

y Este es mi código "Protector.":
Código
  1.  
  2. <?php
  3. //Protección XSS cooltesting
  4. $bug = $_GET["var"];
  5. if ((strpos($bug,'<')!== false) or strpos($bug,'>') !==false)
  6. {
  7. Header("HTTP/1.1 404 Not found");
  8.  
  9. echo '  
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  13. </head>
  14. <body>
  15. Lo que busca no existe, o dejó de existir.
  16. </body>
  17. </html>
  18. ';
  19. }else{
  20.  
  21. echo'Has escrito: '.$bug;
  22.  
  23. }
  24. ?>
  25.  
  26.  
  27.  

Solamente quiero saber si esta es una buena protección, gracias de ante mano. Es que pienso montar un servidor y no me gustaría para nada que me hagan un Deface


En línea

El ganador es el que sabe perder.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda, seguridad XSS
« Respuesta #1 en: 9 Junio 2014, 14:19 pm »

si puede servir, aunque puedes usar htmlentities que lo que hará es convertir a todas las "entidades" html (como < es "&lt;", > es "&gt;" y letras acentuadas) en su respectivo html, así las etiquetas quedan destruidas y son meramente visuales


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Duda, seguridad XSS
« Respuesta #2 en: 9 Junio 2014, 16:54 pm »

no, no sirve, para eso existe htmlepcialchars que ya viene integrado con php por defecto:

http://cl1.php.net/htmlspecialchars
En línea

CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Re: Duda, seguridad XSS
« Respuesta #3 en: 9 Junio 2014, 20:46 pm »

no, no sirve, para eso existe htmlepcialchars que ya viene integrado con php por defecto:

http://cl1.php.net/htmlspecialchars


¿Por qué no serviría, si se verifica si contiene "<" o ">" y si lo tiene simplemente no lo muestra, me dirías por qué no?

Gracias
En línea

El ganador es el que sabe perder.
CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Re: Duda, seguridad XSS
« Respuesta #4 en: 9 Junio 2014, 20:49 pm »

no, no sirve, para eso existe htmlepcialchars que ya viene integrado con php por defecto:

http://cl1.php.net/htmlspecialchars

OK,OK,OK ya entendí o creo que entendí sin necesidad de que respondas, solo dime si estoy en lo correcto:

El problema es que el código "inyectado" no lo muestra, pero sí trabaja con él, osea el usuario ve el mensaje: "Lo que busca no existe, o dejó de existir", pero el código si se ha ejecutado, solo que no lo devuelve al cliente.

Será por eso que no sirve mucho el código?
En línea

El ganador es el que sabe perder.
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Duda, seguridad XSS
« Respuesta #5 en: 9 Junio 2014, 22:44 pm »

El tema es el siguiente:

Cuando haces una pagina web y necesitas desplegar un dato como por ejemplo el nombre de una persona necesitas utilizar la codificación adecuada (en este caso esa codificación se llama entidad html), por ejemplo, si estamos programando en html vamos a tener un código como este:

Código:
<div><p>Pedro</p></div>

Ahora, por norma de HTML dice que cuando colocas carácteres especiales estos deben ser codificados siempre en entidad html, por ejemplo:

Código:
<div><p>Pedro&#039;s</p></div>

Esto nos mostrará:
Código:
Pedro's

Ahora, esto no es que yo lo diga o que se le ocurrió a alguien, esto es norma y es parte del estandard del código HTML y esto es para prevenir justamente problemas cuando necesitas escribir código html sobre un html, por ejemplo:

Código:
<div>&lt;div&gt;</div>

Esto escribe:
Código:
<div>

Pero no lo ejecuta. Ahora cuando desde php dejas que las personas pongan lo que se les da la gana puedes provocar que se rompa la codificación completa del documento html y puede que en algunos navegadores no te aparezcan las letras de forma correcta o puedes provocar un agujero de seguridad de tipo XSS.

En este punto cuando dejas que la gente escriba lo que sea vas a tener problemas con los caracteres unicode, etiquetas, comillas, ampersand y cualquier carácter interpretable por el navegador.

Ahora, porque no es buena idea hacer tu propio filtro como lo acabas de hacer?, porque no eres un experto en seguridad informática ni sabes de memoria todos los posibles vectores de ataques (los cuales son muchisimos y no solo escribir etiquetas < y >).

Por ejemplo, digamos que mañana necesitas escribir un valor dentro de un parámetro de una etiqueta html:

Código
  1. <a href="test.php?texto=<?php echo $_GET['texto']; ?>">link</a>

Dentro del parámetro por url "texto" puedo inyectar un XSS:

Código:
test.php?texto=" onclick="alert(document.cookie)

Entonces tu HTML quedará así:

Código
  1. <a href="test.php?texto=" onclick="alert(document.cookie)">link</a>

Y te fijas que acá no usamos < ni >?, ese es otro vector como muchos otros, ahora tendrias que hacer otro filtro distinto para prevenir las comillas, despues tendras problemas con las comillas simples, despues con los backspaces, despues con los caracteres unicode, despues con los saltos de linea, despues con los ampersand, etc etc.

Entonces para que no te vueles la cabeza haciendo una chorronada de filtros o un filtro muy grande usas la función HTMLSPECIALCHARS el cual ya está diseñada para filtrar todos los posibles carácteres bajo el contexto necesario.

Te recomiendo que nunca dejes la seguridad de una aplicación en tus manos, siempre dejalo en manos del mismo creador del lenguaje de programación o framework que estás utilizando ya que hay gente mas especializada que ya se hizo todas estas preguntas antes y tienen las herramientas suficientes como para crear un ambiente seguro.

Saludos.
En línea

CoolTesting

Desconectado Desconectado

Mensajes: 76


El ganador es el que sabe perder.


Ver Perfil WWW
Re: Duda, seguridad XSS
« Respuesta #6 en: 9 Junio 2014, 22:57 pm »

El tema es el siguiente:

Cuando haces una pagina web y necesitas desplegar un dato como por ejemplo el nombre de una persona necesitas utilizar la codificación adecuada (en este caso esa codificación se llama entidad html), por ejemplo, si estamos programando en html vamos a tener un código como este:

Código:
<div><p>Pedro</p></div>

Ahora, por norma de HTML dice que cuando colocas carácteres especiales estos deben ser codificados siempre en entidad html, por ejemplo:

Código:
<div><p>Pedro&#039;s</p></div>

Esto nos mostrará:
Código:
Pedro's

Ahora, esto no es que yo lo diga o que se le ocurrió a alguien, esto es norma y es parte del estandard del código HTML y esto es para prevenir justamente problemas cuando necesitas escribir código html sobre un html, por ejemplo:

Código:
<div>&lt;div&gt;</div>

Esto escribe:
Código:
<div>

Pero no lo ejecuta. Ahora cuando desde php dejas que las personas pongan lo que se les da la gana puedes provocar que se rompa la codificación completa del documento html y puede que en algunos navegadores no te aparezcan las letras de forma correcta o puedes provocar un agujero de seguridad de tipo XSS.

En este punto cuando dejas que la gente escriba lo que sea vas a tener problemas con los caracteres unicode, etiquetas, comillas, ampersand y cualquier carácter interpretable por el navegador.

Ahora, porque no es buena idea hacer tu propio filtro como lo acabas de hacer?, porque no eres un experto en seguridad informática ni sabes de memoria todos los posibles vectores de ataques (los cuales son muchisimos y no solo escribir etiquetas < y >).

Por ejemplo, digamos que mañana necesitas escribir un valor dentro de un parámetro de una etiqueta html:

Código
  1. <a href="test.php?texto=<?php echo $_GET['texto']; ?>">link</a>

Dentro del parámetro por url "texto" puedo inyectar un XSS:

Código:
test.php?texto=" onclick="alert(document.cookie)

Entonces tu HTML quedará así:

Código
  1. <a href="test.php?texto=" onclick="alert(document.cookie)">link</a>

Y te fijas que acá no usamos < ni >?, ese es otro vector como muchos otros, ahora tendrias que hacer otro filtro distinto para prevenir las comillas, despues tendras problemas con las comillas simples, despues con los backspaces, despues con los caracteres unicode, despues con los saltos de linea, despues con los ampersand, etc etc.

Entonces para que no te vueles la cabeza haciendo una chorronada de filtros o un filtro muy grande usas la función HTMLSPECIALCHARS el cual ya está diseñada para filtrar todos los posibles carácteres bajo el contexto necesario.

Te recomiendo que nunca dejes la seguridad de una aplicación en tus manos, siempre dejalo en manos del mismo creador del lenguaje de programación o framework que estás utilizando ya que hay gente mas especializada que ya se hizo todas estas preguntas antes y tienen las herramientas suficientes como para crear un ambiente seguro.

Saludos.
Excelente, muchisimas gracias WHK lo explicaste bastante bien.
En línea

El ganador es el que sabe perder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda!! seguridad con PHP
PHP
miadagio 5 3,369 Último mensaje 17 Abril 2010, 16:25 pm
por miadagio
duda de haking de seguridad
Dudas Generales
Quake-man 5 3,238 Último mensaje 31 Mayo 2010, 19:31 pm
por skapunky
duda seguridad RAM
Hardware
miguelskk 2 3,119 Último mensaje 29 Abril 2012, 16:54 pm
por miguelskk
duda (seguridad)
Dudas Generales
crash_override01 1 2,257 Último mensaje 28 Mayo 2013, 09:05 am
por #!drvy
Duda con la publicidad y seguridad
Seguridad
Joake6 2 2,390 Último mensaje 8 Marzo 2016, 18:40 pm
por Joake6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines