Аутентифицировать устройство / пользователя на основе одного запроса URL
В настоящее время у нас есть система J2EE, реализующая большинство из 10 лучших мер безопасности OWASP, в настоящее время приложение позволяет пользователям входить в систему с комбинацией пользователя и пароля, которая хранится в базе данных.
У меня есть фильтр Java, сопоставленный с /*
проверить наличие сеанса и атрибута сеанса, чтобы определить состояние пользователя, вошедшего в систему.
Хорошо, наконец, вот проблема: мы интегрируемся с компанией, которая производит устройства для отправки запроса URL через GPRS, когда происходит определенное событие, этот URL является ссылкой на нашу систему.
Я бы (без ущерба для безопасности) хотел бы аутентифицировать это "устройство", так как невозможно отправить устройству какую-либо информацию, поэтому необходимо аутентифицировать один запрос, и никто не сможет "воспроизвести" этот URL.
Я не знаю, возможно ли это без какой-либо взаимной аутентификации. Я подумал о белом списке IP-адресов для проверки, но сети постоянно меняют IP-адреса, и устройство все еще "неопознано". Посоветуйте пожалуйста какие-нибудь идеи?
PS: мое временное решение состояло в том, чтобы добавить исключение в мой фильтр, но это не является долгосрочным и совершенно небезопасным. (SSL тоже не вариант)
2 ответа
Вы можете позволить устройству подписать запрос (включая уникальный идентификатор запроса) с помощью закрытого ключа. Затем сервер может проверить, действительна ли подпись, и только принять / ответить на запрос, когда он есть.
Идентификатор запроса может использоваться для гарантии того, что такие запросы не воспроизводятся. Использование простого счетчика для идентификатора запроса будет означать, что очень легко проверить, использовался ли данный идентификатор (т. Е. Воспроизводится ли запрос).
Основная проблема заключается в том, что любая информация об аутентификации, которую включает устройство, может стать доступной для стороннего поставщика, если он получит устройство.
Таким образом, основными вопросами являются: (а) что именно вы хотите аутентифицировать (должно ли это быть само устройство или его владелец или местоположение устройства или...) и (б) какие функции устройство может поддерживать - какое это устройство и что это может сделать в эксплуатационных аспектах.
Если устройство может встраивать смарт-карту или криптокен, которые предназначены для хранения закрытых ключей и противодействия попыткам извлечения, цифровая подпись будет отлично работать.
Если устройство может иметь защищенную память, но не может выполнять криптографические операции (и не может встраивать смарт-карту), то я могу представить список предварительно рассчитанных одноразовых паролей, уникальных для каждого устройства. Сервер будет иметь копию глобального списка и удалит пароль из списка после его использования.