Хранение паролей в md5

  • Автор темы APTEMOH
  • Дата начала
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
Всем добра!

Похожую тему встречал на форуме, но у меня небольшое отличие. Так же, править будем все ручками, т.к. у многих отличаются файлы. У меня например при заказе выплаты так:
Скрытое содержимое для зарегистрированных пользователей!


После того, как нажимаем Оформить заявку, так:


Итак, начнем. Нам нужны будут следующий файлы:
- classes -> _class.isender.php
- inc -> _login.php
- pages -> account -> _config.php
- pages -> _recovery.php
- pages -> _signup.php

Перед началом проверьте наличие функции в файле classes -> _class.func.php (248-я строка)
Код:
public function md5Password($pass){
        $pass = strtolower($pass);
        return md5("shark_md5"."-".$pass);
}
Если есть, отлично, нет - добавляем! Функция просто супер, мало того, что она просто делает пароли в MD5, так оно еще добавляет ключ shark_md5. Т.е. shark_md5 можно менять на свое слово и перекодировка ничего не даст злоумышленнику.

1. В файле _class.isender.php в функцию RecoveryPassword, по желанию, добавить следующее:
Код:
$text.= "ВНИМАНИЕ - это временный пароль - Не забудте его сменить в меню настройки: <BR />";
2. В файле _login.php :
После:
Код:
 $log_data = $db->FetchArray(); (12-я строка)
Добавить ниже:
Код:
 $post_pass = $func->md5Password($_POST["pass"]);
Найти:
Код:
 if(strtolower($log_data["pass"]) == strtolower($_POST["pass"])){ (16-я строка)
Заменить на:
Код:
 if(strtolower($log_data["pass"]) == strtolower($post_pass)){
3. В файле _config.php :
Найти:
Код:
 $old = $func->IsPassword($_POST["old"]); (19-я строка)
        $new = $func->IsPassword($_POST["new"]); (20-я строка)
Заменить на:
Код:
 $old_pass = $func->IsPassword($_POST["old"]);
        $new_pass = $func->IsPassword($_POST["new"]);
Ниже дописать:
Код:
 $old = $func->md5Password($old_pass);
        $new = $func->md5Password($new_pass);
Найти:
Код:
 if( strtolower($new) == strtolower($_POST["re_new"])) {  (29-я строка)
Заменить на:
Код:
 if( strtolower($new_pass) == strtolower($_POST["re_new"])){
В этом же файле поправить платежный пароль:
Код:
 $plat_pass = $func->md5Password($plat_passs);
А в _payments.php изменить:
Код:
 $plat_pass = $func->md5Password($plat_passs);
4. В файле _recovery.php :

Найти:
Код:
 $newmdPassword = md5($password); (44-я строка)
Заменить на:
Код:
 $newmdPassword = $func->md5Password($password);
5. В файле _signup.php :

Найти:
Код:
 $pass = $func->IsPassword($_POST["pass"]); (141-я строка)
Изменить на:
Код:
 $pass1 = $func->IsPassword($_POST["pass"]);
Ниже дописать:
Код:
 $pass = $func->md5Password($pass1);
Код:
 $repass = $func->md5Password($_POST["repass"]);
Найти:
Код:
 if($pass == $_POST["repass"]){ (156-я строка)
Изменить на:
Код:
 if($pass == $repass){
6. В базе изменяем поле pass. Ставим тип: VarChar, длинна: 33 и сохраняем.

Сохраняем все и заливаем на сервер! Наслаждаемся безопасной работой!
Кому нужно скину файлы.

P.S. От спасибок не откажусь!
 
Последнее редактирование:
Vine
Местный
Сообщения
30
Реакции
4
Работает, осталось только поставить платежный пароль :)

Как я понял, благодаря платежному паролю и шифрованию, хакер почти никак не сможет вывести деньги, даже есть у него есть БД?
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
Vine написал(а):
Работает, осталось только поставить платежный пароль :)

Как я понял, благодаря платежному паролю и шифрованию, хакер почти никак не сможет вывести деньги, даже есть у него есть БД?
Совершенно верно. Тем более, что можно нужно добавлять соль. Поэтому, если есть идеи для улучшения безопасности и т.д. пишите - буду реализовывать. :)
 
wh1skas
wildcake
Участник
Сообщения
1.017
Реакции
432
ICQ
564739604 564739604
Если солить все пароли только одной солью, это не есть гуд. Да и соль хранить в базе можно, без проблем => И при том для каждого id свою соль. Просто выборка тяжелее будет, но зато безопаснее. На примере тикетов и GET-запросов очень полезно было бы. Подмена значения в GET на md5 с уникальной солью повысит безопасность до максимума. Я так запилил на своем форуме для постов.
 
lebmont
Местный
Сообщения
54
Реакции
0
изменяет так что не заходит с верным паролем и мд5 пассом тоже, если ставлю в класс этот код
public function md5Password($pass){
$pass = strtolower($pass);
return md5("shark_md5"."-".$pass);
}

то сайт ваще летит
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
lebmont написал(а):
изменяет так что не заходит с верным паролем и мд5 пассом тоже, если ставлю в класс этот код
public function md5Password($pass){
$pass = strtolower($pass);
return md5("shark_md5"."-".$pass);
}

то сайт ваще летит
Нужно удалить данные в базе. Получается идет авторизация с солью, а в базе без.
Или где то допустили ошибку.
 
lebmont
Местный
Сообщения
54
Реакции
0
в бд старую колонку Pass удалить? и какую если че добавлять
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
lebmont написал(а):
в бд старую колонку Pass удалить? и какую если че добавлять
Нет! Стойте!
Саму базу не трогаем, удаляем только данные.
Как вариант заново зарегистрироваться на другую почту и проверить.
 
lebmont
Местный
Сообщения
54
Реакции
0
ну я регал нового пользователя.в бд записывает в мд5 но по верному паролю не заходит, строки для платежного пароля не менял тк он уже в мд5, мб из за этого?
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
  • #10
Да, из-за этого. В базе один пароль, а вводите другой.
Еще могли не сменить проверку пароля при регистрации или авторизации.
 
lebmont
Местный
Сообщения
54
Реакции
0
  • #11
только по платежному паролю не менял
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
  • #12
В общем, пересмотрите еще раз и сделайте по инструкции. Система работает на ура. :)
 
lebmont
Местный
Сообщения
54
Реакции
0
  • #13
Перед началом проверьте наличие функции в файле classes -> _class.config.php (248-я строка) в этом файле не более 50 строк

class config{




public $HostDB = "localhost";
public $UserDB = "UserDB";
public $PassDB = "PassDB;
public $BaseDB = "BaseDB";

public $SYSTEM_START_TIME = дата старта;
public $VAL = "Руб.";

# PAYEER настройки
public $AccountNumber = 'AccountNumber';
public $apiId = 'apid';
public $apiKey = 'apiKey';

public $shopID = shopID;
public $secretW = "secretW";


}
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
  • #14
Там очепятка. В файле _class.func.php



Красным замазана Соль. Желательно написать свою. Например имя жены или еще что :)
 
lebmont
Местный
Сообщения
54
Реакции
0
  • #15
вот из за этого и не работало что в конфиг пихал
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
  • #16
lebmont написал(а):
вот из за этого и не работало что в конфиг пихал
Прошу прощения! :) В шапке поправил, спасибо что нашли опечатку.
 
