HMAC API открыт через общедоступный сайт?

Какие шаги я могу предпринять, чтобы предотвратить несанкционированный доступ к нашему API (если таковой действительно требуется)?

Фон

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

диаграмма компонентов

HMAC API предназначен для автозаполнения адресов. Вход на микросайт отсутствует. Страница имеет адресный ввод. Чтобы включить автозаполнение, страница делает вызов AJAX GET контроллеру после каждого нажатия клавиши. Для каждого вызова AJAX GET контроллер создает HMAC и отправляет запрос к HMAC API.

Проблема

Я не вижу ничего, что в настоящее время мешает использованию метода AJAX GET.

Соображения

Я прочитал, что токены AnitForgeryToken бесполезны при GET. методы, но вы можете обойти это, превратив его в POST. Звучит немного некрасиво, но, поскольку это всего лишь микросайт (т. е. мы его выбрасываем где-то через месяц), я вполне готов мириться с ужасной безопасностью.

Спустя семь лет после этого, это все еще лучший способ?


person OutstandingBill    schedule 09.08.2017    source источник
comment
@Amy, я не думаю, что вызов AJAX может быть аутентифицирован, поскольку аутентификация страницы отсутствует. Но может я что-то упускаю?   -  person OutstandingBill    schedule 09.08.2017
comment
@ Эми, разве токен не должен быть встроен в страницу? И поэтому могли быть украдены?   -  person OutstandingBill    schedule 10.08.2017
comment
@Amy - файл cookie / встроенный не имеет значения, потому что злоумышленник может просто запросить нашу страницу, получить токен и прикрепить / встроить его со своим непреднамеренным запросом.   -  person OutstandingBill    schedule 10.08.2017


Ответы (1)


предотвратить несанкционированный доступ к методу на неаутентифицированном контроллере

Если у вас нет проверки подлинности и авторизации ("контроллер без проверки подлинности"), то не может быть такой вещи, как несанкционированный доступ: т. е. разрешен любой доступ. А то, чего нет, нельзя предотвратить.

Если бы вы могли определить, что означает несанкционированный доступ в вашем случае использования, вы могли бы добавить некоторую авторизацию, которая предотвращает его.

person Steffen Ullrich    schedule 10.08.2017
comment
Извините, я использую термин, который имеет технический оттенок, но я использую его в более общем смысле. Под несанкционированными я подразумеваю любые запросы, исходящие из-за пределов микросайта. - person OutstandingBill; 10.08.2017
comment
@OutstandingBill: что именно снаружи и внутри? Если внутри находится определенный диапазон IP-адресов от клиентов, вы можете ограничить доступ по IP. Если внутри означает, что браузер сначала посетил микросайт, а затем посетил API, вам необходимо включить доказательство для этого, например, некоторый токен с ограниченным сроком действия, подписанный микросайтом, который может быть проверен API. - person Steffen Ullrich; 10.08.2017
comment
Мы не знаем IP-адреса предполагаемых пользователей. Пользователь не посещает API, он посещает контроллер (который, как можно было бы утверждать, фактически является API, но я пытаюсь соответствовать своей диаграмме). Независимо от того, что страница обслуживается контроллером, она может содержать токен с ограниченным сроком действия. Однако токен можно было украсть и использовать в несанкционированных вызовах (в общем смысле). - person OutstandingBill; 10.08.2017
comment
@OutstandingBill: если доступ к API следует сразу же за посещением микросайта, то токен может иметь очень короткий срок службы. Если вы также используете HTTPS для защиты транспорта, кража и использование токена в течение срока службы становятся маловероятными. - person Steffen Ullrich; 11.08.2017
comment
Характер формы означает, что между ее запросом и отправкой может пройти некоторое время, а автозаполнение может произойти в любой момент. - person OutstandingBill; 11.08.2017
comment
У меня складывается общее впечатление, что защита этого ресурса теоретически невозможна (как говорится в вашем ответе: не может быть такого понятия, как несанкционированный доступ) с учетом ограничений реализации, поэтому мне нужно рассмотреть способы (например, те, которые вы наметили ), чтобы свести риск к минимуму. - person OutstandingBill; 11.08.2017