Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > кодирование пароля


Автор: Zzet 10.7.2009, 12:43
Здравствуйте! может подскажите как закодировать пароль в административной части сайта? smile  smile 

Автор: underW 10.7.2009, 12:46
md5

Автор: MoLeX 10.7.2009, 13:22
underW, с помощью md5() мы не закодируем, а зашифрует пароль. 
 
Zzet, если тебе точно надо закодировать то к твоим услугам base64_encode()

Добавлено через 38 секунд
P.S. предпочтительней хэшировать

Автор: Zzet 10.7.2009, 13:26
а какая разница между шифрованием и кодированием? я использую пароль для входа в административную часть, что использовать?

Автор: underW 10.7.2009, 13:35
я вот недавно читал в книге "PHP5 и MySQL. Библия пользователя" Глава44. Аутентификация пользователей... так там md5.

Автор: MoLeX 10.7.2009, 13:51
Цитата(Zzet @  10.7.2009,  13:26 Найти цитируемый пост)
а какая разница между шифрованием и кодированием? 

1. ф-ция md5()  - ты получишь хэш который тебе не расшифровать, можно только подобрать
2. ф-ция base64_encode() - получишь закодированную строку которая декодируется с помощью base64_decode()

Теперь смотрим ситуацию: в результате твоей ошибки в скрипте есть sql-уязвимость. Плохой человек находит её и получает пару логин:пароль. В дальнейшем события развиваются двумя способами
1. при использование md5() он начинает судорожно подбирать пароль
    Вполне вероятно, что в базе хэшей присутствует такой же хэш - значит этот плохой человек получит исходный пароль. 
    Чтобы этого не случилось надо при хэширование добавить соль - тут же перевод строки - md5("\n".$pass)
2. при использование base64_encode() он воспользуется base64_decode() и получит твой пасс и соотвественно доступ в админпанель

Добавлено через 3 минуты и 20 секунд
P.S. 
http://insidepro.com/hashes.php

Автор: Ипатьев 10.7.2009, 14:30
Перед тем, как задавать вопрос "как", сначала надо ответить на вопрос "зачем".
Зачем кодировать пароль административной части? 

Автор: Zzet 10.7.2009, 15:23
Цитата

Перед тем, как задавать вопрос "как", сначала надо ответить на вопрос "зачем".
Зачем кодировать пароль административной части?  

я выкладываю сайт на хостинге. в пользовательской части есть информация заказчика. в административной оператор со стороны заказчика вносит изменения, для того, чтобы войти в адм часть оператору, а не бухгалтеру, к примеру, нужен пароль. или я что-то не так понимаю. тогда подскажите, пожалуйста как это пооперационно должно работать

Автор: Ипатьев 10.7.2009, 15:39
Записываешь пароль в базу данных или в файл.

Автор: Zzet 10.7.2009, 16:03
не могу понять механизм.разбираю пример с паролем. записан пароль в файл connect.inc.php
Код

<?php
    define('ADMIN_LOGIN', 'YWRtaW4='); //administrator's login
    define('ADMIN_PASS', '7215ee9c7d9dc229d2921a40e899ec5f'); //administrator's login
?>


как сформирован этот пароль. не могу догнать.
операции выполняются в коде
Код


<? 
   // session_start();
    include("connect.inc.php");

    if (isset($_POST["authorize"]))
    {
        if (!strcmp(base64_encode($_POST["login"]), ADMIN_LOGIN) && !strcmp(md5($_POST["password"]), ADMIN_PASS))
        { //login ok
            $_SESSION["log"] = ADMIN_LOGIN;
            $_SESSION["pass"] = ADMIN_PASS;
            //redirect to the admin interface
            header("Location: index2.php");
        }
        else $errorStr = "Invalid login and/or password";
    }
?>
<html>
<head>
<link rel=STYLESHEET href="style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=cp1251">
<title>Administrator login</title></head>
<body>
<center>
<?php
    if (isset($errorStr)) echo "<font color=red><b>$errorStr</b></font>";
?>
<form name="form1" method="post" action="access_admin.php">
    <table border="0" cellpadding="2" cellspacing="1" bgcolor="#333333">
      <tr bgcolor="#CCCCCC"> 
        <td colspan="2" align=center><h4>Administrator login</h4></td>
  </tr>
      <tr bgcolor="#FFFFFF"> 
        <td align="right">Login:</td>
        <td> 
          <input type="text" name="login"<?php if (isset($_POST["login"])) echo ' value="'.str_replace("\"","&quot;",stripslashes($_POST["login"])).'"';?>></td>
  </tr>
      <tr bgcolor="#FFFFFF"> 
        <td align="right">Password:</td>
        <td> 
          <input type="password" name="password"></td>
  </tr>
