Foros del Web » Programando para Internet » PHP »

protección contra injection

Estas en el tema de protección contra injection en el foro de PHP en Foros del Web. buenas tardes, he estado leyendo cosas acerca de sql injection y ando detrás de adoptar una medida que descubra los caracteres más probables en un ...
  #1 (permalink)  
Antiguo 20/08/2005, 12:01
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
protección contra injection

buenas tardes,

he estado leyendo cosas acerca de sql injection y ando detrás de adoptar una medida que descubra los caracteres más probables en un ataque como pueden ser "--", " ' ", "select", "drop", "update", "delete", etc. en las cajas de texto de mis formularios y en caso de encontrarlos no permita continuar devolviendo una página de error personalizada.
pero no tengo ni idea de como hacerlo ni por donde empezar.

como siempre os agradecería cualquier comentario, siempre los aprovecho y si algunas veces no he respondido a ellos es porque no he terminado de resolver el problema y no puedo mostrar la solución definitiva.
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.
  #2 (permalink)  
Antiguo 20/08/2005, 12:11
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 20 años, 5 meses
Puntos: 0
Deberias verificar todas las variables que envias y que entran. Podrias utilizar htmlentities(); o htmlspecialchars(); con esto las comillas y demas signos los convierte todos al lenguaje html. Por ejemplo tienes un formulario de contacto y envias las variables por el metodo POST
<?
if(isset($_POST['enviar'])){

//recoges los datos del formulario y con el htmlentities las comillas las convierte a html
$titulo=htmlentities($_POST['titulo']);
}
else{?>
<form ......>



</form>
<?
}?>
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #3 (permalink)  
Antiguo 21/08/2005, 07:14
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
Buenas, yo tengo una clase con unos metodos con expresionres regulares para controlar la entrada de valores.

metodo:

- numerico
- alfanumerico
- alfa

asi controlo lo que pueden introducir y cada metodo me devuelve un valor de verdadero o falso.

Un saludo.
__________________
www.pensandoenred.com
  #4 (permalink)  
Antiguo 21/08/2005, 08:22
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
no entiendo que es injection (perdonen mi ignorancia). De que tipo de ataques hablamos, en que consisten, si lo pueden resumir lo agradeceria...
  #5 (permalink)  
Antiguo 22/08/2005, 01:56
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 8 meses
Puntos: 1
Buenas Manu Leon,

Un ejemplo sería un ataque de login y password :)

Que los parametros que introduces para validarte llevan comandos sql para engañar a la consulta cuando se ejecuta y así que se le de como válida.

Hay muchos programadores que han cometido este error, yo el primero :) pero con la experiencia y a base de meteduras de pata... se va aprendiendo,

Un saludo.
__________________
www.pensandoenred.com
  #6 (permalink)  
Antiguo 22/08/2005, 02:32
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Iniciado por Manu_Leon
no entiendo que es injection (perdonen mi ignorancia). De que tipo de ataques hablamos, en que consisten, si lo pueden resumir lo agradeceria...
www.php.net/security.database.sql-injection

También para el autor del tema, claro (lease las técticas de protección).

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 22/08/2005, 11:40
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
por favor, mirar esto.

se me ha ocurrido esto, pero no sé, me parece una exageración, una salida de tono, una cosa extravagante, en mi pueblo se dice parir un niño con dos cabezas. el caso es que sirve, que detecta si alguien introduce en algún campo del formulario alguna de las palabras que dan paso a una instrucción sql.

en realidad ahora tengo el problema con el bucle foreach porque me devuelve tantas lineas como campos tiene el formulario y yo no quiero eso. quisiera en cambio mostrar una sola linea diciendo escuetamente, por ejemplo, el formulario no está correctamente cumplimentado.

pero si veis cualquier fallo, o no os gusta, o quereis comentar algo positivo o negativo pero no una recomendación a leer algo os quedaré muy agradecido.


