Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правельная и безопасная авторизация 
:(
    Опции темы
Dima85
Дата 27.12.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Использую такой принцип авторизации, тоесть если username, password, и ip адрес правильные происходит вход, если нет, то пользователя снова отправляет на страницу входа где указывается переменная $message, в которой сказано что пароль введен неправильно. Вопрос почему эта переменная не показывается?

Код

session_start();
if (isset($_POST["username"])) { $_SESSION['username'] = $_POST["username"]; }
if (isset($_POST["password"])) { $_SESSION['password'] = $_POST["password"]; }

if (($_SESSION['username'] == $config_username) and (md5($_SESSION['password']) == $config_password) and ($_SERVER['REMOTE_ADDR'] == $config_range_ip)) {
    $_SESSION['valid'] = "1";
} else {
    $_SESSION['valid'] = "0";
    if ($_GET["p"] !== "login") {header("Location: ".$_SERVER["php_self"]."?p=login"); $message = "Password or username not correctly.";}

}


Есть сделать так, то все пишеться, но это не совсем то что нужно (допустим если данные будут пусты, то сообщение не появиться).


Код

session_start();
if (isset($_POST["username"])) { $_SESSION['username'] = $_POST["username"]; }
if (isset($_POST["password"])) { $_SESSION['password'] = $_POST["password"]; }

if (($_SESSION['username'] == $config_username) and (md5($_SESSION['password']) == $config_password) and ($_SERVER['REMOTE_ADDR'] == $config_range_ip)) {
    $_SESSION['valid'] = "1";
} else {
    $_SESSION['valid'] = "0";
    if ($_GET["p"] !== "login") {header("Location: ".$_SERVER["php_self"]."?p=login");}

if (($_SESSION['username'] == $config_username) or (md5($_SESSION['password']) == $config_password)) {
    $message = "Password or username not correctly.";}

}




Это сообщение отредактировал(а) Dima85 - 27.12.2009, 18:39
PM MAIL   Вверх
bars80080
Дата 27.12.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, ты же после авторизации редиректишь пользователя. скрипт загружается заново, а там никакого сообщения уже нет. пересылай ещё один параметр ?p=login&mes=1
а затем, если есть $_GET['mes'] показывай сообщение
PM MAIL WWW   Вверх
Dima85
Дата 27.12.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Логично, почему-то сам не додумался, спасибо. smile

Еще что касается авторизации, может стоит обрезать поля пароля и пользователя, допустим если свыше 200 символов. Или это не влияет на безопасность?
PM MAIL   Вверх
bars80080
Дата 27.12.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



обрезать можно, но на безопасность это не влияет
PM MAIL WWW   Вверх
Dima85
Дата 28.12.2009, 01:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Еще вопрос, 
Появилась задача, добавить несколько IP к которым будет доступна авторизация.

$config_range_ip = "127.0.0.1,52.201.201.138,81.205.61.108";

Помогите пожалуйста здесь правильно сформулировать:

Код

if (($_SESSION['username'] == $config_username) and (md5($_SESSION['password']) == $config_password) and ($_SERVER['REMOTE_ADDR'] == $config_range_ip)) {


тоесть первое, нужно переменную $config_range_ip разделить по запятым.
explode(",",$config_range_ip)
и далее сравнить с $_SERVER['REMOTE_ADDR']. Помогите пожалуйста это реализовать.

Это сообщение отредактировал(а) Dima85 - 28.12.2009, 01:13
PM MAIL   Вверх
bars80080
Дата 28.12.2009, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315




Код

and (in_array($_SERVER['REMOTE_ADDR'], $config_range_ip_array))


где 
Код

$config_range_ip_array = explode(",",$config_range_ip);

PM MAIL WWW   Вверх
Dima85
Дата 28.12.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
capitan
Дата 28.12.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



А не проще $config_range_ip сразу делать массивом?
Код

$config_range_ip = array('127.0.0.1', '52.201.201.138', '81.205.61.108');

PM MAIL WWW ICQ   Вверх
Dima85
Дата 9.7.2010, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Сегодня вычитал:
Цитата

Последний риск, о котором мы поговорим, — это использование сессионных идентификаторов. Проще говоря, не пробуйте когда-либо посылать id-сессии пользователю. Сессии не безопасны, но если вы передаете сессионный id, вы подвергаетесь риску того, что кто-то другой, отличный от ожидаемого пользователя, так называемый man in the middle, завладеет сессией пользователя. Пример — перехват сессии интернет-магазина. Злоумышленник может получить данные кредитной карты, изменить адрес доставки или сделать кое-что еще более злонамеренное, зависящее от системы.


Тоесть по сути такая авторизация небезопасна? Или я что-то не так понял, расскажите пожалуйста.

Код

session_start();
if (isset($_POST["username"])) { $_SESSION['username'] = $_POST["username"]; }
if (isset($_POST["password"])) { $_SESSION['password'] = $_POST["password"]; }

if (($_SESSION['username'] == $config_username) and (md5($_SESSION['password']) == $config_password) and ($_SERVER['REMOTE_ADDR'] == $config_range_ip)) {
    $_SESSION['valid'] = "1";
} else {
    $_SESSION['valid'] = "0";
    if ($_GET["p"] !== "login") {header("Location: ".$_SERVER["php_self"]."?p=login"); $message = "Password or username not correctly.";}

}

PM MAIL   Вверх
CruorVult
Дата 9.7.2010, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: 9
Всего: 28



а зачем пароль в сессии хранить? 
PM MAIL Skype   Вверх
Dima85
Дата 9.7.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



А как нужно?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.