Статьи

Библиотеки аутентификации и контроля доступа PHP

В ответ на письмо, которое я получил, с просьбой дать рекомендации по PHP-аутентификации и библиотекам контроля доступа, я пытался определить, что нужно делать этой библиотеке. Если честно, я не уверен, что могу на 100% рекомендовать одну библиотеку; Я, как правило, виновен в DIY — последний раз, когда полтора года назад он действительно исследовал это, я не смог найти ничего, что могло бы меня убедить.

С моей точки зрения, аутентификация (проверка действительного пользователя) и контроль доступа (имеет ли действительный пользователь разрешение на это) — разные вещи, и библиотека должна отражать это. Аутентификация обычно происходит раньше, чем что-либо еще на «глобальном» уровне в приложении, в то время как контроль доступа может быть пронизан всем, вплоть до того, что меню, например, показывает только те элементы, которые пользователь может выполнять. Управление пользователями (регистрация, обслуживание и т. Д.) Также должно быть отдельной функцией (если она вообще предусмотрена).

Несколько мыслей / требований для библиотеки безопасности «мечты».

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

— «протокол» аутентификации (механизм между браузером и веб-сервером) должен быть гибким, допускающим различные подходы; механизмы сессии (cookie), HTTP Basic и HTTP Digest должны быть возможны. Пользователи должны иметь возможность использовать свой собственный «плагин», позволяющий им соответствовать их собственным требованиям к дизайну, например перенаправлять пользователей на другую страницу в случае сбоя аутентификации.

— Должен быть независимым от источника данных, используемого для аутентификации пользователя — базы данных, плоских файлов, LDAP, XML-RPC, SOAP и т. Д. Также должен предусматривать различные «схемы», а не привязываться к конкретным именам столбцов и т. Д. Некоторые пользователи способ аутентификации по трем полям например; имя пользователя, пароль и некоторый временный код доступа, сгенерированный с «смарт-карты».

— было бы неплохо, если бы логика контроля доступа не всегда требовала жесткого кодирования, т. Е. Вместо;


if ( $User->hasPermission('taskName') ) {
// Do the task
} else {
echo 'Permission denied';
}

… Вы можете (необязательно) использовать какой-то другой механизм управления доступом, например, файл .ini с тем же именем, что и скрипт PHP, или, возможно, что-то, основанное на URL. Возможно, что-то похожее на разрешения файловой системы Unix было бы здесь полезно.

— Допускается различная организация контроля доступа — например,
пользовательские <=> разрешения
права пользователя <=> роли / группы <=>

— Гибкость: должна работать с любым стилем кодирования PHP, от обычного PHP до фреймворков.

— Как взаимодействуют механизмы аутентификации и контроля доступа.

— Быстро (конечно) — несмотря на всю функциональность упаковки, вы платите только за то, что используете

Какие-нибудь другие требования для идеальной библиотеки безопасности?

Если бы я собирался что-то порекомендовать, это было бы для библиотеки из PEAR. В категории « Аутентификация » есть несколько пакетов, два из которых наиболее актуальны для данного обсуждения;

PEAR :: Auth — фокусируется только на аутентификации. Достигает цели обеспечения возможности аутентификации на нескольких источниках данных, используя комбинацию имени пользователя и пароля. Использует сессии / формы для поддержания состояния. Расширен с помощью PEAR :: Auth_HTTP для базовой аутентификации HTTP / дайджест-аутентификации. Получает много просмотров, что является хорошей новостью. Производительность? По какой-то причине я не могу вспомнить сейчас, я всегда был склонен к PEAR :: Auth, возможно, потому что я смотрел на раннюю версию. Глядя на код, знаю, что в целом это кажется разумным выбором.

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

Какие еще библиотеки вы рекомендуете?