Авторизация

azkaban

Постоялец
Регистрация
16 Мар 2015
Сообщения
144
Реакции
10
Всем привет, нужна помощь, нужно реализовать авторизацию, с закрытым сайтом.
Пример: Для просмотра ссылки Войди или Зарегистрируйся - главная страница закрыта
если мы после слеша захотим что-то добавить, вылазит 404 ошибка
а нужно сделать чтобы введении после слеша например /files то выскакивало окно авторизации (редирект на авторизацию).
Вот подскажите как мне эту долбанную авторизацию сделать, уже задолбался манипуляции проводить.
Кто поможет и метод действительно рабочий, сразу пишите свой кошелек, скину на пивко.

или может есть какие соображения как закрыть сайт? но при вводе логина и пароля зайти на него для просмотра
 
Последнее редактирование модератором:
htaccess htpasswd - как вариант
уже пробовал данный способ закрывает ретранслирование видео, пользователь берет код, вставляет у себя на сайте и чтобы просмотреть видео, ему нужно ввести логин и пароль
 
вот и поговорили
:)

Самый простой вариант - в index.php проверять на request URI, и выдавать какую то простую форму авторизации.
Дальше цепляем куки или сессии и в этом же файле проверяем, т.е.

Код:
if (($_SERVER['REQUEST_URI'])=='/files') {
1. Читаем куки/сессии - 
1.1. если они есть, то пропускаем
1. 2. если нет - выводим форму авторизации.
}
 
Иду уже к вам со всеми своими файлами. Может покажете что не так и куда
login.php

Код:
<?
// Страница авторизации

// Функция для генерации случайной строки
function generateCode($length=6) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
    $code = "";
    $clen = strlen($chars) - 1;
    while (strlen($code) < $length) {
            $code .= $chars[mt_rand(0,$clen)];
    }
    return $code;
}

// Соединямся с БД
$link=mysqli_connect("localhost", "admin", "admin", "admin");

