Jump to content
  • 0

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


MrPostman
 Share

Question

Задача - доступ к админке только по логину и паролю. Регистрация всех желающих не нужна.

Я сделал так: в сессии хранится логин и пароль, при запросе страницы, которая должна быть доступна только администраторам, выполняется проверка, возвращает ли функция TRUE или FALSE:


function logged()
{
if (isset($_SESSION['username']) && isset($_SESSION['pw']))
{
$user=$_SESSION['username'];
$pw=$_SESSION['pw'];
$query = "SELECT user FROM users WHERE user='$user' AND pass='$pw'";
$result = mysql_query($query);
if (!$result) die('Error of access');
else
{
if(mysql_num_rows($result))
{
$islogin = TRUE;
return $islogin;
}
else
{
$islogin = FALSE;
return $islogin;
}
}
}
else
{
$islogin = FALSE;
return $islogin;
}
}

Безопасно ли такое решение? Приемлемо ли оно?

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

я бы ещё проверку самой сессии осуществлял.. ну типа если с другого браузера или компа зашли под логин-пароль, то заглогинить все остальные соединения, чтоб двух пользователей не оказалось одновременно

Link to comment
Share on other sites

  • 0

Безопасно ли такое решение?

ответ - нет. нету хэширования методами salt() и md5().

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

Приемлемо ли оно?

если оно не безопасно, может ли быть приемлемым? вам решать.

Link to comment
Share on other sites

  • 0

В сессии хранится зашифрованный пароль, как и в базе данных. Шифрование с помощью salt и md5 осуществляется во время входа и регистрации пользователя. Стоит шифровать ещё раз?

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

Не понял. Это чтобы не стартовать для каждого сессию? C какими введёнными данными? Эта функция для проверки имеющейся сессии, а не для самого входа и её инициализации.

Edited by MrPostman
Link to comment
Share on other sites

  • 0

Не понимаю, зачем хранить пароль в сессии. Достаточно username, при условии правильно введенного пароля, плюс можно абракадабру чтоб пыль в глаза пустить, либо случайный token чтобы совпадал со значением поля таблицы в БД (тут вариантов куча может быть), но никак не пароль, и даже не его хэш.

Правилом хорошего тона считается передача пароля не в открытом виде из формы, а md5('пароль') на сервер. А в БД при этом хранить md5(md5('пароль')). Т.е. при помощи JS передавать хэш пароля на сервер.

Edited by abused
Link to comment
Share on other sites

  • 0

Т.е. при помощи JS передавать хэш пароля на сервер.

Это как? Причём здесь JS?

Все просто, например так: если броузер поддерживает JS и включено, то при помощи JS-функци заменить содержимое поля ввода пароля на хэш этого самого пароля. Либо при помощи AJAX.

Edited by abused
Link to comment
Share on other sites

  • 0

В сессии хранится зашифрованный пароль, как и в базе данных. Шифрование с помощью salt и md5 осуществляется во время входа и регистрации пользователя. Стоит шифровать ещё раз?

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

Не понял. Это чтобы не стартовать для каждого сессию? C какими введёнными данными? Эта функция для проверки имеющейся сессии, а не для самого входа и её инициализации.

нет, еще раз не стоит :) просто в приведенном куске этого не видно.

просто есть (по крайней мере я знаю) два способа сверить значение введенное клиентом - серверу: либо в куках, либо напрямую в значении сессии.

по сему я не знаю как у вас реализовано, вот и сказал что нужно проверять и если есть, то пускать его.

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy