Foros del Web » Programando para Internet » PHP »

Proteger con contraseña

Estas en el tema de Proteger con contraseña en el foro de PHP en Foros del Web. Buenas otra vez, He buscado y rebuscado por ahí, pero lo único que encuentro son dos opciones: una muy buena pero que requiere tener apache ...
  #1 (permalink)  
Antiguo 15/08/2005, 11:15
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Proteger con contraseña

Buenas otra vez,
He buscado y rebuscado por ahí, pero lo único que encuentro son dos opciones: una muy buena pero que requiere tener apache instalado en el servidor, que no es mi caso pues no funciona.
La segunda funciona pero no me vale, pues se crea una página con el formulario que pide el nombre y la contraseña, ésta te conduce a una página de control donde se comprueban los datos y, si son correctos, te manda a la página a la que quieres acceder. Pero claro, si uno se salta el formulario y accede a la página porque es más chulo que nadie y ha dado con la dirección... pues de nada sirve la contraseña.

También hay otra opción que es proteger el archivo desde DW pero... ¿sabéis hasta qué punto es eso seguro?

No os pido el código, sólo que me digáis por dónde tirar, que me digais qué tipo de función debo utilizar y ya sigo buscando para no daros tanta guerra ¿REs que estoy aprendiendo a marchas forzadas y necesito MUCHA AYUDA como muchos otros, supongo.

GRACIAS (por cierto, es para una página a la que sólo podrá acceder el administrador para modificar datos, si hay otro modo mejor de hacerlo... os agradeceré cualquier comentario)
  #2 (permalink)  
Antiguo 15/08/2005, 12:36
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Hola,

Hay un script muy bueno de cluster, creo q se llama autentificator(usa el buscador). Aun asi te comento referente a lo que dices de... "si uno se salta el formulario y accede a la página porque es más chulo que nadie y ha dado con la dirección... pues de nada sirve la contraseña."...Para esto deberias de introducir en cada pagina en la que se necesita autentificacion, un codigo que compruebe que los datos recogidos(ya sea por cookie, SESSION...)son los correctos y si no lo son que le redireccione a una pagina de error o a donde quieras.

Un saludo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #3 (permalink)  
Antiguo 15/08/2005, 12:54
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Muchas gracias Geri,

Probaré primero con el código de autentificación. Tengo que buscarlo por ahí pues no tengo ni idea de cómo hacerlo. Si no probaré con el script de cluster.
  #4 (permalink)  
Antiguo 15/08/2005, 17:00
Avatar de Bytevamp  
Fecha de Ingreso: junio-2005
Ubicación: /var/www/
Mensajes: 789
Antigüedad: 12 años, 5 meses
Puntos: 7
Y si no revisa http://www.desarrolloweb.com/manuales/37/, ahi te explican paso a paso como hacer un sistema de autenficacion.

Espero que te sea util.
  #5 (permalink)  
Antiguo 15/08/2005, 20:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Debes crear variables de sesión (lo ideal) o cookies (no tan seguro) a la hora de autentificar y validar a tu usuario para luego posteriormente en cada página de tu sistema validar la existencia de esa variable de sesión o cookie. Si existe es que pasó por la validación y la pasó correctamente, si no existe es que se pasó de listo e intenta acceder directamente sin pasar por el peaje.

Autentifiactor (http://php.cluster-web.com/autentificator) funciona así y usa sesiones para tal fin. Los usuarios los gestiona sobre Mysql. Puedes tomarlo como ejemplo para implementar tu própio sistema de usuarios.

Un saludo,
  #6 (permalink)  
Antiguo 16/08/2005, 04:57
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Ok creo q ya lo tengo, muchas gracias a los tres. Si no vuelvo por aquí... ¡es que lo he conseguido!
  #7 (permalink)  
Antiguo 16/08/2005, 06:19
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Ahora me surge otro problema, y es que la página protegida es de donde tomo las variables para otras páginas no protegidas, y claro me sale el error Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/html/formulario.php:12) in /var/www/html/seguridad.php on line 3

Me explico: La página que protejo es la de precios, donde guardo las variables que solo puede modificar el administrador con un usuario y contraseña.
Ese mismo archivo lo incluyo en la página donde el usuario hace su reserva, de forma que le aparece la tabla con los precios. Pero al incluir la página, también incluye el session start, lógicamente, y aparece el error puesto que no está en la primera linea del código, y tampoco quiero restringir el acceso al formulario. ¿Sabeis cómo puedo hacer desaparecer esa linea? ¿Cómo hago que ignore el script?

Gracias otra vez
  #8 (permalink)  
