Уважаемы коллеги, it-специалисты, программисты и просто хорошие люди, приветствую!
Очень много читал вопросов и ответов на тостере. И вот наступил момент, когда у самого созрел вопрос, на который хотелось бы услышать Ваше ответ/мнение.
К примеру, нашел скрипт авторизации на сайте, я так полагаю довольно распространенная конструкция на php:
<?php
# Функция для генерации случайной строки
function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}
# Если есть куки с ошибкой то выводим их в переменную и удаляем куки
if (isset($_COOKIE['errors'])){
$errors = $_COOKIE['errors'];
setcookie('errors', '', time() - 60*24*30*12, '/');
}
if(isset($_POST['submit']))
{
# Вытаскиваем из БД запись, у которой логин равняеться введенному
$names = mysql_fetch_assoc(mysql_query("SELECT id, name, password FROM `users` WHERE `name`='".mysql_real_escape_string($_POST['name'])."' LIMIT 1"));
# Сравниваем пароли
if($names['password'] === md5(md5($_POST['password'])))
{
# Генерируем случайное число и шифруем его
$hash = md5(generateCode(10));
# Записываем в БД новый хеш авторизации и IP
mysql_query("UPDATE users SET hash='".$hash."' WHERE id='".$names['id']."'") or die("MySQL Error: " . mysql_error());
# Ставим куки
setcookie("id", $admins['id'], time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);
# Переадресовываем браузер на страницу проверки нашего скрипта
header("Location: admin.php"); exit();
}
else { print "Вы ввели неправильный логин/пароль<br>"; }
}
?>
<form method="POST">
Логин <input name="name" type="text"><br><br>
Пароль <input name="password" type="password"><br><br>
<input name="submit" type="submit" value="Войти">
</form>
<?php
# Проверяем наличие в куках номера ошибки
if (isset($errors)) {print '<h4>'.$error[$errors].'</h4>';}
?>
Внимание вопрос: В форме мы отправили пароль в ОТКРЫТОМ виде, и все манипуляции с ним по части проверок и шифрования проходят уже ПОСЛЕ того как эти данные передались на сервер... Т.е. злоумышленник может перехватить его. Все верно я вижу по коду? Ну тут естественно, если это не https соединение. И как Вам кстати сам скриптик этот, юзабельно?
Или ткните носом где не прав. Ну и как там говорится, сильно уж не пинайте. Заранее благодарен.