Foros del Web » Programando para Internet » PHP »

Como puedo evitar el XSS

Estas en el tema de Como puedo evitar el XSS en el foro de PHP en Foros del Web. Hola me interesa ponerle seguridad a mis formularios hechos en PHP, para que no puedan hacer inyecciones de codigs en mis base de datos de ...
  #1 (permalink)  
Antiguo 19/12/2011, 13:30
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Como puedo evitar el XSS

Hola me interesa ponerle seguridad a mis formularios hechos en PHP, para que no puedan hacer inyecciones de codigs en mis base de datos de mysql.

Conosco la existencia de esta bulnerabilidad y no se como evitarla y es presisamente lo que quiero implementar

Espero haberme explicado y alguien tenga los conocimientos necesarios y me puedan ayudar.

Desde ya les doy gracias
  #2 (permalink)  
Antiguo 19/12/2011, 13:34
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Como puedo evitar el XSS

Te dejo un aporte de GatorV.
  #3 (permalink)  
Antiguo 28/12/2011, 11:37
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Se ve bueno, pero saben como implementarlo en mi codigo para que haga la validadcon, porke me imagino que lo mandas a llamr con un include pero de ahi?, tengo bastantes dudas al respecto ..
  #4 (permalink)  
Antiguo 28/12/2011, 11:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Cita:
Iniciado por Giovinho Ver Mensaje
Se ve bueno, pero saben como implementarlo en mi codigo para que haga la validadcon, porke me imagino que lo mandas a llamr con un include pero de ahi?, tengo bastantes dudas al respecto ..
Pues yo creo que nadie sabría implementarlo con tu código pues adivinos aquí no hay.

Mejor comienza expresando tus dudas, mostrando tu código, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/12/2011, 11:47
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

No en mi codigo presisamente, lo dije mal entonces, la pregunta o duda es como se implementa este codigo en una pagina que tenga el formulario, solo se me ocurre que se mande a llamar con un include el archivo, pero de ahi, como hacer que al enviar los datos pase por esa validacion, porke lo intente hacer como si fura javascript que en el formulario mando a llmar la funcion con onsubmit="funcion()" pero nada.
  #6 (permalink)  
Antiguo 28/12/2011, 11:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Entonces es obvio que no sabes trabajar con php, ¿si sabes como usar funciones?

Comienza por decirnos que sabes hacer y que no, porque así como lo vienes entendiendo no vas a llegar a ningún lado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 28/12/2011, 12:16
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Esque nose si lo estoy entendiendo mal, miren supongamos que esta este codigo

<form name="form1" method="post" action="comprobar.php">
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

Ahora segun mi idea es para que en el campo nombre no puedan introducir xss, mandaria a llamar el archivo de arriba quedando algo asi:

include("filterXSS.php");
/*De ahi mando a llamr la funcion, esa es mi duda donde para que valide las entradas del formulario; */
<form name="form1" method="post" action="comprobar.php" /*No seria aqui? onsubmit="return filterXSS(this)"; asi como se le hace con javascript,*/>
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

Si lo estoy entendiendo mal, podrian decirme en ese codigo de ejemplo como aria la validacion...Espero haberme explicado y gracias por su tiempo
  #8 (permalink)  
Antiguo 28/12/2011, 12:24
Colaborador
 
Fecha de Ingreso: mayo-2004
Mensajes: 152
Antigüedad: 19 años, 11 meses
Puntos: 26
Respuesta: Como puedo evitar el XSS

El php no se incluye en el html.

Para que te hagas una idea, el php se ejecuta en el servidor (el hosting), mientras que el html y el javascript se ejecutan/interpretan en el cliente (el navegador). La función para filtrar ataques que han enlazado mas arriba está hecha en php así que la deberías llamar desde un script php que reciba los valores del formulario.

La instruccion seria de este estilo:

Código:
$nombre = filterXSS($_POST['txtnombre']);
En este ejemplo se está filtrando el campo "txtnombre" del formulario y se guarda en la variable $nombre. Si este código te suena a chino te recomiendo que primero aprendas un poco de php :)

Saludos!
__________________
Comprar impresoras 3D
  #9 (permalink)  
Antiguo 28/12/2011, 12:26
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como puedo evitar el XSS

debes llamar a la funcion no en el formulario si no al recojer los datos

<form name="form1" method="post" action="comprobar.php">
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

recojemos

$nombre = filterXSS($_POST['txtnombre']);

tal y como te dijo djemili
  #10 (permalink)  
Antiguo 28/12/2011, 13:02
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Gracias eso me kedo mas claro, entonces la validadcion es en la pagina que recibe los valores del formulario, que tonto yo lo hacia donde estaba el formulario.

Entonces lo que hice es esta linea:

$nombre = filterXSS($_POST['txtnombre']);

pero de ahi de nuevo me kedo con la duda que sigue, lo puse en la instruccion donde doy de alta los datos algo asi