Antiguo 16/08/2005, 06:43
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Vale lo planteo de otra forma a ver si sale así
¿Cómo le digo que, si está en x página, anule el script? ¿Se puede hacer de esta forma?
No doy con ello
  #9 (permalink)  
Antiguo 16/08/2005, 10:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero que código estás usando? y como ..?

El error te está diciendo que has puesto algo de HTML antes de "session_Start()" o del código que lo ejecuta (sea externo vía un include() o interno)

El caso es que no puedes hacer cosas como

<html>
<head>
</head>
<body>
<?
include ("seguridad.php");
// etc ...
?>
</body>
</html>

donde en "seguridad.php" haces un session_start() .. ese "session_start()" ha de estar antes de todo el HTML que puedas tener en ese script (salida).

Un saludo,
  #10 (permalink)  
Antiguo 16/08/2005, 12:41
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
Hola a todos, la cuestion aqui me parece que es manejar las sesiones, si ? bueno voy a poner un ejemplo. esta es la forma en la que trabajo yo...

Para empezar tengo el index, con un form...

index.php
Código PHP:
<table border=1 bordercolor="000000" cellspacing="0" bgcolor="abcdef" align="center">
<tr><td>
<form action="control.php" method="POST">
    <table align="center">
    <?if ($_GET["errorusuario"]=="si"){
                echo 
"<tr><td align='right' colspan=2>Error de usuario o contraseña</td><tr>";
            }
?>
    <tr>
        <td>Usuario
        </td>
        <td align="right">
            <input type="text" name="usr">
        </td>
    </tr>
    <tr>
        <td>Password
        </td>
        <td align="right">
            <input type="password" name="pwd">
        </td>
    </tr>
    <tr>
        <td align="center" colspan=2>
            <input type="submit" value="Login">
        </td>
    </tr>
    <tr>
        <td colspan=2 align="center">www.globaling.com.ar</td>
    </tr>
    </table>
</form>
Como podras ver en el codigo este form llama a control.php, enviandole los datos por medio del metodo POST.