foreach($_POST as $name=> $value){

if (ereg(insert, $value ) || ereg(update, $value ) || ereg(delete, $value ) || ereg(drop, $value ))
{
echo '$value contiene la palabra "insert,delete,update,drop,etc"</br>';
}else{
echo '$value no contiene la palabra "insert,delete,update,drop,etc"</br>';
}
}
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.

Última edición por navajito; 22/08/2005 a las 11:44 Razón: se me ha olvidado una cosa
  #8 (permalink)  
Antiguo 22/08/2005, 11:46
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
Hola MarioNunes yo también he hecho una clase con unos tres comanditos para controlar el SqlInyection, a ver, me imagino que el tuyo está mejor, si lo podes postear aquí sería bueno xD.
__________________
Julio Hernández
  #9 (permalink)  
Antiguo 22/08/2005, 16:26
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
interesante la propuesta de navajito, bloqueando el uso de esas palabras incluso alguna mas (union x ejemplo) es muy dificil realizar consultas mysql.
  #10 (permalink)  
Antiguo 22/08/2005, 16:43
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
http://www.phpinsider.com/php/code/SafeSQL/
por lo visto es una clase muy util para anular injection... hechenle un vistazo...
  #11 (permalink)  
Antiguo 22/08/2005, 17:04
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Holas.

Que una persona ponga en un formulario la palabra insert, union, select no tiene ningún peligro. El peligro está, entre otras cosas, en las comillas. Y para escaparlas existen funciones.

No hay que crear complejas funcion/clases para controlar esos datos. Simplemente hay que modificarlos silensiosamente y punto.

http://php.grn.es/manual/es/function.addslashes.php

Saludos ;)
  #12 (permalink)  
Antiguo 22/08/2005, 17:06
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 3 meses
Puntos: 7
Para evitar ese tipo de ataques, en mi opinión simplemente basta con aplicar el método addslashes:

Código PHP:
// formatting-functions.php --> Wordpress
function global_sanitize$array ) {
    foreach (
$array as $k => $v) {
        if ( 
is_array($v) ) {
        
$array[$k] = global_sanitize($v);
        } 
        else {
            if ( 
get_magic_quotes_gpc() )
                
$array[$k] = trim($v);
            else
                
$array[$k] = addslashestrim($v) );
        }
    }
    return 
$array;
}
// Lo invocan:
$_REQUEST global_sanitize($_REQUEST);
$_SESSION global_sanitize($_SESSION);
// etc 
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #13 (permalink)  
Antiguo 22/08/2005, 17:25
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
umm, llevas razon, pero si el problema son als comillas, par algo esat el javascript, se comprueba que no peuda llevar comillas el formulario ni ningun tipo de caracter extraño, solo letras numeros y guion bajo _
es decirsi introducen un = o una ' o " o / o o ; o aglo extraño, javascrip no deja mandar el formulario
  #14 (permalink)  
Antiguo 22/08/2005, 17:53
Avatar de johnnylee  
Fecha de Ingreso: abril-2005
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
si, pero en ciertos navegadores como mozilla firefox, se pueden deshabilitar las funciones javascript que tenga la pagina... al menos eso he probado yo que pasa con las funciones del lado del cliente; no se si tambien pueda deshabilitar las funciones de parte del server...

Saludos.
  #15 (permalink)  
Antiguo 22/08/2005, 17:58
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
joder, pues si eso es asi :O:O:O :S:S
  #16 (permalink)  
Antiguo 23/08/2005, 04:09
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
contestando a Manu_Leon

gracias,

lo que propongo se complementa con una conexión en la que el parámetro usuario tiene permisos limitados, en mi caso solo haría falta utilizar las palabras insert, update, select, delete. pero no tengo mucha experiencia con los permisos, solo manejo los que me ofrece mi servidor en modo gráfico.

en cuanto al enlace estoy muy mal de inglés.

y sí, se puede desactivar javascript en cualquier momento no solo firefox como dice johnnylee.
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.
  #17 (permalink)  
Antiguo 23/08/2005, 04:30
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
contestando a $thisone

gracias,

