FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cross Site Scripting (XSS)
Hola a todos,
Acabo de recibir un correo de alguien que se interesó por Loturak (y venga con Loturak, qué pesado...) hasta el punto de hacer algunas pruebas... comprometodoras. El caso es que me informa de la posibilidad de conseguir realizar "Cross Site Scripting (XSS)" en la aplicación. Ha sido tan amable que me ha enviado dos URLs de ejemplo: Código:
http://loturak.es/compartir?p=2&demo"><script>alert(123)</script> http://loturak.es/compartir?n=20&o=fd&b=demo" onmouseover=alert(123) " Y bien. Yo me dispongo a investigar el tema, pero, ¿se os ocurre algo? ¿qué puede estar sucediendo? ¿Cómo podría evitarse? ¿Qué demonios significa esa variable de nombre "demo"? ¿Cómo se consigue al cabo que se ejecute el JavaScript? ¿Hasta qué punto compromete la seguridad esto? Huf, huf, huf... Gracias desde aquí a quien me envió la información. No revelo su nombre por si no le apetece. Ya le remití un correo con mi agradecimiento, entre otras cosas. Y gracias a vosotros también por cualquier comentario que tengáis a bien hacer sobre todo esto. |
#2
|
||||
|
||||
Hola,
El problema con la primera URL solucionado... o eso creo, de momento. Se trataba de cierta función utilizada para propagar variables "GET". Precisamente, esta función no la escribí yo de mi copete, sino que más bien la adapté de cierto código, como puede verse: Código PHP:
Código PHP:
Por cierto, el método "Escapar" de la clase "Bdatos" y es tal cual: Código PHP:
|
#3
|
||||
|
||||
¿Cómo lees los parámetros de entrada? Creo que sería útil pasarles un strip_tags.
// Saludos |
#4
|
||||
|
||||
Hola,
Cita:
Por otro lado, a ver qué ocurre con la segunda URL... |
#5
|
||||
|
||||
Cita:
Donde debería de aparecer esto: Código:
<a href="/compartir?p=1" title="Mostrar la página anterior"> Código:
<a href="/compartir?demo"><script>alert(123)</script>=&p=1" title="Mostrar la página anterior"> Código:
$url = Servidor::PhpSelfSinExtension() .'?'; $url .= Servidor::PropagarVariblesGet(APP_VAR_REQUEST_NUM_PAGINA_ENLACES); $url .= APP_VAR_REQUEST_NUM_PAGINA_ENLACES.'='; $url = Servidor::UrlParaXhtml($url); Y en este otro tramo: Código:
<a href="'.$url.$i.'" title="'._r('Mostrar la página siguiente').'"> Cita:
|
#6
|
||||
|
||||
Vale, todo mi trabajo de detective a la porra ...
|
#7
|
||||
|
||||
Hola,
Para nada Seoane. Ni mucho menos. Por otro lado la segunda URL es curiosa. Se consigue el mismo efecto escribiendo en la casilla de búsqueda de Loturak: demo" onmouseover=alert(123) " Al cabo en la página se termina escribiendo el siguiente código: Código:
<input name="b" value="demo\" onmouseover="alert(123)" \="" id="casillabusqueda" class="inputtext" type="text"> Y acabo de confirmar lo que me temía... funciona lo mismo con el resto de casillas de formularios... acabo de probar con el formulario para añadir enlaces y funciona... ¡ay diosito ayúdame! |
#8
|
||||
|
||||
Hola,
Vale. Pues la segunda cuestión (la que plantea la segunda URL) se me está atragantando. Y es que si en el primer caso podíamos actuar en un mismo punto, en una función en concreto, en este segundo caso no parece que sea así. He conseguido escapar la cadena de búsqueda (en que se incluye el JavaScript) con la función "htmlentities", de manera que aparentemente se soluciona el tema. Empero, he dicho antes que todas las casillas de los formularios de la aplicación están comprometidas... Y sólo hay una función que "controle" cada una de estas casillas. El método "Escapar" que hemos visto antes. Sin embargo, aunque pareciera que esto iba a servir de ayuda, en realidad no lo parece. Véase el método "Escapar" tal y como está ahora: Código PHP:
Código PHP:
Resulta que el mismo método "Escapar" que usamos para las variables que nos llegan de entrada, también lo usamos cuando mostramos la información de dichas variables en las correspondientes casillas. Me explico. Cuando vamos a mostrar la búsqueda realizada por el usuario escribimos en la casilla de búsqueda la búsqueda actual... o sea, trabalenguajes aparte, hacemos algo como esto: Código PHP:
Conseguimos que el JavaScript no tenga efecto, pero, los datos de las casillas se muestran malamente: Total,... yo llevo creyendo hace tiempo que igual que usamos un método "Escapar" deberíamos utilizar un método "Desescapar"... o que en todo caso no estamos haciendo un buen uso del método "Escapar"... lo usamos un poco sin ton ni son, me parece a mí... |
#9
|
||||
|
||||
Hola,
Bueno. Disculpad mi pesadez, pero, es que me parece curioso, la verdad. Respecto del problema con la segunda de las URLs resulta que no ocurría sólo en las casillas de los formularios... no. Cuando se realiza una búsqueda en la página Web de que hablamos se indica al usuario que los enlaces están filtrados por dicha búsqueda. Una de las formas en que se indica es haciendo uso de diversos iconos, que tienen un "título", es decir, cuando el usuario pasa el ratón por encima le aparece el típico "hint" que le muestra algo como: "Buscando enlaces por: Delphi". Donde "Delphi" es la cadena que se está buscando. Pues bien, lo mismo que para las etiquetas, servía para los de los títulos, así que en la medida de lo posible lo estoy corrigiendo, aunque tengo que revisar algunas cosas. Empero,... lo de las casillas... en fin. Seguiremos informando. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pivot table Editable (cross-tab) | villegasmajano | MS SQL Server | 1 | 25-10-2006 23:28:57 |
como manejan uds en Firebird 1.5 el PIVOT de oracle?? (CROSS TABS) | pvizcay | Firebird e Interbase | 4 | 19-09-2006 19:17:32 |
Ajuste de decimales en un Cross-Tab | nugame | Impresión | 4 | 16-06-2004 13:40:44 |
|