Autor
|
Tema: Es este código seguro? (Leído 8,028 veces)
|
NewLog
|
He hecho el mismo post en el subforo de bugs y exploits, si ven que aquí sobra lo pueden borrar. (Aunque quizá lo borren ahí... Aishh). Bueno, he intentado programar un sistema de logueo para acceder a una página en particular, pero con que lo he hecho yo desde cero con los pocos conocimientos que tengo, me pregunto si este sistema es totalmente seguro, dejando a parte SQL Injections (ya que aun no he mirado eso). El código es el siguiente: Formulario.php <html> <head></head> <body bgcolor="#000" text="#FFFFFF"> <center><br><br><br> <form action="acceso.php" method="post"> Login:<br><input name="login" type="text" maxlength="9"></input><br><br> Password: <br><input name="pass" type="password" maxlength="9"></input><br><br> <input type="submit" value="Enviar"> </form> </center> </body> </html>
Este no hace falta ni que lo explique porqué creo que es muy simple. Acceso.php <?php $login= htmlentities($_POST['login']); $pass= htmlentities($_POST['pass']); $db="Usuarios"; $tabla="Datos"; echo "Datos:"; echo "<br>"; echo "El login es $login<br>"; echo "El password es $pass<br>";
$conexion=mysql_connect("localhost","root",""); if(!$conexion){ echo "No se ha podido conectar a la base de datos<br>"; return 0; }else{ mysql_select_db($db, $conexion);
$res=mysql_query("SELECT * FROM $tabla", $conexion); echo "Res=$res<br>"; while($fila = mysql_fetch_array($res)){ $login1 = $fila['login']; $password1 = $fila['pass']; echo "Login leido= $login1 Password leido=$password1"; } } mysql_close(); if(($login==$login1)&&($pass==$password1)){ header("location:AccesoValidado.html"); }else{ header("location:AccesoDenegado.html"); } ?>
No es muy difícil de entender, si tenéis alguna duda preguntad. Al final de este código es donde se comprueba si el password y usuario es el mismo. Yo creo que es seguro ya que el valor de una variables en php NO se pueden modificar externamente, no? Y si se intenta entrar a Acceso.php este redirecciona directamente hacia AccesoDenegado.html. Lo que aun no sé es como hacer que a Accesovalidado sólo puedan llegar las personas loguedas. Me pregunto si es posible hacerlo sin cookies. Gracias.
|
|
|
En línea
|
|
|
|
SirLanceCC
|
No entiendo esto $login1 = $fila['login']; $password1 = $fila['pass']; echo "Login leido= $login1 Password leido=$password1"; } } if(($login==$login1)&&($pass==$password1)){ header("location:AccesoValidado.html"); }
por que $login1 sólo tendrá el ultimo dato leido... quizá no te ha provocado error si tienes un solo usuario en tu tabla... Y la consulta yo la haría así para : SELECT usuario, password FROM $tabla WHERE login='$login' AND pass='$pass'
Si existe el usuario con la conraseña correcta te devolverá sus datos, si no no te devolverá nada... Y además para asegurar un poco más deberías de cifrar las contraseñas con md5() por ejemplo. Es decir en tu base de datos tienes la contraseña cifrada y luego, la contraseña que recibes la encriptas también y luego la comparas con la que está almacenada.
|
|
« Última modificación: 23 Enero 2008, 16:21 pm por -| Sir_Lance |- »
|
En línea
|
|
|
|
NewLog
|
Sí, sí, en la base de datos sólo tengo un usuario, así que el algoritmo de búsqueda no es importante. Aun así, me apunto tu manera de hacer la consulta (aun no sé MySQL).
Lo que dices de cifrar la contraseña, me pregunto si es posible encriptarla directamente en la página formulario.php y cuando se envie YA esté cifrada. Además no con una función predeterminada por php sinó con una creada por mi mismo. Sin que la contraseña se envie en texto plano en ningún momento!
Además, ahora se me ha ocurrido una pregunta, sabéis que google tiene un buscador de código? Pues en él se pueden leer códigos en php que en teoria son de webs reales. Es posible que aunque el código se interprete en el servidor alguien pueda obtener el código php de la web?
Gracias -| Sir_Lance |-
|
|
|
En línea
|
|
|
|
Hans el Topo
Desconectado
Mensajes: 1.754
"Estoy cansado de no hacer nada"
|
por el foro tienes logins exos
|
|
|
En línea
|
|
|
|
NewLog
|
Pero no me va la comida rápida ^^ Aun así les echaré un vistazo.
|
|
|
En línea
|
|
|
|
baZZ
Desconectado
Mensajes: 168
|
No utilices caracteres comodín. En vez de SELECT *, haz SELECT de los campos que necesites. Se considera un buen hábito...
Un saludo
|
|
|
En línea
|
- EVGA ATX - Intel X58 - i7 920 @ 3,2 Ghz - 2x260 gtx 216 SLI - 3x1 GB OCZ DIMM DDR3 1600 Mhz - Tacens Sagitta II - Seagate 7200.12 Falta: - T.R.U.E ^^ - i7 @ 4,0 Ghz
|
|
|
Carxl
Desconectado
Mensajes: 29
Intentando ser webmaster!!!
|
Hola a todos, cómo van?? Si me permiten... NewLog, lo que te dice Sir_Lance es cierto, esa es la manera correcta de peguntar si es un usuario válido, así sea un solo usuario Además a manera de consejo te recomiendo que el conectar y seleccionar una DB sea una función o una clase, y la llames la veces que la necesites. Y lo que dice baZZ, mas que un hábito, se haría por ahorrar recursos del server Saludos
|
|
|
En línea
|
Hay 10 tipos de personas, los que entienden binario... y los que no!
|
|
|
NewLog
|
Gracias por los consejos sobre MySql.
Alguien sabe lo de google? Y aun más, es posible leer (por un usuario) el valor de las variables en php que yo no muestro?
Gracias!
|
|
|
En línea
|
|
|
|
SirLanceCC
|
Es posible que aunque el código se interprete en el servidor alguien pueda obtener el código php de la web?
Pues que yo sepa solo si el autor lo publica o si encuentras alguna vilnerabilidad en el sistema o en el servidor. Yo creo que en el caso de google han de ser los autores quienes publican los codigos. Lo que dices de cifrar la contraseña, me pregunto si es posible encriptarla directamente en la página formulario.php y cuando se envie YA esté cifrada. Sin que la contraseña se envie en texto plano en ningún momento!
Bueno eso... creo que solo con https, aunque la verdad no lo se... en un formulario normal en http creo que la contraseña si viaja en texto plano Además no con una función predeterminada por php sinó con una creada por mi mismo. Yo creo que no hay que reinventar la rueda a menos que tu plan sea reinventar la rueda. Para hacer una función de cifrado que sea medianamente buena son necesarios meses de trabajo (supongo). Además md5 es un buen algoritmo. Lo que aun no sé es como hacer que a Accesovalidado sólo puedan llegar las personas loguedas. Me pregunto si es posible hacerlo sin cookies. Se pueden usar las sesiones de php.
|
|
« Última modificación: 24 Enero 2008, 15:53 pm por -| Sir_Lance |- »
|
En línea
|
|
|
|
NewLog
|
Yo creo que no hay que reinventar la rueda a menos que tu plan sea reinventar la rueda. Para hacer una función de cifrado que sea medianamente buena son necesarios meses de trabajo (supongo). Además md5 es un buen algoritmo.
No es que quiera reinventar la rueda. Simplemente es que si alguna vez alguien consigue "snifar" la contraseña no la podrá asociar a ningún algoritmo conocido del cual exista un programa para romperlo (como en el caso de md5 (que no es romperlo, pero se puede llegar a saber la contraseña)) y es muy posible que se quede o_O. Y no nos engañemos, no todos los que saben usar un sniffer tiene idea de lo que es un algoritmo. Así que aunque el algoritmo no sea complicado, seguro que es mucho más útil. Al menos eso pienso yo ^^.
|
|
« Última modificación: 24 Enero 2008, 23:31 pm por NewLog »
|
En línea
|
|
|
|
|
|