Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 14:58   #1
sasha14486
Пользователь
 
Регистрация: 11.05.2009
Сообщений: 23
По умолчанию md5 гдето не пашет

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

PHP код:
<?php
session_start
();

if (isset(
$_POST['login'])) { $login $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную

if (empty($login) or empty($password)) 
{
exit (
"Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}

//удаляем лишние пробелы
$login trim($login);
$password md5(trim($password));

include (
"blocks/bd.php");

// минипроверка на подбор паролей
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty(
$ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.

$result mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);// извлекаем из базы колличество неудачных попыток входа за последние 15 минут у пользователя с данным ip
$myrow mysql_fetch_array($result);

if (
$myrow['col'] > 2) {
exit(
"Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
}


$password md5($password);//шифруем пароль
$password strrev($password);// для надежности добавим реверс
$password $password."b3p6f";


$result mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password'",$db); 
$myrow mysql_fetch_array($result);
if (empty(
$myrow['id']))
{
//если пользователя с введенным логином и паролем не существует,то записываем ip пользователя и с датой ошибки

$select mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
$tmp mysql_fetch_row ($select);
if (
$ip == $tmp[0]) {
//проверяем, есть ли пользователь в таблице "oshibka"
$result52 mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow52 mysql_fetch_array($result52);

$col $myrow52[0] + 1;//Если есть,то приплюсовываем количесво 
mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
}

else {
//если за последние 15 минут ошибок не было, то вставляем новую запись в таблицу "oshibka"
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}


exit (
"Извините, введённый вами логин или пароль неверный.");
}
else {

          
//если пароли совпадают, то запускаем пользователю сессию! 
          
$_SESSION['password']=$myrow['password']; 
          
$_SESSION['login']=$myrow['login']; 
          
$_SESSION['id']=$myrow['id'];

if (isset(
$_POST['save'])){
//Если пользователь хочет, чтобы его данные сохранились для последующего входа, то сохраняем в куках его браузера
setcookie("login"$_POST["login"], time()+999);
setcookie("password"$_POST["password"], time()+999);}
}    
      
echo 
"<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";



?>

Последний раз редактировалось sasha14486; 22.11.2009 в 15:00.
sasha14486 вне форума Ответить с цитированием
Старый 23.11.2009, 13:34   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Не знаю ошибка ли это, но отмечу что у тебя пароль два раза кодируется в md5(то есть получается md5(md5($password)) ).
Для проверки попробуй вывести вводимый пароль(после кодирования) на экран и сравни.
ssdm вне форума Ответить с цитированием
Старый 23.11.2009, 13:51   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

да какой там.... не знаю чо в БД у чела хранится но сравнивается оно с паролем вычисленным по следующей схеме
PHP код:
password md5(trim($password));
...
$password md5($password);//шифруем пароль
$password strrev($password);// для надежности добавим реверс
$password $password."b3p6f";
то есть:
password strrev(md5(md5(trim($password))))."b3p6f";
как он записан в бд -  неясно 
и еще -
при записи в куки -
PHP код:
setcookie("login"$_POST["login"], time()+999);
setcookie("password"$_POST["password"], time()+999);} 
логин и пароль записываются в ЧИСТОМ виде... без ваших супер шифровок.... достаточно в блокноте посмотреть эти куки и вуаля - авторизация пройдена
ADSoft вне форума Ответить с цитированием
Старый 24.11.2009, 23:34   #4
sasha14486
Пользователь
 
Регистрация: 11.05.2009
Сообщений: 23
По умолчанию

Исправил ошибку.Убрал
PHP код:
$password stripslashes($password);
$password htmlspecialchars($password); 
$password strrev($password);// для надежности добавим реверс $password = $password."b3p6f";

И проверил хеш то что в бд и то что вводится (пароль)

$result = die("SELECT * FROM users WHERE login='$login' AND password='$password'"); 
sasha14486 вне форума Ответить с цитированием
Старый 25.11.2009, 05:41   #5
Metandrostenalon
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 108
По умолчанию

какой смысл в таких мунипуляциях с паролем?
php,javascript
Metandrostenalon вне форума Ответить с цитированием
Старый 25.11.2009, 08:07   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

так в итоге - заработало все, или как?
...потому как все так же непонятно - что записано в БД
ADSoft вне форума Ответить с цитированием
Старый 25.11.2009, 17:59   #7
sasha14486
Пользователь
 
Регистрация: 11.05.2009
Сообщений: 23
По умолчанию

Вот так все работает.

PHP код:
<?php
session_start
();

if (isset(
$_POST['login'])) { $login $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную

if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit (
"Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}

$login stripslashes($login);
$login htmlspecialchars($login);

$login trim($login);
$password trim($password);

include (
"bd.php");

// минипроверка на подбор паролей
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty(
$ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.

$result mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);// извлекаем из базы колличество неудачных попыток входа за последние 15 минут у пользователя с данным ip
$myrow mysql_fetch_array($result);

if (
$myrow['col'] > 2) {
//если таковых попыток больше трех, то выдаем сообщение.
exit("Вы набрали логин или пароль неверно 3 раза. Подождите 15 минут до следующей попытки.");
}


$password md5($password);//шифруем пароль



$result mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password'",$db); 
//извлекаем из базы все данные о пользователе с введенным логином
$myrow mysql_fetch_array($result);
if (empty(
$myrow['id']))
{
//если пользователя с введенным логином и паролем не существует,то записываем ip пользователя и с датой ошибки

$select mysql_query ("SELECT ip FROM oshibka WHERE ip='$ip'");
$tmp mysql_fetch_row ($select);
if (
$ip == $tmp[0]) {
//проверяем, есть ли пользователь в таблице "oshibka"
$result52 mysql_query("SELECT col FROM oshibka WHERE ip='$ip'",$db);
$myrow52 mysql_fetch_array($result52);

$col $myrow52[0] + 1;//Если есть,то приплюсовываем количесво 
mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE ip='$ip'");
}

else {
//если за последние 15 минут ошибок не было, то вставляем новую запись в таблицу "oshibka"
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}


exit (
"Извините, введённый вами логин или пароль неверный.");
}
else {

          
//если пароли совпадают, то запускаем пользователю сессию!
          
$_SESSION['password']=$myrow['password']; 
          
$_SESSION['login']=$myrow['login']; 
          
$_SESSION['id']=$myrow['id'];


if (isset(
$_POST['save'])){

setcookie("login"$_POST["login"], time()+7200);
setcookie("password"$_POST["password"], time()+7200);}
}    
      
header("Location: index.php");


?>
sasha14486 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различие MD5 Delphi и MD5 PHP Viteef Общие вопросы Delphi 14 09.02.2011 11:53
Служба не пашет! Basketman Общие вопросы Delphi 10 28.09.2009 22:25
BASS не пашет на D2009/2010? NBSTUDIO Мультимедиа в Delphi 2 25.09.2009 12:57
Прога не пашет без Дельфи Dunpeal Общие вопросы Delphi 5 22.06.2007 13:58
На 98 пашет-на ХР нет. CMP Помощь студентам 3 04.04.2007 22:26