Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Пт Июн 18 2004 01:00 Заголовок сообщения: Запороленный сайт |
|
|
Тут уже пытались спросить про это, но тама ушла от темы
В обшем фигня такая, есть страница с формой ввода логина и пароля, и несколько секретных страниц, доступ к которым может получить только авторизованный пользователь.
Нужен относительно простой и в надежный код для реализации защиты. Сверх супер пупер навороченной защиты не нужно - код должен быть компактным.
Своим умом я понял следующее...
После того, как пользователь вводит регистрационные данные, они должны сравниваться с хранящимися в базе, пользователь должен пересылаться на одну из секретных страниц, а также в каких-то глобальных переманных должны сохранятся данные о пользователе, чтобы можно было на секретных страницах проверить, авторизован ли пользователь или нет.
В принципе все понятно, но остаются несколько вопросов, которые ставят в тупик.
1) Как вообще правильно сравнивать введенные данные с данными в базе, подходит ли для этого запрос вида
Код: |
SELECT UserID FROM Users WHERE UserName=$txtLogin AND UserPass=$txtPass
|
или нужно применять что-то хитрее.
2) В момент передачи данных от формы в скрипт-обработчик данные тоже нужно как-то зажитить, потому как они отправляются в открытом виде. А вообще на сколько реально перехватить эти данные?
Если передаваемые данные все таки зашифровать, тогда приведенный выше запрос выполнить неполучится без предварительной расшифровки данных (предпологается что данные в базе не зашифрованны)
3) Чтобы на секретных страницах проверить авторизован ли уже пользователь, нужно иметь какие нибудь данные о пользователе. Вопрос - какие. Можно конечно при авторизации запоминать логин и пароль и проверять их снова при входе на каждую секретную страницу. Но в чем их запоминать? В куки или в сесии. С куками все понятно - это не вариант, их относительно легко спереть. А вот сессия? У пользователя хранится только идентификатор сессии, а переманные, создаваемые в сессии где хранятся? И что даст злоумышлиннику перехват номара сессии? Если в качестве информации о пользователе хранить не имя и пароль а что-то еще - тогда что? В некоторых скриптах видел, что факт авторизации проверяется простой проверкой открыта ли сессия, но помоему это слабовато, или нет? Как вообще можно подделать сессию?
Прошу всем кто что-то знает высказаться, возможно вместе мы найдем оптимальное решение. |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Пт Июн 18 2004 05:59 Заголовок сообщения: |
|
|
Соввсем недавно, кстати, говорилось об этом.
Используй хеш-функцию md5. Каждому паролю она сопоставляет уникальную строку хеша. Принцип в несимметричности кодирования/декодирования Т.е. Закодировать легко, раскодировать НЕВОЗМОЖНО. При регистрации просишь пароль и конвертишь в md5. Сохраняешь в базу. Если кто достанет, восстановить не сможет. Когда юзер логинится, конвертишь в md5 его пароль и сравниваешь с тем, что в базе. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Июн 18 2004 16:17 Заголовок сообщения: Re: Запороленный сайт |
|
|
Почитай про SSL и сессии все чудно расписано в MSDN (если asp сервер) |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Пт Июн 18 2004 16:34 Заголовок сообщения: |
|
|
Нет не ASP, предпологается использовать PHP и про SSL реч вообще не идет. |
|
Вернуться к началу |
|
|
wildwind
Зарегистрирован: 03.02.2004 Сообщения: 268 Откуда: Москва
|
Добавлено: Пт Июн 18 2004 19:45 Заголовок сообщения: Re: Запороленный сайт |
|
|
ZooY писал(а): | 1) Как вообще правильно сравнивать введенные данные с данными в базе, подходит ли для этого запрос вида
Код: |
SELECT UserID FROM Users WHERE UserName=$txtLogin AND UserPass=$txtPass
|
или нужно применять что-то хитрее.
...
3) А вот сессия? У пользователя хранится только идентификатор сессии, а переманные, создаваемые в сессии где хранятся? И что даст злоумышлиннику перехват номара сессии? ... Как вообще можно подделать сессию? |
1) А $txtLogin и $txtPass это bind-переменные или просто подстановочные? Если второе, то можешь поиметь хак под названием sql injection.
3) Переменные сессии хранятся на сервере. Для хранения идентификатора сессии есть два метода, и они общие для всех серверов и языков. Первый - id хранится в куках. Второй - id кодируется в URL. (Попробуй отключить куки и зайди на mail.ru - увидишь.) Перехват идентификатора дает возможность отправлять запросы от имени того пользователя. Но это если сервер не проверяет еще и IP адрес, а такое бывает редко.
Подробнее читай в MSDN. |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Вс Июн 20 2004 13:42 Заголовок сообщения: |
|
|
Цитата: | Перехват идентификатора дает возможность отправлять запросы от имени того пользователя. Но это если сервер не проверяет еще и IP адрес, а такое бывает редко. |
А как узнать, проверяет сервер или не проверяет? |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Июн 20 2004 16:18 Заголовок сообщения: |
|
|
В доке на сервер смотри про поддержку сессий. Часто айпишник кодируется в идентификаторе сессии. |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Вт Июн 22 2004 15:36 Заголовок сообщения: |
|
|
Вот нашел очень интерестную статейку http://www.tltdev.net/articles.php?id=2&sid=a189d55e9b047217acce2da8bdcbe887
Все конечно прикольно, только есть одна проблема - как создавать пользователей. Т.е. ввожу я логин и пароль нового пользователя, а что потом... В статье подразумевается (да и все об этом говорят), что пароли хранятся в базе в захешированном виде. Пароль захешировать я могу у клиента. Но получается что посылать на сервер мне его придется не в запороленном виде (как в статье при авторизации), а в таком захешированном, иначе если я его запоролю приведенным способом, я не смогу извлеч на сервере хеш пароля, потому как кодируется все необратимым шифром.
Получается, что если злоумышленник перехватит пароль при создании пользователя - он сможет им воспользваться.
Что делать в такой ситуации? Применять какой-либо обратимый шифр при создании пользователя для отправки пароля на сервер? Или может есть что попроще? |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Вт Июн 22 2004 16:35 Заголовок сообщения: |
|
|
Кстати, если разрешено то юзай файлы .htacess - легко и непринужденно закрываешь часть директорий сайта от незванных гостей либо по паролю, либо по ip, либо и так и сяк. И ненадо мучаться с самопальной авторизацией! Apache все за тебя сделает! _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Июн 22 2004 20:13 Заголовок сообщения: |
|
|
А потом создаешь новую запись о пользователе в базе данных или в файле.
В простейшем случае это пара [login,md5(password)]
И в файле куча таких записей. При добавлении новой, нужно следить, чтобы старые не стирались (если пользуешь файл, а не db) |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Ср Июн 23 2004 10:48 Заголовок сообщения: |
|
|
Да, это все хороше для какого нибудь раздела администрирования, когда под него можно целую папку отвести, а если это какой нибудь форум, или что нибудь иное когда в одной папке находятся и открытые файлы и секретные... |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Ср Июн 23 2004 12:05 Заголовок сообщения: |
|
|
а в чем проблема лишний каталог создать? дажи идеология будет верной - то что не для всех лежит отдельно. и сразу заморочки с дырявыми скриптами пропадают - в апаче все реализовано намного серьезнее чем ты сможешь наваять ручками. кстати, опять же - чем отличаются "секретные" файлы от раздела администрирования? по сути ничем - кому-то можно, кому-то ни-ни.
в общем я своё мнение высказал, заморачиваться с самопалом имеет смысл только если есть объективные причины не создавать отдельный каталог. они есть? если нет, то .htacess тебе в руки _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Ср Июн 23 2004 13:37 Заголовок сообщения: |
|
|
они есть - Windows-хостинг |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Ср Июн 23 2004 14:33 Заголовок сообщения: |
|
|
А если все таки использовать SSL, какие неудобства может терпеть пользователь, и зависит ли возможность использования SSL от обозревателя? |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Ср Июн 23 2004 15:02 Заголовок сообщения: |
|
|
вот меня еще мучает такой вопрос...
Большинство более или менее надежных систем авторизации пытаются защитится от перезвата трафика, а вообще на сколько это реально? |
|
Вернуться к началу |
|
|
Astaroth
Зарегистрирован: 17.05.2004 Сообщения: 453 Откуда: Питер
|
Добавлено: Ср Июн 23 2004 16:03 Заголовок сообщения: |
|
|
От чего защититься??? _________________ Не очеловечивайте компы - они этого не любят! |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Чт Июн 24 2004 10:48 Заголовок сообщения: |
|
|
В статье, которую я уже приводил (http://www.tltdev.net/articles.php?id=2) чел говорит, что, цитирую: "Стандартный механизм сессий не позволяет хранить дополнительную информацию о каждой сессии. Поэтому придется переопределить управляющие функции, а сами сессии хранить в БД". В БД, в частности он пишет IP-адрес. Вопрос - а разве его нельзя хранить в самой сессии, какая разница то? |
|
Вернуться к началу |
|
|
ZooY
Зарегистрирован: 15.01.2002 Сообщения: 210 Откуда: Россия, Москва
|
Добавлено: Чт Июн 24 2004 10:51 Заголовок сообщения: |
|
|
Astaroth писал(а): | От чего защититься??? |
Я конечно не так выразился, защитится от перезвата нельзя, пытаются сделать перехват бесполезным, так скажем, но тем не менее вопрос остается, на сколько реален перехват трафика? |
|
Вернуться к началу |
|
|
|