У меня есть веб-приложение, и мне поручено добавить безопасный вход для повышения безопасности, сродни тому, что Google добавил в аккаунты Google.Авторизация компьютера для доступа к веб-приложению
Use Case
По существу, когда пользователь входит в систему, мы хотим, чтобы обнаружить, если пользователь ранее утвержденную этот компьютер. Если компьютер не авторизовался, пользователю отправляется одноразовый пароль (по электронной почте, SMS или телефонный звонок), который они должны ввести, где пользователь может запомнить этот компьютер. В веб-приложении мы будем отслеживать авторизованные устройства, позволяя пользователям видеть, когда/когда они вошли в систему с этого устройства, и деавторизовать любые устройства, если они этого захотят.
Нам требуется очень легкое касание (это означает, что установка на стороне клиента не требуется) и работает с Safari, Chrome, Firefox и IE 7+ (к сожалению). Мы предложим безопасность x509, обеспечивающую адекватную безопасность, но нам все еще нужно решение для клиентов, которые не могут или не будут использовать x509.
Мое намерение состоит в том, чтобы хранить информацию авторизации с помощью куки-файлов (или, возможно, с использованием локального хранилища, унизительного использования флеш-файлов, а затем обычных файлов cookie).
На первый взгляд
Гусеницы два отдельных значения (локальные данные или печенье): хэш, представляющий маркер, а также маркер устройства безопасного входа. Оба значения управляются (и записываются) веб-приложением и продиктованы клиенту. Ток SSO зависит от устройства, а также от порядкового номера. Это эффективно позволяет устройствам деавторизоваться (все токены SSO становятся недействительными) и смягчает повтор (неэффективно, хотя именно поэтому я задаю этот вопрос) с использованием порядкового номера и использует nonce.
Проблема
С помощью этого решения, это возможно для кого-то, чтобы просто скопировать SSO и устройство маркеров и использовать в другом запросе. В то время как номер последовательности поможет мне обнаружить такое злоупотребление и, таким образом, отменить авторизацию устройства, обнаружение и ответ могут произойти только после того, как действительное устройство и вредоносный запрос попытаются получить доступ, что достаточное время для нанесения ущерба.
Мне кажется, что использование HMAC было бы лучше. Отслеживайте устройство, последовательность, создавайте nonce, timestamp и hash с закрытым ключом, затем отправляйте хеш и эти значения в виде обычного текста. Сервер делает то же самое (в дополнение к проверке устройства и последовательности) и сравнивает. Это кажется намного проще и надежнее .... предполагая, что мы можем безопасно вести переговоры, обмениваться и хранить секретные ключи.
Вопрос
Итак, как я могу безопасно вести переговоры закрытый ключ для санкционированного устройства, а затем надежно хранить этот ключ? Возможно, по крайней мере, если я соглашусь хранить закрытый ключ с использованием локального хранилища или флеш-куки и просто сказать, что он «достаточно хорош»? Или я могу что-то сделать с моим первоначальным проектом для смягчения уязвимости, которую я описываю?
Мы будем использовать одноразовый пароль для «непризнанных» машин или тех, чьи претензии терпят неудачу. Что касается других предложений, как я упоминал в вопросе, я должен реализовать «легкое прикосновение» (это означает, что он не требует дополнительного программного обеспечения), иначе я бы пошел по этому пути. Мое первоначальное решение предлагает «лучшее усилие» в свете того факта, что, как вы сказали, я не могу контролировать клиента, учитывая ограничения, которые мне даны, где, если все остальное не удается, мы отмечаем учетную запись и требуем проверки 1TP. – HackedByChinese
Однако вы указываете на то, что система переместилась. Я думал об использовании geo IP API для записи приблизительного города пользователей. Расширяясь на этом, возможно, я могу использовать эвристику по IP-адресу клиента, чтобы попытаться обнаружить странное поведение, вернувшись к проверке 1TP, когда обнаружено что-то не в своем роде. Для действительно мобильных клиентов нам может потребоваться только x509 auth или установка клиентского программного обеспечения. В любом случае, спасибо, что задумались об этом. – HackedByChinese
Рад помочь. Я только что нашел два других релевантных вопроса SO, которые могут дать вам некоторые идеи: [уникально идентифицировать компьютер] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- компьютер/671914 # 671914) и [отпечаток устройства для безопасного доступа клиента по сети] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network). –