|
автор: Tor (24.03.2005 в 16:46) |
|
| Интересный вариант генератора паролей описывают авторы в книге "PHP5. Практика создания web-сайтов" :
<?
$id=md5(uniqid(rand(), true));
?>
|
Получается эдакий зубодробительный пароль на 32 символа.
Могу предложить альтернативу:
<?
// $PassLong - длина пароля
function PassGenerator ($PassLong) {
$password="";
// Запускаем генератор случайных чисел
srand(microtime()*87654);
// Образуем цикл
for ($i=1; $i<=$PassLong; $i++) {
// Генерируем произвольное число (ASCII-код)
$char=rand(33,126);
// Добавляем символ по сгенерированному ASCII-коду к паролю
$password.=chr($char);
}
return $password;
}
?>
|
Отличный пароль настраиваемой длины.
Как известно, перебором можно взломать всё (теоретически). Однако в наших силах значительно замедлить этот перебор. Например так:
<?
/*
Есть база данных с хешами паролей пользователей:
CREATE TABLE users (
UserId SMALLINT NOT NULL AUTO_INCREMENT,
Login TINYTEXT NOT NULL,
Password TINYTEXT NOT NULL,
LastErrTime TINYINT DEFAULT NULL,
PRIMARY KEY (UserId)
) TYPE=MyISAM;
*/
function LogIn ($login, $pass) {
// Фильтруем данные
$login=addslashes($login);
$pass=addslashes($pass);
// Получаем время последней ошибки
$ErrTime=mysql_fetch_array(mysql_query("select LastErrTime from users where Login=".$login);
// Получаем текущее время в секундах
$now=time();
// Если с момента последней ошибки прошло не более 3 секунд...
if ($ErrTime[0]+3>$now) {
// Выводим сообщение об ошибке
echo ("Повторите свой запрос позже.");
// И обновляем время последней ошибки
mysql_query("update users set LastErrTime=".$now." where Login=".$login);
return false;
} else {
// Получаем пароль
$pwd=mysql_fetch_array(mysql_query("select Password from users where Login=".$login));
// Если пароли не совпадают...
if (md5($pass)!==$pwd[0]) {
// Обновляем время последней ошибки
mysql_query("update users set LastErrTime=".$now." where Login=".$login);
// И выводим сообщение
echo ("Неверный пароль.");
return false;
} else {
echo ("Пароль верен. Добро пожаловать, ".$login);
return true;
}
}
}
?>
|
Таким вот нехитрым скриптом я серьёзно замедлил брутфорс.
Приводите здесь свои примеры и методы защиты приложений на PHP. | |
|
|