Разрешение пользователя и безопасность программного обеспечения - PullRequest
0 голосов
/ 29 февраля 2012

Я разрабатываю приложение в php codeigniter . Теперь я беспокоюсь о разрешении.

Мне нужно разрешение на странице, страница может быть страницей добавления записей, страницей редактирования, страницей удаления, распечаткой отчета и т. Д. Также будет много пользователей, и со временем применение будет расти.

Если я реализую ACL, это будет лучше для меня или нет

что может быть для меня идеальным любым предложением.

1 Ответ

3 голосов
/ 29 февраля 2012

Во-первых, давайте проясним некоторые термины: я лично использую термин security для таких вещей, как предотвращение SQL-инъекций, XSS-атаки, где мы должны проверять ввод, фильтровать / дезинфицировать значения, заботиться о динамическисгенерированные команды SQL, позаботьтесь о правильном экранировании вывода (для текста в формате JSON или HTML или атрибутов HTML) и т. д. Это , а не о том, что вы спрашиваете, если я правильно понял.

контроль доступа или права доступа * Система 1010 * - это то, где вы предоставляете или запрещаете доступ к функции для пользователя.Это может быть безопасно или нет.Я понимаю, что запретить пользователю, который не имеет разрешения на доступ к функции, может звучать как «безопасность», но я бы не использовал это конкретное слово в этом контексте, чтобы избежать путаницы.

Теперьответ:


Я настоятельно рекомендую вам создать несколько базовых классов контроллеров для ваших нужд.Внимательно прочитайте следующее сообщение в блоге (оно короткое и полезное): http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY

Код, проверяющий правильность аутентификации пользователя (вошедшего в систему), имеет важное значение.Если пользователь не вошел в систему, перенаправьте на домашнюю страницу или на страницу входа.

Для детального контроля вы можете создать свой ACL в базе данных, используя таблицу users, плюс таблицу actions,плюс таблица acl ...

Таблица users будет содержать данные пользователей (идентификатор, имя, логин, пароль и т. д.)

Таблица actions будет содержатьполе id и, по крайней мере, еще одно поле, содержащее то, что лучше всего подходит для вашего приложения: это может быть только имя класса контроллера (первая часть URL, например: «products»), предоставление доступа ко всему контроллеру «products» илине.Или вы можете захотеть включить как класс контроллера, так и имя метода (первую и вторую части URL, например: «products / add» и «products / delete») и т. Д.

Определиться с таблицей actions - самый решающий шаг.Подумайте об этом очень хорошо, сбалансируйте ваши потребности (ваши «истинные» потребности) ... Я разработал систему, в которой каждое действие имеет свою запись.Это хорошо, но для поддержания необходимо работа .

Очень полезный столбец для таблицы actions - это удобочитаемое описание действия.

Тогда acl будет представлять собой не что иное, как столбец для идентификатора пользователя и другой столбец для идентификатора действия.

Поле доступа «master» для предоставления / запрета в usersТаблица также полезна, если вы хотите временно запретить доступ определенному пользователю, без необходимости удалять все его разрешения и, возможно, позже восстанавливать его.

С таблицами базы данных и вашим «контроллером / методом»или стратегия «действий» четко определена, вы можете легко закодировать в своем базовом классе контроллера функцию, которая проверяет, есть ли у пользователя разрешение на выполнение запрошенного действия.


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

Система имеет несколько модулей, ифункции.Интерфейс не показывает ничего, к чему у пользователя нет доступа.Итак, у меня есть пользователи, которые могут видеть только один или несколько модулей, и они даже не представляют существование других модулей.

Требуется больше работы для управления всем этим, но результат стоит.

Я также log каждому предоставлен доступ, поэтому можно отслеживать, кто что сделал и когда.Эту функцию журнала очень легко добавить, поскольку у вас есть «основная функция» базового контроллера, позволяющая или запрещающая пользователям выполнять действия.

Надеюсь, я помог.Я только что рассказал о том, что сработало (и работает) для меня ...

...