index.php:
<form action="admin.php" method="post">
<table>
<tr>
<td>Логин:</td>
<td><input type="text" name="login" /></td>
<td>Пароль:</td>
<td><input type="password" name="password" /></td>
<td></td>
<td><input type="submit" value="Войти" /></td>
</tr>
</table>
</form>
admin.php:
<?php if (isset($_POST['login']) && isset($_POST['password']))
{
$login = mysql_real_escape_string($_POST['login']);
$password = md5($_POST['password']);
$query = "SELECT `id`
FROM `users`
WHERE `user`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1) {
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
}
else {
die('Логин или пароль введены не правильно. Попробуйте еще раз <a href=\'http://jokes-here.com/admin/\'>авторизоваться</a>');
}
}
if (isset($_SESSION['user_id'])) { echo 'Авторизован';}
else {
die('Не авторизован');
}
?>
Спасибо.
Спустя 4 минуты, 43 секунды (21.06.2012 - 19:18) medvedeva написал(а):
Не знаток, но защиты от брута не вижу
Спустя 6 минут, 13 секунд (21.06.2012 - 19:25) Игорь_Vasinsky написал(а):
нормально.
достаточно
я давно уже на простую бейсик авторизацию перешёл с htaccess... мне понты не к чему и заморачиваться не надо. всё делает сервер.
if (mysql_num_rows($sql) == 1) {
достаточно
if (mysql_num_rows($sql)) {
я давно уже на простую бейсик авторизацию перешёл с htaccess... мне понты не к чему и заморачиваться не надо. всё делает сервер.
Спустя 49 минут, 58 секунд (21.06.2012 - 20:15) fdr написал(а):
по идее
Цитата |
$password = md5($_POST['password']); |
нужно обработать trim() - ом, и добавить так сказать "соль"!
$password = md5(trim($_POST['password']) . 'salt-nash-sekretniy_kod&ili%chtoto^vrode');
А то один невидимый пробельчик, весь кайф испортит))))
и еще при не удачной авторизации, добавлять $login в базу с временем. проверять это значение, больше 10 попыток авторизации, блокировать скажем на 10 мин
Спустя 1 минута, 21 секунда (21.06.2012 - 20:16) Игорь_Vasinsky написал(а):
Цитата |
$password = md5($_POST['password']); нужно обработать trim() - ом, и добавить так сказать "соль"! |
sha1() и всё.
Спустя 1 час, 41 минута, 11 секунд (21.06.2012 - 21:57) Mephistofel написал(а):
<?php if (isset($_POST['login']) && isset($_POST['password']))
{
$login = mysql_real_escape_string($_POST['login']);
$query = "SELECT `salt`
FROM `users`
WHERE `user`='{$login}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)) {
$row = mysql_fetch_assoc($sql);
$salt = $row['salt'];
$password = md5(md5($_POST['password']) . $salt);}
$query = "SELECT `id`
FROM `users`
WHERE `user`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql)) {
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
}
else {
echo 'Не авторизован';
}
}
if (isset($_SESSION['user_id'])) { //Показываем наше сокровище...
}
else {
echo 'Не авторизован';
}
?>
Сделал как посоветовал fdr с солью, спасибо.
Цитата |
при не удачной авторизации, добавлять $login в базу с временем. проверять это значение, больше 10 попыток авторизации, блокировать скажем на 10 мин |
поподробнее об этом можно? Желтельно с примером...
Спустя 10 часов, 33 минуты, 44 секунды (22.06.2012 - 08:31) fdr написал(а):
по идее...
из PHP manual говорится для паролей лучше использовать crypt() чем md5()
"соль" лучше хранить вне корневом каталоге сайта. Хранить ее в базе, не совсем то, лишние запросы и для каждого user-ра своя 'соль' лишние данные.
При запросе лучше запрашивать логин и пароль, указывая WHERE только login=$login
а пароль проверять уже в скрипте.
из PHP manual говорится для паролей лучше использовать crypt() чем md5()
"соль" лучше хранить вне корневом каталоге сайта. Хранить ее в базе, не совсем то, лишние запросы и для каждого user-ра своя 'соль' лишние данные.
При запросе лучше запрашивать логин и пароль, указывая WHERE только login=$login
а пароль проверять уже в скрипте.
Цитата |
при не удачной авторизации, добавлять $login ... блокировать скажем на 10 мин |
выше приведенный способ достаточен.
так конечно можно, если вы параноик))))
еще можно использовать каптчу, шифровать соеденение, использовать зашишенный канал, но они чреваты своими издержками!!!!
Спустя 1 час, 21 минута, 58 секунд (22.06.2012 - 09:53) Mephistofel написал(а):
всем ответившим спасибо.
Спустя 12 дней, 9 часов, 52 минуты, 53 секунды (4.07.2012 - 19:46) mixo написал(а):
я рекомендую и сам пользуюсь токенс
index.php
admin.php
index.php
session_start();
$token = $_SESSION['token'] = md5(uniqueid(rand()));
<input type="hidden" name="token" value="<?php echo $token; ?>"/>
admin.php
if(isset($_POST['token']) && $_POST['token'] != $_SESSION['token']) {
echo 'Sorry but we cannot process your request at this time.';
exit();
}
Спустя 1 час, 44 минуты, 43 секунды (4.07.2012 - 21:30) Gabriel написал(а):
Цитата |
При запросе лучше запрашивать логин и пароль, указывая WHERE только login=$login |
вершина паранойи.
Спустя 7 минут, 42 секунды (4.07.2012 - 21:38) inpost написал(а):
$login, $password - лишние переменные, ошибки новичков. У тебя есть массив $_POST, с ним работай.
Для md5 используй соль, но это уже сказали.
Свойства атрибутов тегов необходимо указывать в двойных кавычках. А ты вместо того, чтобы использовать двойные - пишешь одинарные и их ещё и экранизируешь
Для mysql_query надо свою функцию писать обработки исключений.
die в случае неудачи - огромная ошибка новичков. Надо выводить страницу сайта и писать где-то в середине текст о том, что произошла ошибка, а не просто отрубать всё.
Почитай про isset на сайте php.net , кое-что новое узнаешь!
Для md5 используй соль, но это уже сказали.
Свойства атрибутов тегов необходимо указывать в двойных кавычках. А ты вместо того, чтобы использовать двойные - пишешь одинарные и их ещё и экранизируешь
Для mysql_query надо свою функцию писать обработки исключений.
die в случае неудачи - огромная ошибка новичков. Надо выводить страницу сайта и писать где-то в середине текст о том, что произошла ошибка, а не просто отрубать всё.
Почитай про isset на сайте php.net , кое-что новое узнаешь!