Пароль защищает страницу? (С доступом к БД) - PullRequest
0 голосов
/ 29 августа 2011

Пара вопросов здесь: Моя конечная цель - защитить паролем файл logged_in.php.

Примечание: я только начинающий / средний программист, поэтому я хотел бы получить четкие объяснения, пожалуйста.

Во-первых, я установил имя пользователя и пароль в таблице базы данных.

  1. У меня есть две страницы: login.php и logged_in.php (имена приведены только для примера).Как «потребовать» от пользователя сначала пройти login.php (процесс входа в систему), чтобы получить доступ к logged_in.php (если введенные имя пользователя / пароль верны)?

  2. Это лучший способ защитить страницу паролем?

Что я пробовал:

Login.php:

<?php
            $db_host="host";
            $db_user="user";
            $db_pass="pass";
            $db_name="name";
            $db_table="table";
            $user = mysql_real_escape_string(strip_tags($_POST['user']));
            $pass = mysql_real_escape_string(strip_tags($_POST['pass']));

            mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
            mysql_select_db($db_name) or die(mysql_error());

            if(isset($user) && isset($pass))
            {
                $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'";
                $result = mysql_query($sql);
                $count = mysql_num_rows($result);
                if($count == 1)
                {
                    header("location:logged_in.php");
                }
                else
                    header("location:bad_login.html");
            }
        ?>
  • Проблема с моим кодом на данный момент заключается в том, что кто-то может напрямую ввести URL-адрес logged_in.php и получить доступ к странице, не будучи «обязательным», чтобы сначала пройти через login.php (я уверен, чтоэто очевидно для всех ..).

  • Я поставил require(login.php); в верхней части logged_in.php;однако, это не сработало.

  • Я проверил в Google несколько хороших учебников по этой теме, к сожалению, я не смог найти ни одного, который имел бы четкие объяснения.

  • Я также видел несколько других вопросов по этой теме относительно stackoverflow, но они мне не очень помогли.

Ятакже заинтересован в возможности защитить мою страницу с помощью метода, который использует phpMyAdmin (когда вы набираете URL-адрес и нажимаете ввод, в раскрывающемся меню в верхней части браузера запрашивается имя пользователя / пароль).Я не знаю, как это работает.Если кто-то может сказать мне, как это работает, я готов полностью игнорировать метод, который я пытаюсь использовать в данный момент (если метод phpMyAdmin достаточно безопасен и довольно прост в реализации).

Спасибо зазаранее!

1 Ответ

2 голосов
/ 29 августа 2011

Используйте переменную $ _SESSION:

<?php

            session_start();

            $db_host="host";
            $db_user="user";
            $db_pass="pass";
            $db_name="name";
            $db_table="table";

            mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
            mysql_select_db($db_name) or die(mysql_error());

            $user = mysql_real_escape_string(strip_tags($_POST['user']));
            $pass = mysql_real_escape_string(strip_tags($_POST['pass']));

            if(isset($user) && isset($pass))
            {
                $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'";
                $result = mysql_query($sql);
                $count = mysql_num_rows($result);
                if($count == 1)
                {
                    $_SESSION['username'] = $user;
                    header("location:logged_in.php");
                    exit();
                }
                else
                    header("location:bad_login.html");
                    exit();
            }
        ?>

logged_in.php:

<?php

session_start();

// check if $_SESSION was setting before
if (!isset($_SESSION['username']))
{
    header("Location: login.php?e=access_denied");
    exit();
}
?>

Имя входа phpMyAdmin отличается тем, что для входа в систему используются имя пользователя и пароль MySQL, поэтому phpMyAdmin не требуетсясоздать базу данных и таблицу для входа в систему, как ваш код

Также вам нужен выход:

logout.php

<?php

session_start(); // <-- Oops!!

// unset all $_SESSION variables
session_unset();
session_destroy();
header("Location: logged_in.php?m=logout_success");
exit;

?>
...