mysql_query("inset into tabla(nombre)values('$nombre'),$conexion);"

Hice la prueba y no hace nada, todo pasa igual.
  #11 (permalink)  
Antiguo 28/12/2011, 13:07
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como puedo evitar el XSS

no tiene xq pasar nada si introduces los datos correctos pero si introduces codigo logicamente lo escapa y si lo que deseas es para una consulta hazlo asi
Código PHP:
Ver original
  1. $nombre = filterXSS($_POST['txtnombre']);
  2. $query = sprintf("insert into tabla(nombre)values('%s'),$conexion)",mysql_real_escape_string($nombre));
  3. mysql_query($query);

te recomiendo mirar en el manual de php

addlashes
stripslashes
mysql_real_escape_string
strip_tags
int()
htmlspecialchars
htmlentities
y por ay puedas empezar a conocer cosas
  #12 (permalink)  
Antiguo 28/12/2011, 17:50
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Hola, hize esto pero me sale error,

$nombre = filterXSS($_POST['txtnombre']);
$query = sprintf("insert into tabla(nombre)values('%s'),$conexion)",mysql_real_e scape_string($nombre));
mysql_query($query);



Sigo sin poder lograr que me haga el filtro

Me dice que error de sitaxis
  #13 (permalink)  
Antiguo 28/12/2011, 18:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Quisiera preguntarte ¿que mensaje de error recibes?

Pero no, porque realmente es obvio, estas copiando y pegando código sin saber lo que hace.

Código PHP:
// MAL
$sql sprintf("insert into tabla(nombre)values('%s'),$conexion)",mysql_real_e scape_string($nombre));

// BIEN
$sql sprintf("insert into tabla(nombre)values('%s')",mysql_real_escape_string($nombre)); 
¿Notas las diferencias?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 28/12/2011, 18:36
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

HOla, no enrealidad no copio y pego, estoy conectado en mi pc y estoy trabajando esto en mi lap, pero bueno no es importante eso...

Pero hacer ese cambio implica que no indique la conexion con la BD, pero encontre creo el error en que las comillas estaban despues del parentesis, ahora no me amrca error pero me almacena esto en la tabla Resource id#4.

El codgo que pongo es
$nombre=filterXSS($_POST['txtnombre']);
$query=sprintf("insert into tabla(nombre)values('%s')",$conexion,mysql_real_es cape_string($oficio));
mysql_query($query);
  #15 (permalink)  
Antiguo 28/12/2011, 18:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como puedo evitar el XSS

El parámetro $conexion, en todo caso, deberías agregarlo en mysql_query(), no en sprintf()
__________________
- León, Guanajuato
- GV-Foto
  #16 (permalink)  
Antiguo 28/12/2011, 19:00
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

gracias ya lo ise asi, y ya no me pone eso de Resource id#4, pero ahora de nuevo no m hace el filtro, pasan los datos como si nada
  #17 (permalink)  
Antiguo 28/12/2011, 19:07
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Haber pondre todo el codigo

Pagina de envio.


<form name="form1" method="post" action="comprobar.php">
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

Pagina comprobar.php
<?php
include("filterXSS.php");
$conexion=mysql_connect("servidor","usuario","cont raseña" or die("problemas");
mysql_select_db("Base_datos",$conexion) or die("problemas");

$nombre=filterXSS($_POST['txtnombre']);

$query=sprintf("insert into tabla(nombre)values('%s')",mysql_real_es cape_string($oficio));
mysql_query($query,$conexion);

mysql_close($conexion);
?>

FIN.

ese es mi codigo de la pagina que envia y la que recibe, algo esta mal???, porke no me hace el filtro, me deja pasar todo como si nada.
  #18 (permalink)  
Antiguo 29/12/2011, 00:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Cita:
$nombre=filterXSS($_POST['txtnombre']);

$query=sprintf("insert into tabla(nombre)values('%s')",mysql_real_es cape_string($oficio));
¿Que notas de diferente?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #19 (permalink)  
Antiguo 29/12/2011, 03:01
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como puedo evitar el XSS

<form name="form1" method="post" action="comprobar.php">
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

Pagina comprobar.php

<?php
include("filterXSS.php");
$conexion=mysql_connect("servidor","usuario","cont raseña" or die("problemas");
mysql_select_db("Base_datos",$conexion) or die("problemas");

$oficio=filterXSS($_POST['txtnombre']);

$query=sprintf("insert into tabla(nombre)values('%s')",mysql_real_escape_strin g($oficio));
mysql_query($query,$conexion);

mysql_close($conexion);
?>
  #20 (permalink)  
Antiguo 29/12/2011, 22:07
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

XD... No ese no es el error, lo que pasa esque en mi codigo real no lo tengo como $nombre sino $oficio y al escribirlo aqui me equivoque, peor bueno lo pondre de nuevo para que de ahi vean si ahi algun error.

Pagina de envio.


<form name="form1" method="post" action="comprobar.php">
<input type="text" name="txtnombre">
<input type="submit" value="enviar">
</form>

Pagina comprobar.php
<?php
include("filterXSS.php");
$conexion=mysql_connect("servidor","usuario","cont raseña" or die("problemas");
mysql_select_db("Base_datos",$conexion) or die("problemas");

$oficio=filterXSS($_POST['txtnombre']);

$query=sprintf("insert into tabla(nombre)values('%s')",mysql_real_es cape_string($oficio));
mysql_query($query,$conexion);

mysql_close($conexion);
?>

FIN.

Ven algo mal ahora?, y muchas gracias por sus respuestas.... Aunque no eh resuelto mi problema original, me han ayudado mucho a comprender otras cosas.
  #21 (permalink)  
Antiguo 29/12/2011, 22:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Bien, pero entonces me queda una gran duda, ¿cual es tu error ahora?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #22 (permalink)  
Antiguo 29/12/2011, 22:32
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Ah pues eso kiero saber, porke al escribir una etiqueta html o algo asi, no me hace el filtro, pasa todo lo que el usuario escribe sin pasar por el filtro que deberia hacer esa funcion de FilterXSS, y es lo que quiero lograr que mis formularios tengan el filtro para protegerlos de codigos XSS o cualkier codigo malisosa por el envio de un formulario.
  #23 (permalink)  
Antiguo 29/12/2011, 22:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

Lo que pasa es que la función mysql_real_escape_string() no sirve para eliminar etiquetas de HTML, solo sirve como escape y así evitar SQL Injection.

Para eliminar las etiquetas que no quieras debes usar strip_tags(), que sirve contra XSS.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #24 (permalink)  
Antiguo 29/12/2011, 22:50
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

osea seria algo asi?

$query=sprintf("insert into folios(oficio) values('%s')", mysql_real_escape_string($oficio), strip_tags($oficio));

Aunque asi le puse y no me salio.. O dentro del parentesis debo escribir los caracteres que no deseo permitir?
  #25 (permalink)  
Antiguo 30/12/2011, 00:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Como puedo evitar el XSS

De verdad, necesitas repasar aunque sea un tutorial básico de php antes de continuar.

Para usar múltiples funciones y que éstas afecten un solo valor debes hacer algo así.
Código PHP:
$mi_variable 'xD';

$mi_variable c(b(a($mi_variable))); 
Como bien sabes dependiendo de la profundidad de los paréntesis se evalúa primero el valor que se encuentra mas adentro y de ahí hacía fuera se ejecuta el resto.

Cita:
[...] dentro del parentesis debo escribir los caracteres que no deseo permitir?
Eso lo debes consultar por ti mismo, que para eso sirve el manual.
http://php.net/strip_tags
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #26 (permalink)  
Antiguo 30/12/2011, 01:05
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Como puedo evitar el XSS

Bingo, XD, tienes razon asi era, ya lo corregi, sorry lo que pasa esque me dispuse a aprender php y en una semana ya aprendi varias cosas, aun que me tope con este problema y me surgieron varias dudas, pero veo que si me falta saber varias cosas, pero puedo hacer ya varias cosas con este lenguaje y ya resolvi este problema de verdad me ayudaron mucho, miren le ise asi y me filtra las etiquetas html, aunke no probe si tambien con una inyeccion sql, porke aun nose bn que como es hacer eso...


$query=sprintf("insert into folios(oficio) values ('%s')", mysql_real_escape_string(strip_tags($oficio)));

Ahora abusando de sus sabiduria y agradeciendo su ayuda porque si me ayudaron y mucho todos los que comentaron, es si ahi alguna otra cosa que deba ponerle a mis paginas o formularios en cuanto a seuridad, porke esto de xss lo supe investigando que es importante para darle seguridad sino un hacker o ni sikiera un hacker sino alguna que sepa un poco de esto puede hackearme mi pagina por medio de un formulario. Saben mas tips para ponerlo toda la seguridad posible amis paginas o formularios???

De nuevo gracias por todo....:)
  #27 (permalink)  
Antiguo 30/12/2011, 11:02
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como puedo evitar el XSS

yo te recomendaria no usar strip_tags dentro de la consulta si 'antes de', limpia antes la variable y despues la escapas ya en la consulta

si deseas saber mas tips para seguridad leete bien el manual de php de

strip_tags
mysql_real_escape_string,
addlashes ,
striplashes,
htmlentities ,
htmlspecialchars

y asi entiendas como funcionan , asi te sera mas facil entender que cosas debes hacer en cada momento en formularios , en urls , etc..... te sera mas facil aplicar seguridad por ti mismo
  #28 (permalink)  
Antiguo 03/01/2012, 11:09
Avatar de Giovinho  
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 3
Información Respuesta: Como puedo evitar el XSS

Cita:
Iniciado por webankenovi Ver Mensaje
yo te recomendaria no usar strip_tags dentro de la consulta si 'antes de', limpia antes la variable y despues la escapas ya en la consulta

si deseas saber mas tips para seguridad leete bien el manual de php de

strip_tags
mysql_real_escape_string,
addlashes ,
striplashes,
htmlentities ,
htmlspecialchars

y asi entiendas como funcionan , asi te sera mas facil entender que cosas debes hacer en cada momento en formularios , en urls , etc..... te sera mas facil aplicar seguridad por ti mismo


Muchas gracias lo are te lo aseguro, y gracias a todos tambien, y si saben de alguna otra recomendacion para seguridad?, cualquier aporte se agradece.

Etiquetas: bulnerable, hacking, inyección, kacker, xss
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:03.