Ferz
Местный
Сообщения
73
Реакции
3
  • #17
В файле _recovery.php нету

Найти:
Код:
$newmdPassword = md5($password); (44-я строка)
Весь код _recovery.php:
Код:
<?PHP
$_OPTIMIZATION["title"] = "Восстановление пароля";
$_OPTIMIZATION["description"] = "Восстановление забытого пароля";
$_OPTIMIZATION["keywords"] = "Восстановление забытого пароля";

if(isset($_SESSION["user_id"])){ Header("Location: /account"); return; }

?>
<div class="s-bk-lf">
   <div class="acc-title">Восстановление пароля</div>
</div>
<div class="silver-bk"><div class="clr"></div>  
<?PHP

   if(isset($_POST["email"])){

     if(isset($_SESSION["captcha"]) AND strtolower($_SESSION["captcha"]) == strtolower($_POST["captcha"])){
    
     unset($_SESSION["captcha"]);
    
     $email = $func->IsMail($_POST["email"]);
     $time = time();
     $tdel = $time + 60*15;
    
       if($email !== false){
        
         $db->Query("DELETE FROM db_recovery WHERE date_del < '$time'");
         $db->Query("SELECT COUNT(*) FROM db_recovery WHERE ip = INET_ATON('".$func->UserIP."') OR email = '$email'");
         if($db->FetchRow() == 0){
        
           $db->Query("SELECT id, user, email, pass FROM db_users_a WHERE email = '$email'");
           if($db->NumRows() == 1){
           $db_q = $db->FetchArray();
          
           # Вносим запись в БД
           $db->Query("INSERT INTO db_recovery (email, ip, date_add, date_del) VALUES ('$email',INET_ATON('".$func->UserIP."'),'$time','$tdel')");
          
           # Отправляем пароль
           $sender = new isender;
           $sender -> RecoveryPassword($db_q["email"], $db_q["pass"], $db_q["email"]);
          
           echo "<center><font color = 'green'><b>Данные для входа отправлены на Email</b></font></center>";
           ?>
           </div>
           <div class="clr"></div>  
           <?PHP
           return;
          
           }else echo "<center><font color = 'red'><b>Пользователь с таким Email не зарегистрирован</b></font></center>";
        
         }else echo "<center><font color = 'red'><b>На Ваш Email или IP уже был отправлен пароль за последние 15 минут</b></font></center>";
        
       }else echo "<center><font color = 'red'><b>Email указан неверно</b></font></center>";
    
     }else echo "<center><font color = 'red'><b>Символы с картинки введены неверно</b></font></center>";
  
   }

?>

