С вопросами безопасности web ресурсов постоянно сталкивается каждый разработчик. И, естественно, в этой области существует масса решений. В этой статье я хочу рассказать о встроенных возможностях фрэймворка CodeIgniter, которые можно использовать для авторизации посетителей и ограничения их доступа. Прежде всего, вкратце обрисую сложившуюся ситуацию. Большинство web ресурсов используют для защиты пару «имя – пароль». Это не самый безопасный вариант, но зато удобный (простой) в использовании. Более сложные методы защиты требуют от посетителя либо специальных знаний, либо покупки оборудования, либо того и другого. Например, служба WebMoney использует сертификаты для авторизации пользователей. Метод хороший, но инструкция по использованию и безопасной работе с этими сертификатами занимает несколько страниц. Обычный пользователь интернета не станет связываться с такой системой без достаточно веской причины (в случае WebMoney речь идет о его собственных деньгах).
Об аппаратной защите (вроде биометрических датчиков и т. п.) и говорить не приходиться. Эти устройства стоят денег и, зачастую, немаленьких. Поэтому, метод авторизации с помощью имени и пароля, похоже, останется самым распространенным в обозримом будущем. В «классическом» варианте этот метод работает так. Посетитель вводит имя и пароль, вы их проверяете и, если все в порядке, записываете какой-нибудь параметр в сессию (например, имя пользователя). После этого, в каждую защищенную страницу сайта нужно добавить код, который будет проверять, установлен ли нужный параметр в сессии, и если нет, предлагать посетителю ввести имя и пароль. Естественно, этот подход далеко не самый лучший, т. к. код проверки формы будет дублироваться на каждой странице. CodeIgniter предлагает элегантное решение этой проблемы.
Идея заключается в использовании метода _remap. Если в контроллере объявлен этот метод, то обращения к любому другому методу контроллера будут переадресованы ему. Теперь можно разместить код проверки в методе _remap и он будет выполняться для всех обращений к сайту.