Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Доступ по паролю

Большое заблуждение, считать, что http://user:password@example.org/ и http://example.org/user/password/ сильно различаются. Ничего подобного. Единственное различие между ними, что если набрать второй адрес руками, то он останется в истории браузера. Для AJAX’а более пригоден второй путь — «logout» делать сильно проще.

Необходимое замечание: речь, конечно же, идёт о basic-авторизации. Digest мало кто пробует (а три года назад оно сильно ещё глючило, наверное, сейчас получше должно быть), NTLM по-чёрному глючит в «Опере» (в чём я убедился, работая в «Яндексе»).

Итак http://example.org/jfdhfjhrtjktjkfhdjht/ это вполне себе парольный доступ.

20 комментариев
LXj (lxj.endofinternet.net) 2009

А если пользователь зайдёт на  http://user:password%40example.org/ и ткнёт там на ссылку http://evil-site.cn​, увидит ли вебмастер evil-master.cn пароль этого пользователя в своих логах?

LXj (lxj.endofinternet.net) 2009

Комментарий для lxj.endofinternet.net:

*evil-site.cn, конечно же.

А вообще на  http://etherpad.com эта система и используется

Евгений Степанищев (bolknote.ru) 2009

Комментарий для lxj.endofinternet.net:

Там написано «AJAX». Кстати, да etherpad. Как-то не подумал.

roman (alax.myopenid.com) 2009

С некоротых времён, password в форме http://user:password%40example.org/  — deprecated и даже отвергается броузерами.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для alax.myopenid.com:

Prooflink?
Я знаю, что Microsoft довольно коряво залатала хак с подменой адреса, отключив такую возможность.

В любом случае, речь не об этом. А о том, что закрытый URL — тоже пароль.

roman (alax.myopenid.com) 2009

Комментарий для Евгения Степанищева:

Prooflink — RFC 3986, 3.2.1. User Information

Use of the format «user:password» in the userinfo field is
   deprecated. Applications should not render as clear text any data
   after the first colon («:») character found within a userinfo
   subcomponent unless the data after the colon is the empty string
   (indicating no password).

И для быстрой проверки — http://demo:demo%40vivotek.taxispb.ru:8081/ FireFox открывает, выдавая message box подтверждения. IE обламывается не посылая даже исходящего запроса.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для alax.myopenid.com:

Да, про IE я знаю.

Спасибо за RFC!

arty (arty.name) 2009

Кстати, про Digest  — его как-то можно использовать, не подвергаясь остракизму за хранение открытых паролей в базе?

Евгений Степанищев (bolknote.ru) 2009

Комментарий для arty.name:

Насколько я его понимаю, нет.

david-m.livejournal.com 2009

Комментарий для arty.name:

А не проще забить на пуристов?:)

arty (arty.name) 2009

Комментарий для david-m.livejournal.com:

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

и, случись взлом, никто не скажет «мальчик сам виноват», всех собак свалят на сервис с открытыми паролями в базе

хотя, по-честному, давно уже есть справочники md5 от распространённых паролей — как раз тех самых, что на все случаи жизни, поэтому реальной защиты хэширование не даёт

но чем тогда digest лучше простого https? защитой от MitM?

Евгений Степанищев (bolknote.ru) 2009

Комментарий для arty.name:

Защита от SQL-инъекций, например, элементарная: шифровать семитричным ключём, например. Благо, в MySQL есть средства ( http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html ).

А нормальная защита — спрятать всю работу с паролем (запись и проверку, запретив чтение) за хранимые процедуры.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для Евгения Степанищева:

Тьфу, «симметричный» (спасибо, Саня, за поправку)

arty (arty.name) 2009

Комментарий для Евгения Степанищева:

хех, инъекции я даже не рассматривал % )

для меня слив базы означает шелл-доступ к серверу, со всеми вытекающими: полный дамп таблиц и копия ключа шифрования

вообще, если задуматься, от такого помогает только необратимое хэширование. Но даже для него можно составить частотный словарь, используя список распространённых паролей. Выживут только нераспространённые, которые суть Неуловимые Джо. Или они кому-то нужны?

Евгений Степанищев (bolknote.ru) 2009

Комментарий для arty.name:

Шелл-доступ означает, что я могу поменять код и логгировать пароли.

arty (arty.name) 2009

Комментарий для Евгения Степанищева:

тоже верно
вообще интересно было бы иметь статистику, по каким причинам пароли утекали. Инъекции — это как-то совсем по-детски

Евгений Степанищев (bolknote.ru) 2009

Комментарий для arty.name:

Инъекции — вполне себе нормальный метод, ничего детского в нём нет :)

Статистику такую вряд ли возможно собрать.

arty (arty.name) 2009

Комментарий для Евгения Степанищева:

детство — иметь такую уязвимость : )

Евгений Степанищев (bolknote.ru) 2009

Комментарий для arty.name:

Детство или нет, а я до сих пор вижу множество таких сайтов, да и другие люди — тоже ( http://www.xakep.ru/post/47719/default.asp ).

arty (arty.name) 2009

Комментарий для Евгения Степанищева:

уф, я уж вначале подумал, что в самом фейсбуке эта дырка : )

вообще у меня, видимо, сложилось ложное впечатление об этой проблеме с тех пор, как интернет перестал полниться статьями на эту тему

детям нельзя в интернет, он от них тупеет