Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Шифрование паролей






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

PHP-функция crypt() представляет собой однонаправленную криптографическую

кэш-функцию. Прототип этой функции таков:

string crypt (string str[, string salt])

Получив на входе строку str, эта функция возвращает псевдослучайную строку.

Например, если передать в функцию строку " pass" и аргумент salt равный " хх", то

cryptO вернет строку " xxkTlmYjIikoII". Эта строка не может быть дешифрована и пре-

вращена обратно в " pass" даже ее создателем, поэтому на первый взгляд строка может

и не показаться столь уж полезной. Что делает функцию сгурЮ полезной, так это то,

что результат этой функции детерминирован. При каждом вызове с одними и теми же

параметрами str и salt эта функция будет возвращать один и тот же результат.

Вместо PHP-кода, такого как

if($username == " user" & & $password == " pass")

{

// Пароль совпадает

}

можно воспользоваться таким кодом

if($username = 'user' & & crypt($password, 'хх') == 'xxkTlmYjIikoII')

{

// Пароль совпадает

Нам не требуется знать, как выглядела строка " xxkTlmYjlikoII" перед использованием функции crypt(). Необходимо только знать, совпадает ли введенный пароль с тем паролем, для которого применялась функция crypt().

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

Если для хранения данных аутентификации используется база данных MySQL,

можно воспользоваться PHP-функцией crypt() или MySQL-функцией PASSWORDO.

Результат этих функций не совпадает, но они имеют одно предназначение. Обе функции — crypt() и PASSWORDO — получают строку как аргумент и применяют к полученной строке необращаемый алгоритм кэширования.

Чтобы задействовать функцию PASSWORDO в листинге 2.1 запрос SQL следует переписать так:

select count(*) from auth where

name = ' $name' and

pass = password('$password')

Этот запрос посчитает количество строк в таблице auth, в которых значение поля name совпадает с содержимым переменной Sname и значение поля pass совпадает с результатом функции PASSWORDO, примененной к значению переменной Spassword Учитывая, что мы заставляем посетителей выбирать уникальные имена, результатом запроса может быть 0 или 1.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.