<BR />
<form action="" method="post">
<table width="550" border="0" cellspacing="0" cellpadding="0">
  <tr>
  <td align="left" width="250">Email (На него будет выслан пароль):</td>
  <td align="left" width="250"><input name="email" type="text" size="25" maxlength="50" value="<?=(isset($_POST["email"])) ? $_POST["email"] : false; ?>"/></td>
  </tr>

  <tr>
  <td align="left" width="250" style="padding-top:20px;">
   <a href="#" onclick="ResetCaptcha(this);"><img src="/captcha.php?rnd=<?=rand(1,10000); ?>"  border="0" style="margin:0;"/></a>
   </td>
  <td align="left" width="250" style="padding-top:20px;">Введите символы с картинки<input name="captcha" type="text" size="25" maxlength="50" /></td>
  </tr>

  <tr>
  <td colspan="2" align="center"><BR /><input type="submit" value="Восстановить" style="height: 30px;"></td>
  </tr>
</table>
</form>
</div>
<div class="clr"></div>
______________
UPD: И если есть киньте рабочий файл, а то с этим что-то не так, письма не отправляет..
 
Ferz
Местный
Сообщения
73
Реакции
3
  • #19
APTEMOH написал(а):
За файлик спасибо!
И еще, раз тут затронута тема плат. пароля. Есть ли где-нибудь инструкция по установке? Нашел только с заменой файлов (payment.php), заменять никак, а выдергивать код - боюсь что снова все поломаю..
Помню где-то находил, сейчас весь форум перелапатил - ничего не нашел..
 
fktrctq
Местный
Сообщения
62
Реакции
1
  • #20
APTEMOH написал(а):
Всем добра!

Похожую тему встречал на форуме, но у меня небольшое отличие. Так же, править будем все ручками, т.к. у многих отличаются файлы. У меня например при заказе выплаты так:

Итак, начнем. Нам нужны будут следующий файлы:
- classes -> _class.isender.php
- inc -> _login.php
- pages -> account -> _config.php
- pages -> _recovery.php
- pages -> _signup.php

Перед началом проверьте наличие функции в файле classes -> _class.func.php (248-я строка)
Код:
public function md5Password($pass){
        $pass = strtolower($pass);
        return md5("shark_md5"."-".$pass);
}
Если есть, отлично, нет - добавляем! Функция просто супер, мало того, что она просто делает пароли в MD5, так оно еще добавляет ключ shark_md5. Т.е. shark_md5 можно менять на свое слово и перекодировка ничего не даст злоумышленнику.

1. В файле _class.isender.php в функцию RecoveryPassword, по желанию, добавить следующее:
Код:
$text.= "ВНИМАНИЕ - это временный пароль - Не забудте его сменить в меню настройки: <BR />";
2. В файле _login.php :
После:
Код:
 $log_data = $db->FetchArray(); (12-я строка)
Добавить ниже:
Код:
 $post_pass = $func->md5Password($_POST["pass"]);
Найти:
Код:
 if(strtolower($log_data["pass"]) == strtolower($_POST["pass"])){ (16-я строка)
Заменить на:
Код:
 if(strtolower($log_data["pass"]) == strtolower($post_pass)){
3. В файле _config.php :
Найти:
Код:
 $old = $func->IsPassword($_POST["old"]); (19-я строка)
        $new = $func->IsPassword($_POST["new"]); (20-я строка)
Заменить на:
Код:
 $old_pass = $func->IsPassword($_POST["old"]);
        $new_pass = $func->IsPassword($_POST["new"]);
Ниже дописать:
Код:
 $old = $func->md5Password($old_pass);
        $new = $func->md5Password($new_pass);
Найти:
Код:
 if( strtolower($new) == strtolower($_POST["re_new"])) {  (29-я строка)
Заменить на:
Код:
 if( strtolower($new_pass) == strtolower($_POST["re_new"])){
В этом же файле поправить платежный пароль:
Код:
 $plat_pass = $func->md5Password($plat_passs);
А в _payments.php изменить:
Код:
 $plat_pass = $func->md5Password($plat_passs);
4. В файле _recovery.php :

Найти:
Код:
 $newmdPassword = md5($password); (44-я строка)
Заменить на:
Код:
 $newmdPassword = $func->md5Password($password);
5. В файле _signup.php :

Найти:
Код:
 $pass = $func->IsPassword($_POST["pass"]); (141-я строка)
Изменить на:
Код:
 $pass1 = $func->IsPassword($_POST["pass"]);
Ниже дописать:
Код:
 $pass = $func->md5Password($pass1);
Код:
 $repass = $func->md5Password($_POST["repass"]);
Найти:
Код:
 if($pass == $_POST["repass"]){ (156-я строка)
Изменить на:
Код:
 if($pass == $repass){
Сохраняем все и заливаем на сервер! Наслаждаемся безопасной работой!
Кому нужно скину файлы.

P.S. От спасибок не откажусь!
все сделал по интсрукции, но у меня не заходит, пишет
Email и/или Пароль указан неверно
 
Сверху