У меня есть учетная запись пользователя 'center center', в которой отображаются все подписки и членства клиентов, которые они имеют в моей компании. Это на https://secure.example1.com/membercenter/.
У меня есть другой сайт, который является действительным участником. Это на http://www.example2.com/. (каждый сайт в другом домене, хотя это один и тот же выделенный сервер.
Я хочу обеспечить легкий вход на сайт участника, не включая имя пользователя и пароль в ссылке.
Итак, что я придумал, это:
Когда пользователь щелкает ссылку «Логин» для своего членства, я создаю хэш md5 его метки времени userid + unix и добавляю его в таблицу базы данных вместе со своим идентификатором пользователя и меткой времени.
Затем я перенаправляю на http://www.example2.com/login?hash=(the хэш).
Сценарий входа в example2 берет хеш и ищет его в той же таблице. Если хеш присутствует, я извлекаю их имя пользователя и пароль из базы данных клиентов, используя идентификатор пользователя, сохраненный вместе с хешем, и передаю его в уже существующую функцию входа на сайт, и они входят в систему.
При запуске этого хэш-сценария входа в систему сначала удаляются все строки старше 5 минут, а затем проверяется пройденное хеш-значение. Если он находит хеш, он регистрирует пользователя, а затем удаляет хеш, который использовался из таблицы. Это означает, что в таблице никогда не будет хэшей старше 5 минут. Единственный раз, когда (должны) быть какие-либо хэши в таблице остаются, это если пользователь каким-то образом не переходит с secure.example1.com на www.example2.com после нажатия на ссылку (скажем, интернет отключается справа). во-вторых, решение проблем DNS, example2.com и т. д.). 5-минутный срок действия означает, что они могут сидеть там и перезагружать перенаправленный URL-адрес до тех пор, пока они не войдут, или пока не пройдет 5 минут.
Когда пользователь перенаправляется, он видит значение хеш-функции.
Каждый раз, когда нажимается ссылка для входа с сайта secure.example2.com, вычисляется и сохраняется новое значение хеш-функции.
Мой вопрос ... я что-то упускаю из виду? Как бы вы сломали или взломали это? Я только что создал зияющую дыру в безопасности на своих сайтах?
Спасибо, ТАК Hive Mind!
РЕДАКТИРОВАТЬ: это в дополнение к обычной модели захода на www.example2.com и входа в систему с помощью имени пользователя / пароля.
EDIT2: Ответ tobyhede re: прослушивание хеша. Злоумышленник также должен помешать пользователю получить доступ к сценарию входа в систему на сайте www.example2.com, поскольку хэш удаляется после использования. Если бы они смогли это остановить, им бы пришлось использовать хеш в течение пяти минут, иначе он будет автоматически удален.
EDIT3: Re: Злоумышленник генерирует свои собственные хэши: хакер должен будет вставить эти хэши в базу данных и включить действительный идентификатор пользователя (ни один из пользователей не знает их идентификатор пользователя). Как они это сделают? Поскольку хэш используется только один раз, а затем немедленно удаляется, я не уверен, что любая из нижеприведенных атак будет работать.