Antes escribió:
function login($username,$password){
$username = str_replace("'","",$username);
$password = str_replace("'","",$password);
$username = str_replace(";","",$username);
$password = str_replace(";","",$password);
$sql = "SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = '".$username."' AND password='".
}
Despues escribió:
function login($username,$password){
$sql = "SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = '".addslashes($username)."' AND password='".addslashes($password)."';";
}
bueno para empezar el SQL estaba incompleto,
ahora explicaré las razónes por las cuales se usan este tipo de precauciones.
contenido escribió:
xpass';
INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');
SELECT COUNT(id_usuario) FROM usuariosWHERE '1
Ejecución:Código :
archivo.php?usuario=xusuario&password=xpass';INSERT%20INTO%20usuarios%20FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');SELECT%20COUNT(id_usuario)%20FROM%20usuarios%20WHERE '1
aqui tendriamos el resultado sin addslashes();
si se usa reemplace de igualmanera se puede saltar usando en las comillas doble comillas así: " que de igual manera no afectaría. por ello se usa addslashes.
SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='xpass';
INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');
SELECT COUNT(id_usuario) FROM usuarios WHERE '1';el este ejemplo se ha insertado un usuario que antes no estaba permitido a acceder y a demás se ha logueado un usuario con la identificación de el id inferior disponible.
el sistema gestor de bases de datos entendería el query de la siguiente manera:
SGBD escribió:
SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='xpass';
INSERT INTO usuarios FIELDS(usuario,password)VALUES('nuevousuario','nuevaclave');
SELECT COUNT(id_usuario) FROM usuarios WHERE '1';
y ahora en el caso de el uso de addslashes() la cosa sería diferente.
SELECT COUNT(id_usuario) FROM usuarios WHERE nombre = 'xusuario' AND password='
xpass\';
INSERT INTO usuarios FIELDS(usuario,password)VALUES(\'nuevousuario\',\'nuevaclave\');
SELECT COUNT(id_usuario) FROM usuarios WHERE \'1';y todo el query maligno sería ingresado como un intento de clave, lo cuál retornaría un total de 0 registros