Page 177 - 4636
P. 177

Smysql = mysqli_connect("localhost", "webauth", "webauth"); if
           (Ismysql) {
           echo "Неможливо підключитися до СУБД.";
           exit; I
           // Вибір потрібної бази даних
           $selected = mysqli_selectdb($mysql, "auth"); if (!$selected) I
           echo "Неможливо вибрати базу даних.";
           exit; )
           // Запит до бази - вибірка відповідної до запису Squery = "select count
           (*) from authorizedusers where name = '" . $name."' and password =
           '".Spassword."'";

           $result = mysqli_query($mysql, Squery); if (!$result) (
           echo "Неможливо виконати запит";
           exit;
           )
           $row = tnysqli_fetch_row($result); Scount ■ $row[0];
           if  (Scount > 0) 1 // Комбінація імені й пароля відвідувача вірна echo
           "<Ы>Ви на місці !</hl>";
           echo "<р>Ви напевно щасливі оглянути цю секретну сторінку</р>"; )  else
           ( // Комбінація імені й пароля відвідувача невірна echo "<hl>Kиш звідси
           !</hl>"  .
           "<р>Вам не дозволено переглядати даний ресурс</р>"; ) I ?>
           Використовувану  в  прикладі  базу  даних  можна  створити,  підключившись  до  Mysql  як
        привілейований користувач і запустивши сценарій, наведений у лістингу 10.3.
              Лістинг 10.3. createauthdb. sql — ці Mysql-Запити створюють базу даних auth, таблицю
        authorised users і двох користувачів
           create database auth; use auth;
           create table authorized_users ( namevarchar(20),
           passwordvarchar(40),
           primary key (name)
           );
           insert into authorizedusers values ('username', 'password'); insert
           into authorizedusers values ('testuser', shal('password'));
           grant select on auth.* to 'webauth' identified by 'webauth';
           flush privileges;

           10.4 Шифрування паролів

              Незалежно від того, де зберігаються паролі — у базі даних або у файлі — зберігання паролів у
        вигляді простого тексту сполучене з невиправданим ризиком. Односпрямований алгоритм хешування
        забезпечує кращий захист при незначних додаткових витратах.
              РНР пропонує кілька односпрямованих хеш-функцій. Найбільш старою й найменш захищеною з
        них є функція crypt (), яка реалізує алгоритм Crypt з Unix. Алгоритм обчислення дайджесту Message
        Digest 5 (MD5), реалізований у функції md5 (), більш стійок.
              Ще  більш  стійкий  алгоритм  Secure  Hash  Algorithm  1  (SH\-1).  Php-Функція  shal()  реалізує
        стійкий  односпрямований  криптографічний  хеш-алгоритм.  Прототип  цієї  функції  виглядає  в  такий
        спосіб:
              string shal (string str [,  bool rahr_output])
              Одержавши  на  вході  рядок  str,  ця  функція  повертає  псевдо  випадкову  цим-юльную  рядок.
        Якщо  в  параметрі  raw_output  передати  true,  функція  поверне  20-символьний  рядок  двійкових
        даних.     Наприклад,       для     рядка     "password"      функція     shal()        поверне      рядок

                                                            174
   172   173   174   175   176   177   178   179   180   181   182