Protejer página con php

Iniciado por Marciano_79, 16 Septiembre 2016, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Marciano_79

Hola estimados... quiero pedir de vuestra ayuda, para poder darle seguridad a una página que tiene un panel de control... para esto he creado un formulario de inicio de sesión, en la cual todo me funciona muy bien (completamente testado) ingreso sin problemas ... como así la sesión queda bien cerrada... el problema surge que se puede entrar a la página de admin por la URL saltándose el login solo escribiendo la ruta... me gustaría crear una función que no permita esto y que cuando se intente, este redirija a mi index donde tengo el formulario para iniciar sesión...  la verdad no tengo idea de cómo se hace... he leído de todo pero aun no puedo entender cómo se realiza... favor si alguien puede echarme una mano... dejo mi códigos a usar.

INDEX.PHP (en esta misma página tengo el formulario de ingreso)

Código (php) [Seleccionar]
sec_session_start();

if(isset($_SESSION["username"])){
header("Location: ver.php");
}

if(!empty($_POST))
{
$email = mysqli_real_escape_string($cnx,$_POST['email']);
$password = mysqli_real_escape_string($cnx,$_POST['pass']);
$error = '';

$sha1_pass = sha1($password);

$consulta = "SELECT NOMBRE FROM usuario_admin WHERE EMAIL = '$email' AND PASSWORD = '$sha1_pass'";
$result=$cnx->query($consulta);
$rows = $result->num_rows;

if($rows > 0) {
$row = $result->fetch_assoc();
$_SESSION['username'] = $row['NOMBRE'];
$_SESSION['password'] = $row['PASSWORD'];

header("location: ver.php");
} else {
$error = "El nombre o contraseña son incorrectos";
}
}


FUNCIONES.PHP

Código (php) [Seleccionar]
function sec_session_start() {
    $session_admin_panel = 'username';   
    $secure = "SECURE";

    // detiene javascript al  acceso de la sesion id.
    $httponly = true;

    // fuerza la sesion al uso de cookies
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: ../index.php");
        exit();
    }

   
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);

   
    session_name($session_admin_panel);

    session_start();            // inicia la sesion
    session_regenerate_id();    // regenera la sesion.
}


Estos son los archivos que manejo hasta el momento, pero como decía, necesito una función que proteja el acceso a la página ver.php y que obligué hacer login... como puedo hacer esto? Muy agradecido de antemano a quien me quiera ayudar.. gracias.!

engel lex

En cada sección de la web debes verificar si la sesión se inició apropiadamente, si no, header redirect + exit()
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Marciano_79

Hola gracias por responder.. lo que me indicas lo comprendo pero nose como crear en si la funcion.. intento crear algo así pero se que no estoy ni cerca..

FUNCIONES.PHP

Código (php) [Seleccionar]
function login_check($cnx) {
   
    if (isset($_SESSION['username'], $_SESSION['password']) == true) {
        header("Location: ver.php");
        exit();
}else {
           header("Location: index.php");
        exit();
       }
}


y en la pagina VER.PHP

Código (php) [Seleccionar]
if (login_check($cnx) == true) : ?>
<p>Bienvenido <?php echo htmlentities($_SESSION['username']); ?>!</p>
<?php else : ?>
            <p>
                <span class="error">Usted no esta autorizado para ver esta página.</span> Favor <a href="index.php">Use el registro</a>.
            </p>
        <?php endif; ?>


he lo que conseguido leyendo algunas cosas por internet.. pero no consigo lograrlo.. soy muy novato  en esto..


engel lex

Como haces el logout? Probablemente no estés limpiando las variables

Por que no usas el metodo predefinidos de PHP para el manejo de sesiones?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Marciano_79

Dentro de VER.PHP llamo con un include aun archivo CABECERA.PHP donde tengo el botón cerrar sesión..

Código (php) [Seleccionar]
session_start();
    session_destroy();

    header("Location: ../index.php");
exit();


ahora sobre metodo predefinidos ni idea de eso amigo... Ahora crees que deba cambiar algo? la verdad estoy re perdido... saludos.!!

Marciano_79

Bueno ahora logre hacer que la pagina no se ingrese por la url.. pero ahora no me reconoce el login.. no me deja ingresar por user ni pass.. que podrá ser?

engel lex

Session_destroy segun PHP.net dice (puedes hacer click en tu código arriba y te llevará )

Citarsession_destroy() destruye toda la información asociada con la sesión actual. .

Para destruir la sesión completamente, como desconectar al usuario, el id de sesión también debe ser destruido. Si se usa una cookie para propagar el id de sesión (comportamiento por defecto), entonces la cookie de sesión se debe borrar. setcookie() se puede usar para eso.

Siempre debes leer la documentacion en caso de error
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Marciano_79

si.. le he incluido
Código (php) [Seleccionar]
setcookie(session_name(),'', $params["path"], $params["domain"], $params["secure"], $params["httponly"]); al archivo logout.php...

pero no entiendo porque ahora no puedo ingresar con mis datos de registro... busco el porque pero no veo porque no puedo ingresar.. no he tocado nada excepto la función para proteger la pagina que he creado... no entiendo realmente.. puedes darme una mano para ver que falla porfavor?

engel lex

Retorna todo los cambios y en cerrar session hacer un foreach a las valiables de session y las seteas a Null
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Marciano_79

  :-( bueno ahí me matastes realmente.. ni idea de como hacer eso.. gracias igual por tu tiempo, veré que encuentro por google.. saludos!!