Hola a todos.
Para evitar la inyección de código SQL en nuestra consulta (consulta que utilizamos para válidar si tiene acceso o no), podemos reemplazar los caracteres ",',/, y = por nada o un espacio en blanco usando las funciones que php tiene para ello:
//Evitando la inyección de código SQL
//Javier A. 31 DIC 04
$usuarioseguro=str_replace("\","",$_POST['usuario']); $usuarioseguro=str_replace("'","",$usuarioseguro); $usuarioseguro=str_replace("/","",$usuarioseguro); $usuarioseguro=str_replace(""","",$usuarioseguro); $usuarioseguro=str_replace("=","",$usuarioseguro);
//Creamos la sentencia SQL
$sql="SELECT contrasena FROM usuarios WHERE usuario='".$usuarioseguro."'";
Espero que os sirva.
Saludos.
hola
¿si un usuario a ingresado correctamente, por lo tanto a iniciado una sesion como se puede hacer para que no tenga acceso a otras paginas seguras de otros usuarios?
¿ para cada usuario hay que hacer un archivo de autentificacion distinto?
Gracias
Pienso que deberias de incriptar las contraseñas antes de guardarlas en la base de datos.
wenas yo ice todo tal y como ponia en el manual, incluso segui la otra posibilidad que hay, y todo funciona mu bien, el problema es q tengo puesto 3 usuarios, y solo tiene acceso el 1º de la lista de la tabla, que puedo acer pliz?
esta muy bueno el articulo sobre todo para principiantes pero queria saber porque si lo estoy probando con mi base de datos (bd) siempre me dice que los datos son incorrectos aun sabiendo que el scrip de la conexion esta bien y lo unico que hice fue cambiarle los nombres de: tabla y campos a los que yo tengo en mi bd y en nobre de toda la bd si me pueden ayudar se los agradezco de corazon.
PARA JOCA:
En mi caso necesitaba restringir el acceso segun la contraseña q se tecleaba... y este fue el script q hice ojala y sirva de algo...a mi ver con una seleccion multiple es suficiente..
<?
//-PASO 1 - conecto con la base de datos
$conn = mysql_connect("localhost","root","yomero");
//selecciono la BBDD
mysql_select_db("agenda",$conn);
//-PASO 2 - comprobar datos con una consulta SQL
//Sentencia SQL para buscar un usuario con esos datos
$ssql = "SELECT * FROM usuario WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";
//Ejecuto la sentencia
$rs = mysql_query($ssql,$conn);
//PASO 3 - VALIDACION DE ACCESO
//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa conbinación usuario contraseña
if ( mysql_num_rows($rs)!= 0 )
{
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado = "SI";
switch($_POST){
case ($_POST["usuario"]=="almacen" && $_POST["contrasena"]=="almacen"):
header ("Location: /php/seguridad/almacen/index.php");
break;
case ($_POST["usuario"]=="gerencia1" && $_POST["contrasena"]=="gerencia1"):
header ("Location: /php/seguridad/gerencia1/index.php");
break;
case ($_POST["usuario"]=="gerencia2" && $_POST["contrasena"]=="gerencia2"):
header ("Location: /php/seguridad/gerencia2/index.php");
break;
case ($_POST["usuario"]=="recursosHumanos" && $_POST["contrasena"]=="recursosHumanos"):
header ("Location: /php/seguridad/recursosHumanos/index.php");
break;
case ($_POST["usuario"]=="tesoreria" && $_POST["contrasena"]=="tesoreria"):
header ("Location: /php/seguridad/tesoreria/index.php");
break;
}
}else {
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
mysql_free_result($rs);
mysql_close($conn);
?>
..saludos.sSS.:° ..
29/8/05
Por: Deyvi Rosado DiazAlgo de codigo para este sistema de autentificacion, no soy experto en PHP pero he realizado un codigo para autentificacion y que dependiendo de el usuario redirecciona a una pagina diferente:
<?php
include("conex.php4");
$valor1=$_GET["usuario"];
$valor2=$_GET["clave"];
$conten=trim($valor1);
$ext=substr($conten,4,7); //sera utilizado para la seguridad de la pagina
$grado=substr($conten,5,6); //para especificar el grado al que reenviara.
$link1= conectarse();
$consulta="select * from alumno where usuario='$valor1' and clave='$valor2' and grado='$grado'";
$resultado=mysql_query($consulta, $link1);
if(mysql_fetch_array($resultado)>0){
switch ($ext){
case "a1p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a2p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a3p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a4p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a5p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a6p":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../primaria/portada.php");
exit();
break;
case "a1s":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../secundaria/home.php");
exit();
break;
case "a2s":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../secundaria/home.php");
exit();
case "a3s":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../secundaria/home.php");
exit();
break;
case "a1b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "a2b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "a3b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "a4b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "a5b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "a6b":
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../bach/home.php");
exit();
break;
case "doc";
session_start();
$_SESSION["autentificado"]=$ext;
header("location: ../docentes/primaria/tecnologia.php");
exit();
break;
default:
header("location:portada.htm");
exit();
}//fin swith
}else {//si no
header("location:portada.htm");
}//fin if
mysql_free_result($resultado);
mysql_close($link1);
?>
esta autentificacion es con llamado a usuarios de una base de datos.
Alguan duda alli esta mi correo
¿Usando la base de datos para reenviar a los usuarios utilizando un campo de para lanzar el link como puedo hacer que la consulta identifique el usuario ya antes registrado para seleccionar ese campo luego de direccionar con el script de seguridad o contrtol?
Primero que todo los felicito por esta web, sirve de gran ayuda para los que estamos aprendiendo.
yo descargue los archivos e intente poner a funcionar esos en una web que estoy haciendo, pero cuando digito el usuario y la clave me sale el siguiente error:
"Parse error: parse error, unexpected T_STRING in /mnt/storage/users/p/a/s/paseosdecamping/control.php on line 16"
He estado buscando como solucionar el error y no he podido, alguien sabe decirme donde encuentro documentacion para ello ??
Al ejecutar el codigo me da el siguiente error:
Parse error: parse error, unexpected T_STRING in /home/cs000164/public_html/control1.php on line 12
la linea 12 es la siguiente:
//$ssql = "SELECT * FROM Usuario WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";
Que esta mal ? Gracias
25/10/05
Por: Francisco (Piki)Gracias por vuestro consejo pero tengo una duda.
Esta sentencia redirige una página php llamada "aplicacion.php"
supongo que hay que incluir un script en esta aplicacion que verifique si se está autentificado o no.
Y que no sea $autentificado='SI' ya que, aunque soy novato, creo que se podría poner lo siguiente: url://aplicacion.php?autentificado=SI
y así daría como válida ¿no?
Ya se que eso implica que hace falta conocer el nombre de la página PHP y de la variable. ¿tan dificil es?
Gracias y enhorabuena por vuestra página.
por sque no puedea el sistema reconocerme como usuario resgistrado si inicio secion como se deveria y el isistema no me saluda tampoco
me deja ver el contenido especial
muy bueno el tutorial, pero tengo un problema.
Aunque se ejecute salir.php vuelvo atras en el navegador y de todas maneras aparece la web "protejida" ...le di f5 y ctrl f5 y de todas maneras ocurria...q puede ser ??
29/11/05
Por: dario mancilla vilchesSaludos, muy bueno el tutorial para comenzar, solo una duda, quisiera saber si ademas de la pagina web restringida, tambien podria tener acceso a archivos que solo se puedan ver a tarves de esa pagina logueada, algo asi como que a tarves de esat pagina y solo con una clave se pueda tener acceso a ciertos archivos ara descarga, bueno si alguien sabe como hacerlo, por favor comuniquelo se los agradecere mucho
Por si a alguien le sirve, como esta el script no me funcionaba, asi que debi declarar como variables $usuario y $contrasena antes de esta forma: $usuario=$_GET["usuario"];
$contrasena=$_GET["contrasena"];
y recien asi me lo tomo correctamente.
Saludos
Pablo
Para los que quieran varios usuarios usen el ejemplo del comentario y no el de descargar otra posibilidad ya que ese no funciona solo funciona el primer registro de la tabla y los demás no, y con el del ejemplo en cafe si funcionan todos los registros
Muy bueno el articulo, yo me encuentro desarrollando una aplicacion que requiere la autentificacion de los usuarios, sin embargo no se si sea conveniente crear un usuario para la base de datos con los permisos adecuados que sea igual al usuario de la aplicacion o solo crear un usuario para la aplicacion sin crear el usuario para la base de datos, con lo cual se realizaria la conexion siempre con el mismo usuario. Agradezco mucho si me pueden guiar ante esta duda. Gracias.
Que tal. estaba viendo el tutorial. y esta bueno. nada mas que tengo un pequeño problema.
Como se hace Autentifiacion de usuario pero con "msqli" y no "msql" ?
La explicación de todo esto es muy clara. Pero no me funciona. Siempre me dice que está equivocada, pero revisé millon de veces y está todo bien.
Por ultimo intenté agregar un campo con la pagina a donde tiene que entrar el usuario y modifique el control.php como acá está expuesto y tampoco funciona.
me estoy volviendo loca!! ya no se que mas probar.
Cuando estoy autentificado y pongo include ("seguridad.php");
me manda a index.php creyendo que no estoy autentificado.Supongo que habrá que almacenar algo.alguien tiene alguna idea?
Hola creo que se ha mencionado por aquí. Está todo muy claro pero no me funciona siempre me dice que el usuario es incorrecto. He probado por si tenía problemas con la conexión a la bade de datos pero eso no es... no consigo encontrar el error... Un saludo y gracias.
07/9/06
Por: Ricardo PardoGracias por los articulos son de mucha ayuda, estoy buscando alguno que pueda instalar para recuperacion de contraseñas.
a funcionado bien todo
el lio me lo da a la hora de ingresar usuarios, puesto que al no ser experto en el tema. puedo ingresar dos usuarios con los mismos datos, cosa que no deberia pasar.
la pregutna es como hacer para que solo se pueda ingresar un usuario con un nombre y no repetirse,,,,
Soy nuevo en esto del las sesiones en php y me fue de gran ayuda estos articulos. Muchas gracias.
21/1/07
Por: Demian KachukDesde mi punto de vista lo resolveria de la siguiente manera:
<?php
//--- Conecto a la base de datos
$conn = mysql_connect($host,$usuario,$pass);
//--- Selecciono la base
mysql_select_db($base, $conn);
//--- Genero la consulta
$sql_query = "select * from tbl_usuario where usr_id='" . $_POST["usuario"] . "' and usr_pass='" . $_POST["password"] . "'";
//--- Ejecuto la consulta
$sql_resul = mysql_query($sql_query, $conn);
//--- Verifico
if(mysql_num_rows($sql_resul) != 0){
session_start();
session_register("autenticado");
$autenticado = "SI";
header("Location: aplicacion.php");
}else{
header("Location: index.php?error=si");
}
//--- Libero los recursos
mysql_free_result($sql_resul);
//--- Cierro la conexion
mysql_close($conn);
?>
Me ha servido de mucho la orientacion de este articulo para la resolucion de mis sistemas.
Espero mi punto de vista les sea util.
Gracias, hasta pronto.!
Hola,me encanto la explicacion.Yo quisiera bloquear a los invitados de mi foro creado de una pagina pero no se como.Quien pueda ayudarme por favor conectese al msn o mandeme un mail a kalelchingolero@hotmail.com
Una preguntita estoy hacieno una pagina de comunidades y tengo un problema, luego que logueo a mi ususario, lo valido y todo correcto me da la bienvenida con mi nombre y todo, luego de validado doy la opccion de subir una foto a la base de datos (lo cual tambien esta listo), mi problema es que la foto lo graba en un registro diferente y no en la misma fila del usuario que se registro y valido, me entienden: Ingresa Erick ....bienvenido Erick sube tu foto, ok. la subo pero no en los registros de Erick sino en una nueva celda sin mas datos que la foto. Les agradeceria mucho si alguien me ayuda.
25/2/07
Por: Marcelo PickelnyEstimados... como serian las modificacines para trabajar sobre SQL Server 2005 ? En un sevidor con SQL no tengo ningun problema pero en SQL SERVER 2005 no me funciona.. Espero me puedan ayudar
Gracias
Muy buen manual! me ha sacado d apuros las veces q lo he consultado. aunq me desconecto d la programación siempre q vuelvo me sigue funcionando. chido
31/8/07
Por: Vicky SimancaBuenos días.
Señores, les escribo para informarles que estando interesada en la compra del manual de SISTEMA DE AUTENTIFICACIÓN PHP, y teniendo cuenta abierta en la empresa CLICKANDBUY desde hace algún tiempo, me ha sido imposible realizar la compra.
Como no tenía suficiente saldo en la cuenta para efectuar la compra, he intentado realizar el ingreso correspondiente en la misma, para poder realizarla, cual es la sorpresa por mi parte al ver que me sale un cartel que dice "ESTA OPCIÓN NO ESTÁ DISPONIBLE PARA SU PAIS".
Yo soy de VENEZUELA, y he tenido que llamar por teléfono a España, para conocer de viva voz de CLICKANDBUY, el motivo de no poder efectúar la compra.
la respuesta, ha sido que tenía que esperar 1/2 hora, y que luego de este tiempo se pondrían en contacto conmigo.
Varias horas después, sin haber tenido comunicación, he vuelto a llamar a ESPAÑA al teléfono (34) 91 790 95 89, y la contestación de esta empresa ha sido la siguiente:
"No es posible que usted pueda hacer ingreso en su cuenta de CLICKANDBUY, desde su país, Y el propietario de la página no admite compra alguna sin tener cuenta en esta compañia".
No me explico por qué no puedo hacer ingresos en mi cuenta cuando ya los hice en el pasado, en concreto para jugar en un casino on line.
A mi pregunta de ¿en qué paises no estaba habilitada la opción de ingreso en cuenta?, La respuesta fue "varios".
Al preguntar cuales paises,La respuesta fue "No me los se de memoria".
En conclusión:
Ustedes están trabajando con una compañia de pagos, que no da respuesta a los usuarios, y que supongo que al igual que yo, habrá muchos más interesados en la compra de este u otros manuales, las cuales no se podrán efectuar.
P.D. Aunque yo vivo en VENEZUELA, y en este país existe un control de cambio, yo tengo autorizadas mis tarjetas para hacer transacciones por internet en dólares ($), con lo cual no existe problema por este motivo.
Sin otro particular, reciban un cordial saludo
Vicky Simanca
10/9/07
Por: leonardo wilthewYo entiendo todo pero lo que les falta explicar es que tablas tendria que crear? el nombre y la configuracion de cada tabla!! eso es lo unico que no especifica y eso me hace falta a mi para colocarlo con el mysql
Porfavor Ayudenme
31/1/08
Por: Juan Gabriel Letelier MartínezCuando aplico el script tal como está no me acepta ningún usuario y contraseña, si cambio de 0 a 1 e la pregunta if, me acepta cualquier usuario y contraseña, eatré haciendo mal alguna otra parte?
Pueden ayudarme?
Pues este lo hice con ayuda de su manual, y otro que encontré en la red. Ojalá lo prueben y me notifiquen si tiene errores, para asi corregirlos. Gracias.
Aqui el link.
http://rapidshare.com/files/94974582/Sistema_de_Registro_y_Autentificacion_de_Usuarios_Sencillo.rar.html
<?php
//conecto con la base de datos
$coneccion = mysql_connect("localhost","root","pancho");
//selecciono la BBDD
mysql_select_db("clinicosql",$coneccion);
//Sentencia SQL para buscar un usuario con esos datos
$ssql = "SELECT USUARIO, CLAVE FROM usuarios WHERE USUARIO='$usuario' and CLAVE='$clave'";
//Ejecuto la sentencia
$rs = mysql_query($ssql,$coneccion);
if (mysql_num_rows($rs)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado = "SI";
header ("Location: menu.php");
}
else {
//si no existe le mando otra vez a la portada
header("Location: index.php?errorusuario=si");
}
?>
esto me funciona bien en un pc pero no en otro y el problema no es la base de datos o el usuario/clave (ya lo probé)
¿alguna sugerencia?
gracias
27/10/08
Por: Grajo CarajoNo sé a que se debe pero el codigo:
session_register("autentificado");
$autentificado = "SI";
header ("Location: aplicacion.php");
No me funcionó usando WAMPP 2 con sus defaults.
Sin reconfigurar nada usé
session_start();
session_register('autentificado');
$_SESSION['autentificado']="SI";
header ("Location: DemoPAGE.php?".SID);
Y todo funcionó como debía. (PHP 5.2.6) (register_globals OFF)
08/4/09
Autentificacion Usuario Acceso a datosPor: NOEHola, si yo tengo una base de datos en mysql, utilizo php para consultar y agregar datos a un libro de direcciones, que puedo hacer para que solo el usuario que entre y se identifique solo él pueda borrar o editar sus registros y no los de los demás ususarios. Yo estoy tratando de aprender este lenguaje, estoy usando plantillas de Addresbook. Saludos.
08/6/09
Diferenciar mayuscula y minusculaPor: jstebanMe parece excelente este articulo, ya lo he puesto en practica y es muy interesante para el manejo de php y mysql.
He detectado un pequeño inconveniente en la autenticacion desde mysql, el script no diferencia mayusculas de minusculas, por ejemplo, es igual ADMIN o admin, como se puede corregir el query para que diferencie las mayusculas de las minusculas
Salu2 desde Colombia.
20/8/09
preguntaPor: HasmaelFELICITACIONES POR LA PAG Y EL TUTORIAL!!!!
en la parte
mysql_select_db("nombre_bbdd",$conn);
si mi base de datos se llama susanita_BD ¿entonses seria
mysql_select_db("susanita_BD_bbdd",$conn); ????
.............................................................................................................
$ssql = "SELECT * FROM usuario WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";
mi tabla se llama costumers y dos campos se llaman user y pass ¿entonses seria:
$ssql = "SELECT * FROM costumers WHERE user='$usuario' and pass='$contrasena'"; ???
POR FAVOR CORRIGAN SI MI SINTAXIS ESTA MAL, SE LOS AGRADECERIA ETERNAMENTE
P.D.: QUE ES $conn??