sí, poner en un campo del formulario insert, update o cualquier palabra reservada sql y después enviarlo no hace ningún daño a nadie, todo depende de la sintaxis con la que se acompañe, pero me parecía evidente que es imprescindible utilizar cualquiera de estas palabras tarde o temprano para realizar un ataque.

en cuanto a addslashes ( string cadena ) me parece que la ventaja que tiene es que no devuelve ningún error y el atacante no puede estar seguro de lo que está ocurriendo.

pero lo que no comprendo -y es que todo esto se me da muy mal- es como llegan estas cadenas al servidor y en realidad que es lo que pasa cuando se aplica esta función.

por otra parte me pregunto que es mejor en estos casos utilizar lo más previsible, que siempre será lo más estudiado por los atacantes, o utilizar algo raro como propone MarioNunes.
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.
  #18 (permalink)  
Antiguo 23/08/2005, 04:36
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
contestando a xknown

gracias,

estoy convencido de que tu código da buenos resultados pero no tengo ni idea de como lo hace, no tengo mucha experiencia y no soy partidario de utilizar cosas de las que no tengo la menor idea de como funcionan, utilizo algunos códigos de terceros complejos para mí pero tengo cierta capacidad para modificarlos y adaptarlos, en tu caso no es así, no sé por donde cogerlo, tendré que estudiar más.
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.
  #19 (permalink)  
Antiguo 23/08/2005, 05:30
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Holas.

He perdido un poco el hilo de este tema, pero digo:

La seguridad de una página no puede depender de cosas en las que el cliente puede intervenir(javascript, cookies, etc). Es que...no se como explicarlo...pero lo mas lógico sería que aprendierais a relizar estos ataques(inyección sql, xss, etc) para así saber en que se basan y poder pararlos.

Como ya e dicho antes...hay que usar addslashes() para cadenas que vallan a ir a la base de datos. Y htmlentities() o htmlspecialchars() para cadenas que se impriman por pantalla en las que el cliente puede tener acceso a ellas(ya sea mediante la URL, mediante cookies, etc).

Siento no poder explicarme mejor pero es que cuando repartieron el don de la palabra falté a clase xD

Saludos ;)
  #20 (permalink)  
Antiguo 23/08/2005, 08:51
 
Fecha de Ingreso: abril-2005
Ubicación: vivo donde puedo
Mensajes: 133
Antigüedad: 19 años
Puntos: 0
atácame otra vez.

de momento, no tengo interés en aprender a atacar bases de datos, ni estoy intentando aprender a hacerlo aprovechándome de vosotros, no soy tan ingenuo.

dicho esto lo que os propongo es que si alguien con conocimientos de sql injection quiere atacar ***amablemente*** mi base de datos podría servir para detectar si está efectivamente protegida. los datos que guardo no tienen más valor que el trabajo del volver a entrarlos pero no me gustaría tener que hacer todo el trabajo otra vez. no guardo ninguna información importante pero por favor no me hagáis un destrozo si conseguís entrar.

ir directamente aquí

http://www.carloszcom.com/base5

sugiero que os registreis antes de hacer el ataque, y después volvais a atacar utilizando el usuario "visitante_38" y la clave "navajito".

os advierto que la página es experimental y no está bonita, ni tan siquiera clara por lo que puede que requiera algún esfuerzo por vuestra parte comprender como funciona.

insisto en que en cualquier caso no os voy a preguntar como lo habeis logrado.
__________________
Visita mi página web.Carlos Zapata Company
Visita mi blog.
Únete a mi lista de correo.
--------------------------------------------------
La identidad no es lo que fuimos, ni lo que creemos que somos; la identidad es cómo miramos la mundo.

José Luis Rodríguez Zapatero, actual presidente del Gobierno español.
  #21 (permalink)  
Antiguo 23/08/2005, 09:48
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Holas.

En ningún momento he echo apología de el hacking ni nada parecido. LO que quiero dar a enteder que lo primero que hay que saber es en que consiste el ataque para poder pararlo.

Saludos ;)
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




La zona horaria es GMT -6. Ahora son las 12:20.