if(isset($_POST['submit']))
{
    // Вытаскиваем из БД запись, у которой логин равняеться введенному
    $query = mysqli_query($link,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($link,$_POST['login'])."' LIMIT 1");
    $data = mysqli_fetch_assoc($query);

    // Сравниваем пароли
    if($data['user_password'] === md5(md5($_POST['password'])))
    {
        // Генерируем случайное число и шифруем его
        $hash = md5(generateCode(10));

        if(!empty($_POST['not_attach_ip']))
        {
            // Если пользователя выбрал привязку к IP
            // Переводим IP в строку
            $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
        }

        // Записываем в БД новый хеш авторизации и IP
        mysqli_query($link, "UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");

        // Ставим куки
        setcookie("id", $data['user_id'], time()+60*60*24*30);
        setcookie("hash", $hash, time()+60*60*24*30,null,null,null,true); // httponly !!!

        // Переадресовываем браузер на страницу проверки нашего скрипта
        header("Location: check.php"); exit();
    }
    else
    {
        print "Вы ввели неправильный логин/пароль";
    }
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Авторизация на сайте</title>
</head>
<body>
<div align="center"><h2>Авторизация на сайте:</h2>
<form action="http://www.site.ru.com/latest-updates/" method="post">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="submit">
</form></div>
</body>
</html>

reg.php

Код:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Регистрация на сайте</title>
</head>
<body>
<div align="center"><h2>Регистрация на сайте:</h2>
<form action="reg.php" method="post">
Логин: <input type="text" name="login2"><br><br>
Пароль: <input type="password" name="password2"><br><br>
<input type="submit" name="submit2">
</form></div>
</body>
</html>
<?php $connection = mysqli_connect('localhost', 'admin', 'admin', 'admin') or die(mysqli_error()); ?>
<?php if (isset($_POST['submit2'])) // Отлавливаем нажатие на кнопку отправить
{
if (empty($_POST['login2']))  // Условие - если поле логин пустое
{
echo "<script>alert('Поле логин не заполненно');</script>"; // Выводим сообщение об ошибке
}         
elseif (empty($_POST['password2'])) // Иначе если поле с паролем пустое
{
echo "<script>alert('Поле логин не заполненно');</script>"; // Выводим сообщение об ошибке
}                     
else // Иначе если поля не пустые
{
$login2 = $_POST['login2']; // Присваиваем переменной значение из поля с логином             
$password2 = $_POST['password2']; // Присваиваем другой переменной значение из поля с паролем
$query = "INSERT INTO `users` (login, password) VALUES ('$login2', '$password2')"; // Создаем переменную с запросом к базе данных на отправку нового юзера
$result = mysqli_query($connection, $query) or die(mysql_error()); // Отправляем переменную с запросом в базу данных
echo "<div align='center'>Регистрация прошла успешно!</div>"; // Сообщаем что все получилось
}
} ?>

check.php

Код:
<?
// Скрипт проверки

// Соединямся с БД
$link=mysqli_connect("localhost", "admin", "admin", "admin");

<?php
function check()
{
    if (empty($user_pass) || empty($user_name)) error("Не указан логин или пароль");
    $sql="select * from my_site where login='".$name."'";
    if ($show=mysql_query($sql))
    {
        $a=mysql_fetch_array($show);
        if ($a['pass'] != $pass) error("Неверное сочетание логин - пароль");
        else session_register("name","pass");
    }
    else error("Ошибка запроса к базе данных");
}
?>
?>

Вот все это у меня на сайте, но не могу зарегистрировать пользователя, при входе, можно написать любой логин и пароль и зайдет на сайт.
 
Вот еще надыбал код, но не понимаю его работу

Код:
if (isset($_POST['auth_name'])) {
  $name=mysql_real_escape_string($_POST['auth_name']);
  $pass=mysql_real_escape_string($_POST['auth_pass']);
  $query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'";
  $res = mysql_query($query) or trigger_error(mysql_error().$query);
  if ($row = mysql_fetch_assoc($res)) {
    session_start();
    $_SESSION['user_id'] = $row['id'];
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  }
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  exit;
}
if (isset(@$_GET['action']) AND @$_GET['action']=="logout") {
  session_start();
  session_destroy();
  header("Location: http://".$_SERVER['HTTP_HOST']."/");
  exit;
}
if (isset($_REQUEST[session_name()])) session_start();
if (isset($_SESSION['user_id']) AND $_SESSION['ip'] == $_SERVER['REMOTE_ADDR']) return;
else {
?>
<form method="POST">
<input type="text" name="auth_name"><br>
<input type="password" name="auth_pass"><br>
<input type="submit"><br>
</form>
&lt;?
}
exit;
 
а в Index.php что ?

Последний код кстати это примерно то, что нужно.

Какой то странный код, в login.php же проверяется пароль, зачем потом редирект на check.php где ничего не вызывается.

И после авторизации было бы правильно переадресовывать на страницу авторизации, или форму показывать.
 
а в Index.php что ?

Последний код кстати это примерно то, что нужно.

Какой то странный код, в login.php же проверяется пароль, зачем потом редирект на check.php где ничего не вызывается.
а в index.php у меня, как бы главная закрыта и только мыло, для главной страницы выбрана другая ссылка

Вот моя index.php
Код:
<section class="warning">
<img src="/images/logo.png" class="voodoohead" alt="" width="279" height="47">
<p>Тех. поддержка - support@site.com</p>
</section>
а в последнем коде, чтобы защитить файлы нужно прописать
Код:
require "auth.php";
 
Последнее редактирование модератором:
Изменил систему, теперь получилось так:

reg.php
Код:
<?
/**
  * registration.php
  * Страница регистрации пользователей. Предполагается, что в вашей
  * базе данных присутствует таблица пользователей users, в которой
  * есть поля id, login, password, reg_date
  */

// Подключаем файл с пользовательскими функциями
require_once('functions.php');

// Инициализируем переменные для введенных значений и возможных ошибок
$errors = array();
$fields = array();

// Заранее инициализируем переменную регистрации, присваивая ей ложное значение
$reg = false;

// Если была нажата кнопка регистрации
if(isset($_POST['submit'])) {
    // Делаем массив сообщений об ошибках пустым
    $errors['login'] = $errors['password'] = $errors['password_again'] = '';
 
    // С помощью стандартной функции trim() удалим лишние пробелы
    // из введенных пользователем данных
    $fields['login'] = trim($_POST['login']);
    $password = trim($_POST['password']);
    $password_again = trim($_POST['password_again']);
 
    // Если логин не пройдет проверку, будет сообщение об ошибке
    $errors['login'] = checkLogin($fields['login']) === true ? '' : checkLogin($fields['login']);
 
    // Если пароль не пройдет проверку, будет сообщение об ошибке
    $errors['password'] = checkPassword($password) === true ? '' : checkPassword($password);
 
    // Если пароль введен верно, но пароли не идентичны, будет сообщение об ошибке
    $errors['password_again'] = (checkPassword($password) === true && $password === $password_again) ? '' : 'Введенные пароли не совпадают';
 
    // Если ошибок нет, нам нужно добавить информацию о пользователе в БД
    if($errors['login'] == '' && $errors['password'] == '' && $errors['password_again'] == '') {
        // Вызываем функцию регистрации, её результат записываем в переменную
        $reg = registration($fields['login'], $password);
     
        // Если регистрация прошла успешно, сообщаем об этом пользователю
        // И создаем заголовок страницы, который выполнит переадресацию к форме авторизации
        if($reg === true) {
            $message = '<p>Вы успешно зарегистрировались в системе. Сейчас вы будете переадресованы к странице авторизации. Если это не произошло, перейдите на неё по <a href="login.php">прямой&nbsp;ссылке</a>.</p>';
            header('Refresh: 5; URL = login.php');
        }
        // Иначе сообщаем пользователю об ошибке
        else {
            $errors['full_error'] = $reg;
        }
    }
}
?>
<html>
<head>
    <title>Регистрация пользователей</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?
// Показываем форму только если пользователь еще не запустил процесс регистрации,
// и если регистрация не была успешной
if($reg !== true) {
?>
    <!-- Блок для вывода сообщений об ошибках -->
    <div id="full_error" class="error" style="display:
    <?
    echo $errors['full_error'] ? 'inline-block' : 'none';
    ?>
    ;">
    <?
    // Выводим сообщение об ошибке, если оно есть
    echo $errors['full_error'] ? $errors['full_error'] : '';
    ?>
    </div>
    <form action="" method="post">
        <div class="row">
            <label for="login">Укажите ваш логин:</label>
            <input type="text" class="text" name="login" id="login" value="<?=$fields['login'];?>" />
            <div class="error" id="login-error"><?=$errors['login'];?></div>
            <div class="instruction" id="login-instruction">В имени пользователя могут быть только символы латинского алфавита, цифры, символы '_', '-', '.'. Длина имени пользователя должна быть не короче 4 символов и не длиннее 16 символов</div>
        </div>
        <div class="row">
            <label for="password">Напишите ваш пароль:</label>
            <input type="password" class="text" name="password" id="password" value="" />
            <div class="error" id="password-error"><?=$errors['password'];?></div>
            <div class="instruction" id="password-instruction">В пароле вы можете использовать только символы латинского алфавита, цифры, символы '_', '!', '(', ')'. Пароль должен быть не короче 6 символов и не длиннее 16 символов</div>
        </div>
        <div class="row">
            <label for="password_again">Повторите введенный пароль:</label>
            <input type="password" class="text" name="password_again" id="password_again" value="" />
            <div class="error" id="password_again-error"><?=$errors['password_again'];?></div>
            <div class="instruction" id="password_again-instruction">Повторите введенный ранее пароль</div>
        </div>
        <div class="row">
            <!-- Кнопка отправки данных формы -->
            <input type="submit" name="submit" id="btn-submit" value="Зарегистрироваться" />
         
            <!-- Кнопка сброса полей формы к исходному состоянию -->
            <input type="reset" name="reset" id="btn-reset" value="Очистить" />
        </div>
    </form>
<?
}    // закрывающая фигурная скобка условия проверки запущенного процесса регистрации
// Если регистрация прошла успешно, сообщаем об этом
else {
    print $message;
}
/**
  * Если всё пройдет как положено, вы сможете попробовать
  * зарегистрировать такого же точно пользователя. Скрипт
  * должен будет сообщить об ошибке
  */
?>
</body>
</html>

login.php
Код:
<?
/**
  * Страница авторизации пользователей. Предполагается,
  * что в вашей базе данных присутствует таблица users,
  * в которой существуют поля id, login и password
  */
// Подлючаем файл с пользовательскими функциями
require_once('functions.php');

// Заранее инициализируем переменную авторизации, присвоив ей ложное значение
$auth = false;

// Если была нажата кнопка авторизации
if(isset($_POST['submit'])) {
    // Делаем массив сообщений об ошибках пустым
    $errors['login'] = $errors['password'] = $errors['password_again'] = '';
 
    // С помощью стандартной функции trim() удалим лишние пробелы
    // из введенных пользователем данных
    $login = trim($_POST['login']);
    $password = trim($_POST['password']);
 
    // Авторизуем пользователя
    // Вызываем функцию регистрации, её результат записываем в переменную
    $auth = authorization($login, $password);
 
    // Если авторизация прошла успешно, сообщаем об этом пользователю
    // И создаем заголовок страницы, который выполнит переадресацию на защищенную
    // от общего доступа страницу
    if($auth === true) {
        $message = '<p>Вы успешно авторизовались в системе. Сейчас вы будете переадресованы на главную страницу сайта. Если это не произошло, перейдите на неё по <a href="/">прямой&nbsp;ссылке</a>.</p>';
        header('Refresh: 5; URL = /');
    }
    // Иначе сообщаем пользователю об ошибке
    else {
        $errors['full_error'] = $auth;
    }
}
?>
<html>
<head>
    <title>Авторизация пользователей</title>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <link href="style.css" rel="stylesheet" type="text/css" />
    <script>
        window.onload = function() {
            document.getElementById('login').ontextInput = function() {
                alert(this.data);
            },
            focus = function() {
                alert("ok");
            }
            ;
        };
    </script>
</head>
<body>
<?
// Если запущен процесс авторизации, но она не была успешной,
// или же авторизация еще не запущена, отображаем форму авторизации
if($auth !== true) {
?>
    <!-- Блок для вывода сообщений об ошибках -->
    <div id="full_error" class="error" style="display:
    <?
    echo $errors['full_error'] ? 'inline-block' : 'none';
    ?>
    ;">
    <?
    // Выводим сообщение об ошибке, если оно есть
    echo $errors['full_error'] ? $errors['full_error'] : '';
    ?>
    </div>
    <div align="center">
    <form action="" method="post">
        <div class="row">
            <label for="login">Ваш логин:</label>
            <input type="text" class="text" name="login" id="login" />
        </div>
        <div class="row">
            <label for="password">Ваш пароль:</label>
            <input type="password" class="text" name="password" id="password" />
        </div>
        <div class="row">
            <input type="submit" name="submit" id="btn-submit" value="Авторизоваться" />
        </div>
    </form></div>
<?
}    // Закрывающая фигурная скобка условного оператора проверки успешной авторизации
// Иначе выводим сообщение об успешной авторизации
else {
    print $message;
}

/**
  * Если всё правильно, будет выведено сообщение об успешной авторизации,
  * пользователь будет переадресован на защищенную страницу
  */
?>
</body>
</html>

Вот index.php который предлагает скрипт
Код:
<?
/**
  * Защищенная страница. К ней возможен доступ только авторизованным
  * пользователям. Если пользователь не авторизован, ему предлагается
  * авторизоваться, и доступ к сайту ограничивается.
  */
require_once('checkAuth.php');
?>
<html>
<head>
    <title>Авторизация и регистрация пользователей</title>
</head>
<body>
<h1>Успешная авторизация.</h1>
<p>Вы получили доступ к защищенной странице. Вы можете <a href="logout.php">выйти</a> из системы.</p>
</body>
</html>
Судя из всего, чтобы защитить страницы от просмотра, мне нужно взять
Код:
<?
require_once('checkAuth.php');
?>
и тогда по идее, должно редиректить на авторизацию, но на практике просто белый екран

вот файл checkAuth.php
Код:
<?
/**
  * Скрипт проверки авторизации пользователей
  */

// Запускаем сессию, из которой будем извлекать логин и пароль
// авторизовавшихся пользователей
session_start();

// Подлючаем файл с пользовательскими функциями
require_once('functions.php');

/**
  * Чтобы определить авторизован ли пользователь, нам нужно
  * проверить существуют ли в базе данных записи для его логина
  * и пароля. Для этого воспользуемся пользовательской функцией
  * проверки корректности данных авторизовавшегося пользователя.
  * Если эта функция вернет false, значит авторизации нет.
  * При отсутствии авторизации мы просто переадресовываем
  * пользователя к странице авторизации.
  */

// Если в сессии присуствуют данные и о логине, и о пароле,
// проверяем их
if(isset($_SESSION['login']) && $_SESSION['login'] && isset($_SESSION['password']) && $_SESSION['password']) {
    // Если проверка существующих данных завершается неудачей
    if(!checkAuth($_SESSION['login'], $_SESSION['password'])) {
        // Переадресовываем пользователя на страницу авторизации
        header('location: login.php');
        // Прекращаем выполнение скрипта
        exit;
    }
}
// Если данных либо о логине, либо о пароле пользователя нет,
// считаем что авторизации нет, переадресовываем пользователя
// на страницу авторизации
else {
    header('location: login.php');
    // Прекращаем выполнение сценария
    exit;
}
?>

Подскажите пожалуйста как мне добить уже эту авторизацию и защитить сайт, отблагодарю
 
Последнее редактирование модератором:
Подскажите пожалуйста как мне добить уже эту авторизацию и защитить сайт, отблагодарю
Я думаю, что Вам подсказали бы, будь это простое дело.
Вы должны понимать, что написание авторизации — это на самом деле ключевой функционал нормального сайта.
Писать его «за пивко» никто не будет. За 10 минут можно написать только основы и криво.
Вот например несколько вопросов, которые придется решать:
1. Как должны регистрироваться пользователи?
2. Где хранятся ники, логины/пароли?
3. Какова защита от ДДОС?
4. Как пользователям менять пароль?
5. Напоминалка паролей, если забыли, на почту.
И ещё много других вопросов. Сейчас активно прикручивают авторизацию через соц. сети, например.

Если у всех пользователей один логин/пароль, и ничего больше не надо, можете посмотреть, как работает авторизация в любом простом проекте, например здесь:
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Назад
Сверху