control.php
Código PHP:
<?php 
$usuario 
$_POST["usr"]; 
$clave $_POST["pwd"]; 
if (
$usuario == "tunombre" && $clave == "tuclave
        session_start(); //inicio sesion
        $_SESSION["
autentificado"]= "SI"; // le doy un valor a sesion
        print "
<meta http-equiv=Refresh content="0 ; url=admin.php\">"//y lo redirigo a la pagina de admin
}else{ // sino
        
print "<meta http-equiv=Refresh content=\"0 ; url=index.php?errorusuario=si\">"//lo mando al index con un error de usuario....

?>
ahora te muestro el codigo del archivo que quiero restringir ... ok?

admin.php
Código PHP:
<?php 
include("seguridad.php");
echo 
"Estas en un area restringida...";
echo 
"<a href='salir.php'>Salir</a>";
?>
como podra ver el archivo admin.php hace un include a seguridad.php, que es lo que hace este archivo, controla de que la sesion este iniciada, y de este modo, verifica, si has pasado o no por el login... te muestro el codigo...

seguridad.php
Código PHP:
<?php 
session_start
(); 
if (
$_SESSION["autentificado"] != "SI") { 
    
header("Location: index.php"); 
    exit(); 
}     
?>
bien en el archivo admin, tambien vemos que hay un link a salir.php, que se encarga de destruir la sesion, para evitar accesos a personas sin autorizacion....

salir.php
Código PHP:
<?php 
session_start
(); 
session_destroy(); 
print 
"<meta http-equiv=Refresh content=\"0 ; url=index.php\">"
?>
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #11 (permalink)  
Antiguo 17/08/2005, 10:46
 
Fecha de Ingreso: agosto-2005
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Vaya nunca coincidimos es una pena. Me parece que, después de todo, lo q quiero hacer no se puede. A ver... he utilizado exactamente el mismo método q turco, con su página de control, su include seguridad, etc. para la página de precios.
Lo q pasa es q esa pág no imprime nada en pantalla, sólo guarda el valor de las variables para las tablas de los precios.
Entonces, en la página del formulario para las reservas, es donde incluyo precios.php para obtener los valores. A su vez precios.php incluye seguridad.php pues es la protegida. Y aquí creo q está el fallo, q intento hacer algo q no se puede... ¿o si? Os dejo el código de todo a ver si se entiende mejor:
Autentificación:


Código PHP:
<html> 
<head> 
<title>Autentificación PHP</title> 
</head> 
<body> 
<h1>Autentificación </h1> 
<form action="control.php" method="POST"> 
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0"> 
<tr> 
<td colspan="2" align="center" 
<? if ($_GET["errorusuario"]=="si")
{
?> 
bgcolor=red><span style="color:white"><b>Datos incorrectos</b></span> 
<?}
else
{
?> 
bgcolor=#cccccc>Introduce tu clave de acceso 
<?}
?>
</td> 
</tr> 
<tr> 
<td align="right">USER:</td> 
<td><input type="Text" name="usuario" size="8" maxlength="50"></td> 
</tr> 
<tr> 
<td align="right">PASSWD:</td> 
<td><input type="password" name="contrasena" size="8" maxlength="50"></td> 
</tr> 
<tr> 
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td> 
</tr> 
</table> 
 
</form> 
Tu ip:
  <?
echo $REMOTE_ADDR 
?>
<br>
<a href="salir.php">Salir</a>
</body> 
</html>
Control.php:
Código PHP:
<? 
if ($_POST["usuario"]=="richard" && $_POST["contrasena"]=="universal123"){ 

    
session_start(); 
    
$_SESSION["autentificado"]= "SI"
    
header ("Location: precios.php"); 
}else { 

    
header("Location: autentificacion.php?errorusuario=si"); 

?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
</body>
</html>

Seguridad.php:
Código PHP:
<? 

session_start
(); 

if (
$_SESSION["autentificado"] != "SI") { 
   
    
header("Location: autentificacion.php"); 
    exit(); 

?>


precios.php:
Código PHP:
<?php 
include("seguridad.php"); 
 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?
$pp1 
53;
$pp2 75;
$pp3 53;
$pp4 75;
$pp5 53;
$pu1 49;
$pu2 69;
$pu3 49;
$pu4 69;
$pu5 49;
$info1 "Buggy incluido";
?> 
</body>
</html>

Y lo q quiero es q no pida autentificación para entrar en esta página:

formulario.php:
Código PHP:
<?php
include 'precios.php';
?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>formulario</title>
</head>

<body>
<form name="form1" method="post" action="confirmar.php">

<table width="800" border="0" align="center">
  <tr align="right">
  <td colspan="3" align="left">
 <table width="800"  border="0" align="center" cellpadding="2" cellspacing="2" class="body">
    <tr align="center" valign="middle">
      <td width="250" bgcolor="#C9EDC9" class="bodyblack"><strong>Periodo</strong></td>
      <td width="175" bgcolor="#DEEAFE" class="bodyblack"><strong>Precio p&uacute;blico</strong></td>
      <td width="175" bgcolor="#C9EDC9" class="bodyblack"><strong>Precio Universal</strong></td>
      <td width="200" height="15" bgcolor="#DEEAFE" class="bodyblack"><strong>Informaci&oacute;n</strong></td>
    </tr>
    <tr align="center" valign="middle">
      <td bgcolor="#C9EDC9">Baja (01/06/2005 - 31/08/2005) </td>
      <td bgcolor="#DEEAFE"><?
    
echo "$pp1";
    
?>
&euro; </td>
      <td bgcolor="#C9EDC9"><?
    
echo "$pu1";
    
?>
&euro; </td>
      <td bgcolor="#DEEAFE"><?
    
echo "$info1";
    
?>
      </td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#FFFFFF">
      <td bgcolor="#C9EDC9">Alta (01/09/2005 - 30/11/2005)</td>
      <td bgcolor="#DEEAFE"><?
    
echo "$pp2";
    
?>
&euro; </td>
      <td bgcolor="#C9EDC9"><?
    
echo "$pu2";
    
?>
&euro; </td>
      <td bgcolor="#DEEAFE"><?
    
echo "$info2";
    
?></td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#FFFFFF">
      <td bgcolor="#C9EDC9">Baja (01/12/2005 - 15/02/2006)</td>
      <td bgcolor="#DEEAFE"><?
    
echo "$pp2";
    
?>
&euro; </td>
      <td bgcolor="#C9EDC9"><?
    
echo "$pu3";
    
?>
&euro; </td>
      <td bgcolor="#DEEAFE"><?
    
echo "$info3";
    
?></td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#FFFFFF">
      <td bgcolor="#C9EDC9">Alta (16/02/2006 - 31/05/2006)</td>
      <td bgcolor="#DEEAFE"><?
    
echo "$pp4";
    
?>
&euro; </td>
      <td bgcolor="#C9EDC9"><?
    
echo "$pu4";
    
?>
&euro; </td>
      <td bgcolor="#DEEAFE"><?
    
echo "$info4";
    
?></td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#FFFFFF">
      <td bgcolor="#C9EDC9">Baja (01/06/2006 - 31/08/2006)</td>
      <td bgcolor="#DEEAFE"><?
    
echo "$pp5";
    
?>
...etc...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.