Cita:
Iniciado por xosgon Comprendo, no obstante en el código que pongo arriba del acceso al admin, en una ocasión escribiendo algo como ´0=0´dejaba entrar dando igual el usuario que pongas, en tehoria lo solucionaron, pero no estoy seguro, yo probe hace un rato y saltaba un error de apache que decia:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/.. on line 21
no, en realidad los backticks
` solo sirven para nombrar las columnas y tablas en MySQL y similares...
si tu haces eso definitivamente es un error de sintaxis SQL, porque no se trata de ningún nombre de columna, etc...
Cita:
Iniciado por xosgon Evidentemente lo que más me urge securizar es ese login del admin.
Por otro lado mi aplicación tiene las register globals en ON, esto en que afecta a la seguridad de la web...?
si, es un grave error... lo mejor es trabajar con dicha opción deshabilitada...
ahora... simplemente debes escapar tus variables antes de usarlas... con las funciones definidas para ello (
consulta el manual)
Código PHP:
$foo = $_GET['bar']; // ' OR 1=1 OR '
$sql = "SELECT * FROM tabla WHERE baz='buzz' AND candy='$foo'";
/* SELECT * FROM tabla WHERE baz='buzz' AND candy='' OR 1=1 OR '' */
$foo = addslashes($foo); // \' OR 1=1 OR \'
$sql = "SELECT * FROM tabla WHERE baz='buzz' AND candy='$foo'";
/* SELECT * FROM tabla WHERE baz='buzz' AND candy='\' OR 1=1 OR \'' */
otro caso sencillo es al usar valores INT, lo correcto sería hacer el typecasting necesario...
Código PHP:
$foo = (int) $_GET['bar']; // 13x
$sql = "SELECT * FROM tabla WHERE id=$foo";
/* SELECT * FROM tabla WHERE id=13 */
al hacer esto aseguramos la integridad y tipo de datos, es un método fiable... (: