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