</table>
    <p>
      <input type="hidden" name="authorize" value="1">
      <input type="submit" value="Login">
    </p>
  </form>
  <p><a href="index.php">Start page...</a></p>
</center>
</body>
</html>


как сформирован этот пароль. не могу догнать?

Автор: Ипатьев 10.7.2009, 16:13
Цитата(Zzet @  10.7.2009,  16:03 Найти цитируемый пост)
strcmp(md5($_POST["password"])


Автор: Zzet 10.7.2009, 16:18

Код

<?php
    define('ADMIN_LOGIN', 'YWRtaW4='); //administrator's login
    define('ADMIN_PASS', '7215ee9c7d9dc229d2921a40e899ec5f'); //administrator's login
?>

что я ввожу в форме. как его задать , чтобы код сравнивал с ('ADMIN_LOGIN', 'YWRtaW4='), ('ADMIN_PASS', '7215ee9c7d9dc229d2921a40e899ec5f')?

Автор: Ипатьев 10.7.2009, 16:21
это знает только тот, кто писал код

Автор: Zzet 10.7.2009, 16:23
запускаю код и выходит что можно зайти на страницу и без пароля

Добавлено через 1 минуту и 27 секунд
как задать свой логин и пароль

Автор: lelik133 10.7.2009, 16:29
при запросе страницы выдавать форму запроса логина/пароля, потом сравнивать их с правильными, определенными define`ами как у вас или хранящимися в базе

Автор: Zzet 10.7.2009, 17:31
хорошо. генерирую свой логин и паролью.
допустим логин zvezda пароль 111.
кодирую логин хеширую пароль изменяю значения в файле connect.inc.php соответствующие логину и паролю
по нажатию кнопки в форме ввожу свой логин и пароль. получаю ошибку логина/пароля. 
в чем дело. что делаю не так?

Автор: Ипатьев 10.7.2009, 17:37
Цитата(Zzet @  10.7.2009,  17:31 Найти цитируемый пост)
что делаю не так?

- кодирую логин
- хеширую пароль 
- изменяю значения в файле connect.inc.php 
- по нажатию кнопки в форме ввожу свой логин и пароль. 

любое из вышеперечисленных действий.
плюс ошибки могут быть в коде и на сервере. 

Скажи, ты в состоянии написать код, который просто проверяет логин и пироль безо всякого хэширования и кодирования?

Автор: Zzet 10.7.2009, 17:49
да
Код

include("connec1t.inc.php");

    if (isset($_POST["authorize"]))
    {
        if (!strcmp($_POST["login"], ADMIN_LOGIN) && !strcmp($_POST["password"], ADMIN_PASS))
        { //login ok
            $_SESSION["log"] = ADMIN_LOGIN;
            $_SESSION["pass"] = ADMIN_PASS;
            //redirect to the admin interface
            echo "xxxxxxxxx";
           // header("Location: index2.php");
        }
        else $errorStr = "Неверный логин и/или пароль";
    }

в connec1t.inc.php
Код

<?php
    define('ADMIN_LOGIN', 'zvezda');
    define('ADMIN_PASS', '111');//administrator's login   
?>

работает, только с проблемы с header header("Location: index2.php");
говорит Cannot modify header information - headers already sent by 
но сейчас архиважно кодир и хешир

Добавлено через 1 минуту и 27 секунд
да
Код

include("connec1t.inc.php");

    if (isset($_POST["authorize"]))
    {
        if (!strcmp($_POST["login"], ADMIN_LOGIN) && !strcmp($_POST["password"], ADMIN_PASS))
        { //login ok
            $_SESSION["log"] = ADMIN_LOGIN;
            $_SESSION["pass"] = ADMIN_PASS;
            //redirect to the admin interface
            echo "xxxxxxxxx";
           // header("Location: index2.php");
        }
        else $errorStr = "Неверный логин и/или пароль";
    }

в connec1t.inc.php
Код

<?php
    define('ADMIN_LOGIN', 'zvezda');
    define('ADMIN_PASS', '111');//administrator's login   
?>

работает, только с проблемы с header header("Location: index2.php");
говорит Cannot modify header information - headers already sent by 
но сейчас архиважно кодир и хешир

Добавлено через 3 минуты и 6 секунд
 в коде connec1t.inc.php в комментарии не administrator's login, а administrator's pass

Добавлено через 5 минут и 24 секунды
 в коде connec1t.inc.php в комментарии не administrator's login, а administrator's pass

Автор: patap 10.7.2009, 17:59
на счет header:
перед хидером не должно быть ни какого вывода в браузер

Автор: Zzet 10.7.2009, 18:07
patap , без вывода в браузер тоже не работает. если  имелось ввиду только
Код

echo "xxxxxxxx";

выдает ту же ошибку

Автор: patap 10.7.2009, 18:11
ну может там еще что-то есть... допусти в сам начале страницы перед <?php стоит перевод строки или пробел, или если файл сохранен в UTF-8, то возможно в начале файла дописана метка  BOM (3 байта вроде). она тоже считается выводом

Автор: Ипатьев 10.7.2009, 18:22
сделай echo md5(ADMIN_PASS);

Автор: Zzet 10.7.2009, 18:27
patap, спасибки, у меня как раз /n стоял.   smile 
что делать с кодированием, хешированием непонятно  smile

Добавлено через 10 минут и 56 секунд
получил 698d51a19d8a121ce581499d7b701668. подставил в файл. теперь работает. было также но не работало. вожможно причина была в md5("\n".ADMIN_PASS). спасибо, танцую от счастья smile 

Автор: ZTI831 11.7.2009, 15:49
я делаю так: 
$pass = "asdfghj23";
$result = md5 (md5 ("k4sngh235578i8o".$pass) );

Можно ли еще как нибдуь усложнить мой скрипт?

Автор: Ипатьев 11.7.2009, 19:08
зачем?

Автор: ZTI831 11.7.2009, 20:04
Для усложнения подбора.

Автор: Ипатьев 11.7.2009, 20:18
А сейчас он недостаточно сложен?

Автор: ZTI831 11.7.2009, 20:37
сложен, но я подумал можно еще как нибудь усложнить, вот вас и спросил

Автор: Ипатьев 11.7.2009, 20:57
Глупо ставить железную дверь на сарай из картона. 
Я думаю, к тебе на сайт можно попасть с помощью десятков разнообразнейших уязвимостей. Не прибегая ни к какому паролю. И я рекомендую тебе заняться именно ими, а не увеличением времени подборя пароля с тысячи до миллиона лет.

Автор: Staind 12.7.2009, 00:25
2ZTI831, хешировать хеш бесполезно.
Я делаю sha1(md5($string)) - хотя считаю это тоже излишеством.

Автор: Nirvana77 13.7.2009, 01:04
Мужики живите спокойно  smile 

Код

    // функция шифровки ГОСТ 28147-89
    public function encode_gost($str, $kl) 
    {
        $vector = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_GOST, MCRYPT_MODE_ECB), MCRYPT_RAND);
        $this->keys = md5(mhash(MHASH_SHA256,$kl));
        $key = $this->keys;
        $encode = $str;
        $encrypt = mcrypt_encrypt(MCRYPT_GOST, $key, $encode, MCRYPT_MODE_ECB, $vector);
      return $encrypt;
    }

    // функция расшифровки ГОСТ 28147-89
    public function decode_gost($str, $kl) 
    {
        $vector = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_GOST, MCRYPT_MODE_ECB), MCRYPT_RAND);
        $this->keys = md5(mhash(MHASH_SHA256,$kl));
        $key = $this->keys;
        $decode = $str;
        $decrypt = mcrypt_decrypt(MCRYPT_GOST, $key, $decode, MCRYPT_MODE_ECB, $vector);
      return $decrypt;
    }

// $kl - это ключ для шифровки или расшифровки, а $str - шифруемый текст.

$keys = 'Россия - Родина моя';
$texts = 'Жил был у дедушки серенький козлик и этот козлик любил по утрам выпивать';
echo encode_gost($texts, $keys);


Автор: Ипатьев 13.7.2009, 07:41
Хороший пример комментария не в тему.

Автор: bazzjr 13.7.2009, 16:55
Читаю и медленно ахреневаю над тем как умы поворачиваются извратится над хэшированием пароля  smile 

Апсолютно согласен с Ипатьев, когда он говорил что кроме пароля существует еще тысяча других дыр  smile 

Так что не теряйте время на изобретение велосипеда в хэшированием пароля!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)