Ahora nuestro codigo vulnerable será...
if (isset($_GET['id'])) {
$result = mysql_query("SELECT * FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}
Ahora como ven el Anteior code es vulnerable por dos lados por el Where y por el Select entonces por Ahora vamos a asegurad solo el Select ya que esta es solo la Versión 1 de los Artículos que haré de Hardening a Web APPs y CMS...
Para empesar tenemos que saber que hacemos con la consulta ahi lo que está diciendo como quien dice en Pseudocodigo es:
Seleccionar lo que venga de pages donde el id sea el que hemos ingresado o se nos ha asignado.
Entonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.
entonces lo que harémos será no ser vagos y hacer que se ponga campo por cam y registro por registro lo que pedimos nuestra sentencia sería asi:
if (isset($_GET['id'])) {
$result = mysql_query("SELECT id FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}
siendo la tabla:
CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`hp` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
por ahora espero que esto les ayude a que ya no cometan ese error en la proxima edición del tutorial les enseñaré al arreglar el error del Where que muchos cometen.
Espero les haya Gustado.
Saludos
Dr.White
No entiendo lo que quieres decir en este apartado:
ResponderEliminarEntonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.
No veo el problema de hacer un select *.
por ahora no estoy en mi pc por eso contesto de esta manera, no entiendo muy bien lo que dices david pero haciendo una inyeccion puedes sacar datos amigo, si usas el * filtrando no hay ningun problema pero si lo haces pues te arriesgas demaciado a un robo de datos, es posible que no te roben haciendo sierto tipo de consultas pero es recomendable no usarlo, es mas vas a ver en los scripts mas importantes que no lo usan ya que usando el asterisco + inyección puedes sacar los datos de las tablas segun la posición en la que esten...
ResponderEliminarUn Saludo.