Выбор самого безопастного способа авторизации на портале

Discussion in 'PHP' started by GHostly_FOX, 28 Aug 2007.

  1. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Была одна книжка по криптографии, правда я от туда всего пару статеек прочёл, ИМХО(чтение книг вредно сказывается на глазах, читать надо только то, что действительно информативно и поможет в будущем)

    Ага, как-то задумывался над способом авторизации, кстати, паролем ничего, ни в коем случае, нельзя шифровать, тем более html !!!, его можно будет вычислить статистически после первой же страницы ;)
    Имеется ввиду пакеты длиной больше длины пароля, можно рассматривать способ разбиения страницы на пакеты, перемешивания их и добавления в каждый предыдущий пакет, пароль к следующему. В этом случае о XOR-шифровании не может быть и речь, лучше обмен байта по коду символа пароля. Хотя тоже не очень надёжно и очень не экономично.
    Если надо защищать не пароль а страницы, то уж лучше ssl использовать.
     
    #21 hidden, 29 Aug 2007
    Last edited: 29 Aug 2007
  2. madnet

    madnet Умиротворенный

    Joined:
    9 Dec 2004
    Messages:
    868
    Likes Received:
    343
    Reputations:
    423
    Да так будет погиморойнее.
    Сам пароль будет скрыт от хакера, но впринципе при снифании ничего не мешает:

    1)узнать те самые 256 байт от сервера и результат который мы получим от хэширования этих данных хешем паролем, если пароль не сложный и алогоритм хеширования пароля и данных не особо криптостойкий, то есть шанс узнать его, тут решающую роль играет алгоритм хэширования.

    2)Что нам мешает перехватить результативный хэш, отправленый клиентом и находящийся в сессии у сервера и обратится с ним к серверу? Только ограничение по IP, но можно предположить, что имея доступ к трафику злоумышним может и подделать IP.
     
    _________________________
    #22 madnet, 29 Aug 2007
    Last edited: 29 Aug 2007
  3. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Мешает:
    1) Время, это не 6ти и даже не 16ти-байтовую хэш брутить.
    2) Этот способ защищает только от смены пароля и от повторной авторизации и обеспечивает сохранность пароля.

    Для полной сохранности, можно яваскриптом посылать последовательность действий пользователя и если она не совпадает с серверной, сессия сразу-же прерывается.

    Кстати, насчёт шифрования данных паролем, только-что придумал; можно на зашифрованный паролем блок данных(тот что использовался при авторизации) наложить несколько заранее известных масок и вычислить от каждой из них хэши(также очень желательно, чтоб длины шэший зависели от самих данных, например усекать их по контрольной сумме данных, а-то снова статистика ;) ), затем этими известными только клиенту и серверу хэшами шифровать получаемые и передаваемые данные.

    ЗЫ Ладно, для маленького партальчика защита пойдёт :D
     
    #23 hidden, 29 Aug 2007
    Last edited: 29 Aug 2007
  4. GHostly_FOX

    GHostly_FOX Elder - Старейшина

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    я прочитал про технологию создания сертификатов SSL, там при создании сертификата можно использовать 3 рандомных текстовых файла сжатых gzip тут уж точно невозможно никак угадать какие именно данные были в этих файлах а значит нельзя подделать сертификат.

    А если авторизация будет проходить как к примеру на хостинге агава: Доступ по SSL и авторизация на уровне HTTP-аутентификации.

    Можно ли при такой авторизации злоумышленику получить коды доступа или авторизоватся?!
     
  5. GHostly_FOX

    GHostly_FOX Elder - Старейшина

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    Вот последние мысли по данной теме:
    При входе пользователя на страницу с формой авторизации создается сессия и рандомом генерируется код Captcha, в базу записываются данные Ip, Session_id, Captcha код, дата, время...
    Пользователь вводить Логин и пароль нажимает вход.
    Логин и пароль передаются обработчику уже в формате Md5.
    Обработчик сравнивает данные, Логина, пароля, скрипта от которого был подан запрос и сравнивает Captcha код который он берет из базы по Session_id.
    Если хоть один момент не верен то блок по Ip на минуту...

    Какие будут замечания по данному предложению?!
     
  6. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    А чего ты пытался добиться этим способом?
     
  7. GHostly_FOX

    GHostly_FOX Elder - Старейшина

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    Я хочу предотвратить кражу хешей паролей и предотвратить любые возможности прослушивания портов...
     
  8. TANZWUT

    TANZWUT Крёстный отец :)

    Joined:
    22 Jun 2005
    Messages:
    1,474
    Likes Received:
    716
    Reputations:
    744
    сделай свою ф-ию алгоритма хеширования пароля, к примеру:

    PHP:
    ............
    $pass=null;
            
    $abc="abcdefghjkmnpqrstuvwxyz".
                 
    "ABCDEFGHJKLMNPQRSTUVWXYZ";

            
    $arr=explode(chr(32),trim(chunk_split($abc,1,chr(32))));
            
    $size=count($arr)-1;

                for(
    $i=0;$i<$PasswordSize;$i++)
                
    $pass.=$arr[rand(0,$size)]; // Создание пароля
                
                // Финкция "Шифровка пароля"
                
    function encrypt($s$key)
    {
        for(
    $i=0;$i<=strlen($s);$i++)
        
    $r.=substr(str_shuffle(md5($key)),($i strlen(md5($key))),1).$s[$i];
        for(
    $i=1;$i<=strlen($r);$i++) $s[$i-1]=chr(ord($r[$i-1])+ord(substr(md5($key),($i strlen(md5($key)))-1,1)));
        return 
    urlencode(base64_encode($s));

                    
                
    // --------------------------
                    
                
    $timed date("YmdHis"); // Время регистрации
                
    $timef date("d.m.Y H:i:s"); // Время регистрации для письма
                
                //+++++++++++++++++
                
    $key md5($timed); // КЛЮЧ Для Кодирования/Декодирования
                    
                
    $s $pass;
                
    $encrypted encrypt($s$key); // Кодирование пароля с ключом
                
    $passmd $encrypted;
                
    //-----------------
                    
                #$ucode = md5($_POST['email']); // Код для активации
                    
                
    $umail $_POST['email'];
                
    $ulog $_POST['login']; 
    ...........
    PHP:
    ................
    // Функция Декодирования
    function decrypt($s$key)
    {
      
    $s=base64_decode(urldecode($s));
      for(
    $i=1;$i<=strlen($s);$i++) $s[$i-1]=chr(ord($s[$i-1])-ord(substr(md5($key),($i strlen(md5($key)))-1,1)));
      for(
    $i=1;$i<=strlen($s)-2;$i=$i+2$r.=$s[$i];
      return 
    $r;
    }
        
        
    $qe=mysql_query("SELECT pass,hash FROM users WHERE login='".$_POST['login']."' LIMIT 1");
        
    $re=mysql_fetch_array($qe);
        
        if(
    mysql_num_rows($qe)) {
        
            
    $key $re["hash"]; // КЛЮЧ Для Кодирования/Декодирования
            
    $encrypted $re["pass"];
            
            
    $decrypted decrypt($encrypted$key); // Декодирование пароля с ключом
            
            
    $pass $decrypted;
            
            
    // ------- decode end ---------
            
            
    if ($_POST['pass'] == $pass) {
    ..................
     
    _________________________
    #28 TANZWUT, 3 Sep 2007
    Last edited: 3 Sep 2007
  9. GHostly_FOX

    GHostly_FOX Elder - Старейшина

    Joined:
    4 Jan 2007
    Messages:
    34
    Likes Received:
    15
    Reputations:
    0
    Помогите настроить SSL?!
    Я уже с помощью Open_SSL и сертификаты создал...
    Поставил WEB сервер (на ОС Windows) Apache + PHP + MySQL + mod_ssl

    В Апаче прописал следующее:

    httpd.conf:
    Code:
    LoadModule ssl_module modules/mod_ssl.so
    
    <IfModule mod_ssl.c>
        Include conf/ssl.conf
    </IfModule>
    
    ssl.conf
    Code:
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    <IfDefine SSL>
    Listen 192.168.110.197:443
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    SSLSessionCache         dbm:logs/ssl_scache
    SSLSessionCacheTimeout  300
    SSLMutex default
    <VirtualHost _default_:443>
    DocumentRoot "c:/sweb/home/system/www/ssl"
    ServerName system.ssl
    ServerAdmin [email protected]
    ErrorLog logs/error_log_ssl.log
    TransferLog logs/access_log_ssl.log
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile conf/ssl.crt/server.crt
    SSLCertificateKeyFile conf/ssl.key/server.key
    <FilesMatch "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "C:/sweb/home/system/www/ssl">
               SSLOptions +StdEnvVars
               AuthType Basic
               AuthName "By Invitation Only"
               AuthUserFile c:/sweb/usr/local/apache2/conf/passwd.txt
               Require valid-user
    </Directory> 
    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    </VirtualHost>                                  
    </IfDefine>
    
    В чем проблемма?!
    не идет загрузка =(
     
  10. bopoh13

    bopoh13 Elder - Старейшина

    Joined:
    31 Oct 2006
    Messages:
    195
    Likes Received:
    20
    Reputations:
    0
    [off]Дельная была идея сделать wiki для а-чата, а то я себя после этих сообщений полным ламером чувствую. Будет на что ссылаться...

    http://slovari.yandex.ru/dict/informatica/article/info/info-490.htm?text=hash
    [/off]
     
  11. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Вот нашел статейку интересную
    http://www.habrahabr.ru/blog/php/24389.html
    Полезно почитать...
     
  12. FoxMALDER

    FoxMALDER Elder - Старейшина

    Joined:
    26 Jul 2007
    Messages:
    43
    Likes Received:
    20
    Reputations:
    -1
    Складывается впечатление, что наш народ думать разучился... :-(

    Кто запрещает при авторизации взять на вооружение, следующие параметры:
    - разрешение экрана
    - версия браузера
    - локальное время клиента
    - и т.д.
    И использовать эти данные как salt в md5... А "куда" вставить и какое количество бит salt'a использовать это по фантазии разработчика...
     
    1 person likes this.
  13. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    складывается впечатление, что у многих очень много ума, чтобы искать себе геморой на жопу. проще 5 символов сгенирировать и не парится.
     
  14. FoxMALDER

    FoxMALDER Elder - Старейшина

    Joined:
    26 Jul 2007
    Messages:
    43
    Likes Received:
    20
    Reputations:
    -1
    А кто мешает применять при этом captcha-код??? :cool:

    P.S.: При таком раскладе геморой будет не у тебя, а у того кто будет в таких дебрях разбираться...


    Мы не ищем лёгких путей!!!
     
    #34 FoxMALDER, 11 Sep 2007
    Last edited: 11 Sep 2007
  15. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    2FoxMALDER, Не подскажешь нам, необразованным, зачем нам соль при авторизации?
     
  16. FoxMALDER

    FoxMALDER Elder - Старейшина

    Joined:
    26 Jul 2007
    Messages:
    43
    Likes Received:
    20
    Reputations:
    -1
    Зачем тогда вообще использовать авторизацию?! Зачем пароль вообще каким-либо способом шифровать???

    P.S.: Я вообще предложил применить в шифровании пароля так называемый salt, а как его альтернативу брать дополнительные данные которые всегда у каждого пользователя будут уникальными...

    Для начала читай все посты, а потом рассказывай про свою образованость :D
     
    #36 FoxMALDER, 12 Sep 2007
    Last edited: 12 Sep 2007
  17. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Зачем при авторизации уникальные данные, которые у каждого КОМПЬЮТЕРА будут разные???, что ими шифровать???
    Не надо отвечать вопросами на вопросы, ты просто скажи зачем при авторизации соль, пока-что я твои посты расцениваю как флуд-оффтоп...
     
  18. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ты не думал, что я захожу на сайт не только с одного компьютера?
     
  19. FoxMALDER

    FoxMALDER Elder - Старейшина

    Joined:
    26 Jul 2007
    Messages:
    43
    Likes Received:
    20
    Reputations:
    -1
    Ок! Перейду на твой язык восприятия... Добавить соль к паролю и защифровать.

    Выше сказано было достаточно... Я предлагал, как АЛЬТЕРНАТИВНЫЙ метод... Если кому-то не нравится, я лично не навязываю такой способ никому!

    Ответь на такой вопрос, нахрена тогда пароль в чистом виде шифровать в md5 и передавать на сервак?! Если lookup можно сделать не напрягаясь!

    Давай перейдём на реальные вещи, для твоего понимания...
    1) Открываю страницу авторизации, вижу форму: login, pass, captcha.
    2) Ввожу login, pass, captha
    3) Отправляю: login, md5(md5(captcha):md5(pass)), captcha

    Это как пример соли в пароль, можно не именно так...

    P.S.: Смысл уловил?! :cool:
     
  20. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    добавлю к hidden: мы, кстати говоря, вообще не обязаны передавать этот самый блок длинной 256 в открытом виде;) к прочтению
    Code:
    http://ru.wikipedia.org/wiki/Алгоритм_Диффи_—_Хеллмана
    
     
    #40 ZaCo, 1 Nov 2007
    Last edited: 1 Nov 2007