учитель труда в средней школе сказал(а):
"Технику безопасности я знаю, как свои три пальца!"
to
krn:
Вы, в принципе, все верно пишете. Более того, именно такой механизм успешно реализован в domino session authentication.
Оно конечно будет работать. НО только при условии, что все сделано верно.
То, что переменная устанавливается кодом на сервере, никоим образом не гарантирует, что в этом коде нет ошибок.
Например, ваше предложение использовать unid документа в качестве ключа сессии - очевидная дыра.
Вообще проблем несколько:
0. Собственно процедура логина. Если нет защиты канального уровня, подходит банальный съем трафика.( разновидность man in the middle )
1. Аутентификация: воcстановление имени пользователя по sessionId.
Взаимно-однозначное соответсвие не подходит, т.к. ничем не лучше, чем каждый раз слать логин-пароль. Т.о. sessionId должен обладать конечным временем жизни, т.е. должен "протухать" со временем - нужно уметь генерить именно "сессионый" ключ.
Как будете восстанавливать имя пользователя по sessionId?
Что будете включать в состав ключа, кроме username: время создания? IP пользователя? порт? User-agent?
Как будете защищаться от подделки ключа? от перехвата?
Как будет передаваться ключ: в URL? в cookies? в других заголовках http? в теле запроса?
Как защищаться от попадание ключа в различные кэши: кэш браузера, прокси?
Как будете хранить пароль пользователя в БД?
2. Авторизация.
Самое вкусное. В php обычно в бекенде сидит реляционка, и при обращениях к ней за данными фигурирует username, полученный на этапе аутентификация. Кроме как через соотв. селекты, данные получить невозможно. Т.о. существует единая точка входа к уровню данных.
В домино такой точки нет. Есть стопицот способов получить данные из домино через веб. Вьюхи, формы, документы, агенты, xpages и пр. При использовании доминошной авторизации всю эту кухню можно защищать штатными средствами. В вашем случае, вы должны будете вручную закрыть ВСЕ возможные входы.
Вы обязательно что-нибудь забудете закрыть. Ничего личного. Я чуть-чуть давно работаю с домино, в т.ч. с веб, но до сих пор не готов построить защищенное веб-приложение, без использования "штатных" механизмов ограничения доступа.
Количество нюансов, связанных с аутентификацией/авторизацией таково, что не стоит пытаться делать это самому - это классический пример переизобретения велосипеда. При этом
гарантировано, что с первой попытки у вас получится очень хреновый велосипед. Однако, в отличие от других програмерских ошибок, косяки в модулях безопасности воспринимаются заказчиком наиболее болезненно.
Хочется пройтись по этим граблям - велкам.
P.S. В качестве разминки: как будете закрывать доступ к документу, содержащем мои логин, пароль( я надеюсь, что не открытом виде ) и скан паспорта в RT поле?