avl (avl) wrote,
avl
avl

Categories:

Простая авторизация, или как про#рать много денег :)

Сегодня отдохнем от "97 вещей", вместо этого будет другой перевод :)

Одна из вещей, которые мне запомниилсь после прочтения "Богатый папа, бедный папа" Киосаки - это то, чем отличается госслужащий от бизнесмена. Отличие очень фундаментальное - бизнесмен ищет варианты, как потратить меньше денег, а госслужащий - как потратить больше.

Очередная статья на WorseThanFailure, как мне кажется, отлично иллюстрирует это различие. Оригинал статьи тут , а чуть ниже - мой ее перевод.

«Это невозможно!» - сказал Геральд тоном, не терпящим возражений. – «Просто невозможно!»

«Так, давай проясним ситуацию» - ответил Крейг. – «Под 'Невозможно' ты ведь понимаешь 'Слишком проблематично', однако же ты классный спец, чтобы это сделать, ведь так?». Это вызвало несколько улыбок у остальных коллег, слушающих этот диалог, однако Геральд только вздохнул: «Нет, Крейг, под 'Невозможно' я понимаю именно 'Невозможно'. Невыполнимо. Неосуществимо в принципе. Если конечно кто-нибудь не изменит то, как сейчас организована коммуникация через Интернет».

«Но ведь нам не надо менять это для всех!» - увидев надежду, оживился Крейг. – «Всего лишь один клиент! У тебя получится!»

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

И в результате именно Геральду было поручено разработать недостающую функциональность: систему аутентификации на основе IP, не требующую ввода логина-пароля.

Основным возражением Геральда было то, что большинство пользователей (а у данного клиента это были вообще все пользователи) находились за роутером. Т.е. у каждого клиента был свой внутренний IP, а снаружи они все были видны под единственным внешним, что делало невозможным отличить пользователей друг от друга.

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

В виду невозможности получить IP пользователя снаружи, Геральд предложил использовать cookies. Если бы пользователь один раз прошел авторизацию, то у него бы сохранилось авторизационное cookie на неопределенное время. Понятно, что очистка cookies бы привела к необходимости повторить авторизацию, но это казалось незначительным по сравнению с простотой реализации. Однако клиент считал иначе – его пользователи не должны были запоминать еще один логин, даже если вводить его надо было бы лишь один раз.

Геральд предложил идею настроить на прокси сервере клиента поддержку специального HTTP заголовка, в котором и передавать IP, но эта идея тоже была отвергнута – злоумышленник мог бы легко подделать HTTP заголовок и тем самым взломать систему.

Третьей идеей Геральда стало использование соединения VPN. Сервер приложений мог бы установить соединение с клиентом внутри сети, что бы позволило использовать Windows-аутентификацию. Это была его лучшая идея, делающая вещи еще более простыми – теперь достаточно было лишь списка пользователей, имеющих доступ, вместо списка их IP. К сожалению, администраторы сети клиента категорически отвергли это, мотивируя тем, что «VPN соединения ужасно небезопасны».

И наконец, Геральд предложил следующее. Когда пользователю требовался доступ к их приложению, проверялось наличие на его компьютере «метки аутентификации». Если таковая отсутствовала, пользователь перенаправлялся на другой сервер внутри сети, задачей которого было сгенерировать эту метку, включив в нее IP пользователя. После чего пользователь вновь перенаправлялся на приложение, которое получало метку, проверяло IP и давало или не давало доступ в зависимости от полученного IP и списка разрешенных IP.

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

Через три месяца новая функциональность была закончена. Потребовалось три недели разработки, две недели тестирования, несколько тысяч долларов на покупку нового оборудования и несколько десятков тысяч долларов на сертификацию, но главная цель – никакого запоминания логинов – была достигнута. Все, что требовалось для начала работы – список IP, которым был бы разрешен доступ к системе.

И вот от менеджера проекта клиента пришло письмо: «Геральд! Добавь пожалуйста следующий IP адрес в список разрешенных: 10.1.23.97».

Геральд переспросил, потом переспросил еще раз, нет ли здесь ошибки. Ошибки не было. Доступ нужен был единственному пользователю. Наверное, она действительно очень не любила запоминать логины.
Tags: thedailywtf_quote, Программирование
Subscribe

  • Один день на яхте

    Давно, очень давно хотелось оказаться на яхте. И вот наконец удалось реализовать мечту, пока что на 1 день. Главное — что оказалось, что никого из…

  • Подарок на 8 марта :)

    Фирма удивила, подарив 8 марта ВСЕМ сотрудникам смарт-часы от неизвестного производителя с нанесенным своим логотипом :) Да, в Словении 8 марта -…

  • Подводная лодка

    Давно не писал сюда, т.к. несмотря на отвратительный интерфейс, все переходят в фейсбук... Но все же возможность вставлять несколько фото и управлять…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments