Безопасная авторизация

Статус
В этой теме нельзя размещать новые ответы.
Но статистика гласит, что чаще всего злоумышленники входят через окна
Мне надо только доступ в админку.
Проверка клиентской части на безопасность - это другая тема для разговора :)
Почитал ещё и на phpfaq.ru
Но так и не понял, что лучше использовать для авторизации пользователя?
Регистрацию сделаю в самой админке, потому как регистрироваться будет только 1 группа людей - администраторы. Посетители будут просматривать сайт без регистрации.
Поэтому самое главное - авторизация.
 
Но так и не понял, что лучше использовать для авторизации пользователя?
Для авторизации пользователя нужно использовать:
1) Механизм сессий в PHP. Простейший пример в каждом файле
PHP:
<?php
// До этого момента не должно быть никаких отправок данных в браузер (никаких echo, print)
session_start(); // Стартуем сессию (пользователю устанавливаются куки)
// $_SESSION - глобальный массив сессионных переменных, он существует во всей сессии между запросами
// Тут мы проверяем, если админ не залогинен - выдаём форму логина
if ( ! isset( $_SESSION['admin_logged'] ) )
{
?>
<form method="post" action="/login.php">
Введите пароль: 
<input type="password" name="password"/><br/>
<input type="submit" value="Войти в систему" />
<?php
exit;
}
// Далее идёт код скрипта, который требует авторизации
2) Форму авторизации
файл login.php
PHP:
<?php
session_start();
if ( isset( $_POST['password'] ) && 'secretword' == $_POST['password'] )
{
  $_SESSION['admin_logged'] = true;
  echo 'Вход удался!';
  exit;
}
echo 'Ошибка авторизации!';
Могу порекомендовать вводную статью по авторизации на PHP
 
Файлик auth.php

PHP:
<?php
function sign($str) {
 $validate = $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'];
 $secret = ' fsdfs в ХПХАХА %:№ абяЯКА ї'.chr(251);
 return md5($str.$secret.$validate);
}

$logged=0;
if ($_COOKIE[adm]) {
  $arr = explode('-',$_COOKIE[adm]);
  if ($arr[0] == 'one' && $arr[1] == sign($arr[0])) $logged = 1;
} else if ($_POST[login] == 'admin' && $_POST[password] == 'password') {
  setcookie('adm', 'one-'.sign('one'), 0, '/'); 
  $logged = 1;
}
if (!$logged) {
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<body><br><br><br><br>
<form method=post>
<table align=center>
<tr><td>Login:</td><td><input name=login maxlength=20></td></tr>
<tr><td>Password:</td><td><input name=password type=password maxlength=20></td></tr>
<tr><td>&nbsp; </td><td><input type=submit name=submit value=Login></td></tr>
</table>
</form>
</body>
<?
  die();
}

Потом во все файлы, имеющие отношение к админке (т.е. куда не должно быть доступа простому юзеру), вставляешь
PHP:
  include "auth.php";
И вуаля, все отлично работает.

Способ вполне секурный, за исключением того, что логин-пароль хранится прямо в коде. Если это критично, замени проверку на
PHP:
} else if (md5($_POST[login] . 'тра-та-та2$@!' .  $_POST[password]) == '012346525435') {

Будет вообще мегасекурно, но придется самому высчитывать это md5. Практика показывает, что это очень задалбывает. И еще практика показывает, что когда у тебя по винту могут спокойно лазить и смотреть исходный код скриптов, то защищать пароль админа обычно смысла уже никакого нету..
 
Почитай этот сайт, там есть очегь хорошие статьи об авторизации и всякого рода безопасности, связанной с ней. Аналог php.net, но на русском ;) php.su
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху