Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/11/2011, 12:29
Avatar de Rodrhigo
Rodrhigo
 
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: Seguridad PHP. inputs, SQL injection, XSS

mysql_real_escape_string le agrega slashes a un parametro que estes pasando ej:
http:// ejemplo.com/?usuario=ccsaiKo

uno cuando recibe el parametro usuario muestra informacion relevante respecto a ese usuario y envia una consulta a una base de datos algo asi:
select * from usuarios where user_name='ccsaiKo'

pero que pasa si uno modifica la url y pone algo como esto:
http:// ejemplo.com/?usuario=ccsaiKo' or ''='
la consulta te quedaria algo asi:
select * from usuarios where user_name='ccsaiKo' or ''=''

y traerias toda la informacion de todos los usuarios.
con mysql_real_scape_string agregas slashes a un parametro(cuando se agrega un slash le dices que es literal)
tu consulta quedaria asi:
select * from usuarios where user_name='ccsaiKo' or \'\'=\''

asi ahora buscara un usuario que se llame: ccsaiKo' or ''='

ahora si envias una consulta de un numero a tu base de datos debes comprobar que el dato que recibes sea realmente un numero.

con respecto a XSS se usa en chat o en comentarios(como este por ejemplo).
XSS solo afecta al cliente y no es para robar datos del servidor como si lo es una inyeccion sql.
cuando uno envia un comentario a una base de datos despues actualizas la pagina y aparece ese comentario pero que pasa si yo envie el siguiente comentario:
<script>window.location='http://www.ejemplo.com'</script>

cuando cargue la pagina me va a mostrar ese comentario pero el navegador interpreta ese comentario como un script y te transfiere a la pagina ejemplo.com. para evitar ataques XSS debes transfornar el comentario al momento de imprimirlo. Yo uso la funcion htmlspecialchars para transformar el texto( http://php.net/manual/es/function.htmlspecialchars.php )
y quedaria haci el texto anterior

&ltscript&gtwindow.location='http://www.ejemplo.com'&lt/script&gt

y el navegador lo interpreta pero no como script sino como texto y te lo imprime como texto.

Última edición por Rodrhigo; 23/11/2011 a las 17:47