Могу ли я реализовать систему аутентификации веб-пользователей на python без POST? - PullRequest
1 голос
/ 16 сентября 2008

Мой университет не поддерживает метод POST cgi (я знаю, это безумие), и я надеялся, что у меня будет система, в которой пользователь может иметь имя пользователя и пароль и безопасно войти в систему. Это вообще возможно?

Если это не так, как бы вы сделали это с POST? Просто из любопытства.

Ура! * * 1005

Ответы [ 6 ]

5 голосов
/ 16 сентября 2008

Вы можете сделать все это с помощью методов GET. Тем не менее, вы захотите использовать полный протокол ответа на запрос для входа в систему. (Вы можете хешировать на стороне клиента, используя javascript. Вам просто нужно каждый раз отправлять уникальные вызовы.) Вы также захотите использовать SSL, чтобы гарантировать, что никто не увидит строки, когда они пересекаются.

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

(Или, как предложено другими авторами, используйте другой метод, полностью такой как HTTP-аутентификация, дайджест-аутентификация или схему аутентификации более высокого уровня, такую ​​как AD, LDAP, kerberos или shib. Однако я вроде бы предположил, что если у вас не было POST у тебя их тоже не было бы.)

1 голос
/ 16 сентября 2008

Вы можете использовать HTTP-аутентификацию, если поддерживается.

Вы должны добавить SSL, так как все методы, POST, GET и HTTP Auth (ну, кроме Digest HHTP-аутентификации) отправляют открытый текст.

GET в основном похож на POST, он просто имеет ограничение на объем передаваемых данных, который обычно намного меньше POST, и семантическое различие, которое делает GET не подходящим кандидатом с этой точки зрения, даже если технически они оба могут это сделать.

Что касается примеров, что вы используете? В Python есть много вариантов, например модуль cgi или какой-то фреймворк, такой как Django, CherryPy и т. Д.

0 голосов
/ 15 октября 2008

Javascript - лучший вариант в этом случае.

Наряду с запросом имени пользователя и пароля отправляет уникальную случайную строку. Затем вы можете использовать библиотеку javascript md5 для генерации хешированного пароля, комбинируя случайную строку и пароль [pwhash = md5 (randomstring + пароль)]. Затем javascript создает экземпляр вызова http://SERVER/login.cgi?username=TheUsername&random=RANDOMSTRING&pwhash=0123456789abcdef0123456789abcdef

Затем сервер должен сделать две вещи: Проверьте, использовалась ли ранее когда-либо случайная строка, и отклоняет ли она запрос. ( очень важно для безопасности)

Найдите незашифрованный пароль для имени пользователя и выполните md5 (randomstring + пароль). Если это соответствует тому, что пользователь указал в URL как pwhash, то вы знаете, что это пользователь.

Причина, по которой вы проверяете, использовалась ли ранее случайная строка, состоит в том, чтобы остановить повторную атаку. Если кто-то может видеть сетевой трафик, историю браузера или журналы, он может просто войти снова, используя тот же URL, и не имеет значения, знают ли они исходный пароль или нет.

Я также рекомендую поместить «Pragma: no-cache» и «Cache-Control: no-cache» в верхнюю часть заголовков, возвращаемых сценарием CGI, только для того, чтобы аутентифицируемый сеанс не сохранялся в браузере или вашем браузере. Веб-кеш интернет-провайдеров.

Еще более безопасным решением было бы использование правильного шифрования и Challenge-Response. Вы сообщаете серверу свое имя пользователя, сервер отправляет вызов (некоторая случайная строка, зашифрованная вашим паролем), и вы сообщаете серверу, что это была за случайная строка. Если вы можете сказать серверу, то, очевидно, у вас есть пароль, и вы говорите, кто вы есть! Kerberos делает это таким образом, но гораздо осторожнее, чтобы предотвратить всевозможные атаки.

0 голосов
/ 16 сентября 2008

Хороший выбор: Проверка подлинности дайджеста HTTP

Сложнее хорошо справиться, но есть вариант: Хеширование на стороне клиента с Javascript

0 голосов
/ 16 сентября 2008

Безопасный вход в систему очень субъективен. Полный «безопасность» не так легко достичь (если это вообще возможно ... спорно). Тем не менее, вы можете подойти ближе.

Если POST не вариант, возможно, вы можете использовать метод защиты каталога, такой как .htaccess или проверка подлинности Windows, в зависимости от того, в какой системе вы находитесь.

В обоих случаях вы увидите всплывающее окно, в котором можно ввести имя пользователя и пароль.

Чтобы использовать POST в качестве метода для отправки учетных данных для входа в систему, вы просто должны использовать HTML-форму с method = "post" и получать информацию, например, со страницы PHP или ASP, используя $ _POST ['varname '] метод в PHP или метод request.form ("varname") в ASP. Например, на странице PHP или ASP вы можете выполнить поиск в базе данных пользователей, чтобы увидеть, существует ли такая комбинация имя пользователя / пароль, и, если это так, перенаправить их на соответствующую страницу.

Для справки используйте http://www.w3schools.com/ASP/showasp.asp?filename=demo_simpleform для части HTML / ASP

0 голосов
/ 16 сентября 2008

С небольшим количеством JavaScript вы можете иметь хеш клиента, введенный пароль и одноразовый номер сервера, и использовать его в HTTP GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...