The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Авторизация на сайте, !*! Сергей, 19-Июл-04, 10:23  [смотреть все]
Есть небольшой сайт. Сушествует следующая проблема - нужно на нем авторизироваться. Пока я просто таская логин и пароль в строке адреса (то есть страницы выглядят page.pl?login=$login&password=$password).

Как Вы понимаете - это не есть очень хороший способ. Но проблема в том, что я не знаю, как можно сдлелать лучше. Если не слжно, скажите, пожалуйста, как нужно грамотно делать авторизацию.....

  • Авторизация на сайте, !*! ihor, 12:39 , 19-Июл-04 (1)
    а на сайте твои скрипты работабт?
    самое простое, если скрипты на сайте обрабатывают и метод POST, использовать его. смотри, напр. модуль HTTP.
    • Авторизация на сайте, !*! Сергей, 13:11 , 19-Июл-04 (2)
      >а на сайте твои скрипты работабт?
      >самое простое, если скрипты на сайте обрабатывают и метод POST, >использовать его.
      >смотри, напр. модуль HTTP.

      Честно говоря, не вполне тебя понял...

      Сайт написан полностью мной, то есть скпритвы все мои (соответственно я могу их как угодно править и что угодно с ними делать)

      Скримты на сайте могут отрабатывать и ПОСТ (имхо для param() нет никакой разницы, как переданы значения Post-ом или Get-ом).

      Исключительно метод POST я не могу исползовать, так как необходимо ходить по сайту не только с помощью кнопок submit, но и по ссылкам (а через простую ссылку, насколько я знаю POST-ом передать нельзя).

      Модуль HTTP достаточно большая штука. Что конкретно нужно мне смотреть, что подходает под мои запросы?


      Сорри, если несколько невнятно ответил, просто я не очень понял твой ответ...

      • Авторизация на сайте, !*! ihor, 13:52 , 19-Июл-04 (3)
        а я не совсем понял, что ты хочешь сделать.
        скрипт, который берёт страницы с сайта и при необходимости аутентифицируется?
        или, нужно сделать страницы, с которых бы пользователь прозрачно переходил бы на другие защищённые страницы?
        • Авторизация на сайте, !*! Сергей, 15:39 , 19-Июл-04 (4)
          >а я не совсем понял, что ты хочешь сделать.
          >скрипт, который берёт страницы с сайта и при необходимости >аутентифицируется?
          >или, нужно сделать страницы, с которых бы пользователь прозрачно >переходил бы на
          >другие защищённые страницы?

          Извини, пожалуйста, действительно не очень грамотно все рассказал. Дело в том, есть несколько страниц. Нужно, чтобы человек спокойно мог перемещаться по страницам (есть менюха с сылками), но при этом каждая страница занала, авторизирован ли он или нет (То есть нужно чтобы в начале он ввел свой логин и парль, а потом спокойно мог лазить по страницами без ввода пароля.... )

          Сейчас у меня это сделанно и работает. Но как мне кажется это сделанно не очень хорошим способом. Я все время передаю логин и парль в строке адреса (то есть все ссылку у меня выглядят page.pl?login=vasya&password=pupkin)

          Как можно сделать более грамотно все это?

          Надеюсь, что на этот раз я смог грамотнее все это объяснить.....

          • Авторизация на сайте, !*! ihor, 16:07 , 19-Июл-04 (5)
            если страницы в пределах одного сайта, можно использовать механизм сессий.
            для Perl-а должны быть соотв. библиотеки.
            или можно соорудить что-то своё на основе cookies или случайных шифрованых параметоров в URl-ах.
            • Авторизация на сайте, !*! XMan, 18:41 , 19-Июл-04 (6)
              > если страницы в пределах одного сайта, можно использовать механизм сессий.
              > для Perl-а должны быть соотв. библиотеки.

              Это интересно. Можно поподробнее. Типа, man что ? :)

              А то пока есть мысль, при логине генериться средствами БД случайное число, загонять его в MD5-хэш, сохранять этот хэш в таблице пользователей и отправлять в виде куки клиенту. Всё хорошо, но придется при каждом http-запросе делать два sql-запроса к базе - первый к таблице пользователей для сравнения хэшей и второй уже к данным.
              Может есть более простой способ проверки валидности ключа ?

              • Авторизация на сайте, !*! Сергей, 19:59 , 19-Июл-04 (7)
                >> если страницы в пределах одного сайта, можно использовать механизм сессий.
                >> для Perl-а должны быть соотв. библиотеки.
                >
                >Это интересно. Можно поподробнее. Типа, man что ? :)
                >
                >А то пока есть мысль, при логине генериться средствами БД случайное число,
                >загонять его в MD5-хэш, сохранять этот хэш в таблице пользователей и
                >отправлять в виде куки клиенту. Всё хорошо, но придется при каждом
                >http-запросе делать два sql-запроса к базе - первый к таблице пользователей
                >для сравнения хэшей и второй уже к данным.
                >Может есть более простой способ проверки валидности ключа ?


                Извини, что-то я не поспеваю за твой мыслю....
                Юзер на странице вводит логин/пароль - он отправляется на сервер. Проверяется с действетельными значениями, которые лежат в базе. Если все в порядке, генериться на стророне сервера какое-то значаение - передает его обратно клиенту - это ключ сессии. Все время даельше именно с помощью этого ключа происходит проверка валидности клиента.

                Я правильно Тебя понял?

                • Авторизация на сайте, !*! XMan, 01:27 , 20-Июл-04 (11)
                  Да. Правильно. Ключ ко всему прочему должен иметь срок действия, но это легко делается добавлением текущего времени при апдейте (можно использовать функции самого сервера) и усливием выборки, вида " where key='ключ' and login='логин' and (now()-valid_date) <= 'срок_действия_в_понимаемом_базой_формате' ". Если вернется 0 записей, то либо клиент не авторизован, либо истек срок действия ключа.

                  PS. Попутно можно привязаться еще и к IP-адресу клиента :)

                  • Авторизация на сайте, !*! Сергей, 13:15 , 20-Июл-04 (15)
                    >Да. Правильно. Ключ ко всему прочему должен иметь срок действия, но это
                    >легко делается добавлением текущего времени при апдейте (можно использовать функции самого
                    >сервера) и усливием выборки, вида " where key='ключ' and login='логин' and
                    >(now()-valid_date) <= 'срок_действия_в_понимаемом_базой_формате' ". Если вернется 0 записей, то либо клиент
                    >не авторизован, либо истек срок действия ключа.
                    >
                    >PS. Попутно можно привязаться еще и к IP-адресу клиента :)

                    Пожожди. Ключ - это у нас какая-то страшная строка (рандом на стороне сервера, обратотанный Md5) мы с помощью нее просто вычленияем сессию. Как можно в нее запихнуть еще какие-то полезные данные? Мы же ее не обрабатываем мы просто проверяем, равна ли она той, котороая лежит на сервере?

                    ЗЫ Приявязка к айпишнику - это саоме простостое что может быть. Это уже у меня сделанно.

                    • Авторизация на сайте, !*! XMan, 22:43 , 20-Июл-04 (18)
                      Так это... По какому значению ты будешь строить MD5-хэш ? Можно ведь не только по паролю. Вот привязка хэша в SQL-запросе к рандому, логину, паролю и IP-адресу с использованием БД Postgres:

                      ... md5(random() || 'login' || 'a.b.c.d' || 'passwd') ...

              • Авторизация на сайте, !*! Limazzz, 20:18 , 19-Июл-04 (9)
                >> если страницы в пределах одного сайта, можно использовать механизм сессий.
                >> для Perl-а должны быть соотв. библиотеки.
                >
                >Это интересно. Можно поподробнее. Типа, man что ? :)
                >
                >А то пока есть мысль, при логине генериться средствами БД случайное число,
                >загонять его в MD5-хэш, сохранять этот хэш в таблице пользователей и
                >отправлять в виде куки клиенту. Всё хорошо, но придется при каждом
                >http-запросе делать два sql-запроса к базе - первый к таблице пользователей
                >для сравнения хэшей и второй уже к данным.
                >Может есть более простой способ проверки валидности ключа ?

                Рекомендую загонять данные в BerkeleyDB тогда со скоростью обращения к DB проблем не будет.

              • Авторизация на сайте, !*! ihor, 01:24 , 20-Июл-04 (10)
                сессии позволяют создавать переменные(сессионые), кот. живут в рамках одной сессии пока она не будет закрыта. управлять открытием/закрытием можно из скриптов. идентификатор сессии (с которым связаны сессионные переменные) для текущего подсоединения хранится напр. в cookies или записывается в виде параметра в URL.
                сценарий приблизительно такой: человек заходит на страницу, для него создаём новую сессию, далее он предоставляет логин и пароль, если они подходят, создаём в текущей сессии переменную, что в этой сессии человек прошёл аутентификацию, и дальше проверям в нужных местах наличие такой переменной.

                >А то пока есть мысль, при логине генериться средствами БД случайное >число, загонять его в MD5-хэш, сохранять этот хэш в таблице пользователей >и отправлять в виде куки клиенту

                это и будет приближение к тому, как реализуютя сессии.
                лучше взять что-то готовое, отлаженное и более функциональное.

                к сожалению, в Perl-е сессиями я не пользовался,
                т.к. использую для программирования для WWW PHP и ещё Zope.
                и там и там есть встроенная поддержка сессий.
                для Perl-а можно использовать напр. CGI::Session.

                • Авторизация на сайте, !*! XMan, 01:34 , 20-Июл-04 (13)
                  > это и будет приближение к тому, как реализуютя сессии.

                  Я так и понял :)

                  > лучше взять что-то готовое, отлаженное и более функциональное.

                  Потому и спросил.

                  > для Perl-а можно использовать напр. CGI::Session

                  Спасибо. Посмотрим.

            • Авторизация на сайте, !*! Сергей, 20:01 , 19-Июл-04 (8)
              >если страницы в пределах одного сайта, можно использовать механизм сессий.
              >для Perl-а должны быть соотв. библиотеки.

              Страницы в пределах одного сайта. Что такое механизм сессий и где в нете про это можно почитать?

              >или можно соорудить что-то своё на основе cookies или случайных >шифрованых параметоров в URl-ах.

              Я понимаю, что как раз это и нужно использовать, но очень интересны именно конкретные алгоритмы (или ссылки на них)....

              Заранее большое спасибо!

              • Авторизация на сайте, !*! ovax, 03:06 , 20-Июл-04 (14)
                А почему не использовать стандартную Апачевскую авторизацию ?

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

                • Авторизация на сайте, !*! Сергей, 13:17 , 20-Июл-04 (16)
                  >А почему не использовать стандартную Апачевскую авторизацию ?
                  >тогда страницы будут видны только авторизовавшимся пользователям, а их
                  >логин всегда доступен в переменной окружения.

                  Да? Здорово! Спасибо большое, я не знал.... Да. Это вариант, но к сожалению этот вариант не подходит.... =( Просто это вываливающееся окно, вызавает гораздо больше паники у юзера, чем просьба ввести логин пароль на сайте....

      • Авторизация на сайте, !*! Vadpav, 23:52 , 21-Июл-04 (19)
        >Сайт написан полностью мной, то есть скпритвы все мои (соответственно я могу
        >их как угодно править и что угодно с ними делать)
        >
        >Исключительно метод POST я не могу исползовать, так как необходимо ходить по
        >сайту не только с помощью кнопок submit, но и по ссылкам
        >(а через простую ссылку, насколько я знаю POST-ом передать нельзя).
        >

        А чем не подходит такая ссылка для submit? Можно и проще 1 строкой.

        unction submitForm()
        {
        document.form1.submit();
        }
        </script>

        <form name="form1" method="post" action="anotherPage.asp">
        <a href="javascript:submitForm();">
        </form>

  • Авторизация на сайте, !*! poige, 15:29 , 20-Июл-04 (17)
    Это немного know how, почему-то мне думается. С первого взгляда
    достаточно просто, но если присмотреться, то сложностей хватит.

    В первом приближении можно полагаться на использование cookies.
    Если речь идет о программировании на Perl, то очень целесообразным
    будет использование CGI.pm. man-страница (man CGI) кроме описания
    модуля, представляет собой очень полезное введение в CGI per se.

    Сложность с cookies в том, что они не всегда будут поддерживаться
    на стороне пользователя, некоторые их просто отключают (меньшинство,
    кстати, наверное).

    Рекомендую почитать про то, как реализован механизм "сеансов" в PHP,
    и т. д.. И вряд ли стоит писать свой код для этого.

    /poige
    --
    http://www.i.morning.ru/~poige/




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру