Как я могу ограничить доступ к определенным контроллерам своим собственным приложением в MVC3? - PullRequest
1 голос
/ 27 октября 2011

У меня есть контроллер, который я использую специально для AJAX, то есть jquery выполняет вызов определенного URL-адреса и передает обратно некоторый JSON. Однако некоторые действия в этом контроллере используют службы, за которые мы платим, и я не хочу, чтобы другие люди могли вызывать их за пределами моего приложения.

Я видел этот вопрос , который ограничивает доступ к контроллеру по IP, что хорошо, но так как технически это будет называться на стороне клиента, я не могу использовать такого рода ограничения.

Итак, как мне это сделать? Или я поступаю неправильно?

Редактировать: Было бы лучше сделать это как ПОСТ, а не ПОЛУЧИТЬ?

Edit2: Я думаю, мне нужно объяснить больше. Вызов ajax относится к URL-адресу в моем веб-приложении. Этот контроллер предназначен для действия, которое затем (на стороне сервера) вызывает веб-службу из службы поиска.

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Похоже, вы используете службу поиска по внешнему почтовому индексу (где я предполагаю, что вы платите за запрос), и вы не хотите, чтобы кто-то еще отправлял запросы на поиск по почтовому индексу, добавляя свои данные в сервис, где вы будете получить заряд?

Первое, что вы должны сделать, это проверить, позволяет ли ваш поставщик услуг указать белый список рекомендателей. Поскольку многие из этих API-адресов означают, что ваш «ключ API-интерфейса» находится где-то в javascript, это часто используется для разрешения запросов на обслуживание (с использованием вашего ключа) только с определенного хоста или IP-адреса.

После этого вы захотите убедиться, что ваше действие по поиску почтового кода вызывается только со страниц вашего сайта.

Вы можете сделать это с помощью некоторого токена защиты от подделки на клиенте. Phil Haack недавно опубликовал о том, как заставить это работать с постами AJAX.

1 голос
/ 27 октября 2011

Во-первых, вы должны осознать, что буквально невозможно удержать кого-либо от попытки позвонить в ваш веб-сервис.Даже с ограничением IP-адреса для кого-то все еще возможно запустить метод, маскируя IP-адрес, который кто-то может сделать, если ему просто хочется с вами связываться.

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

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

  1. Если ваш веб-сайт является строго общедоступным, без имен пользователей и паролей, одним из вариантов будет веб-метод.не всегда получать "живое значение" любых данных, которые вы опрашиваете из сторонней системы.Вы могли бы проверить веб-метод, когда последний раз данные опрашивались, и если он находится под каким-то произвольным пределом, установленным вами, просто верните кэшированное значение, которое вы где-то сохранили на своем сервере.Имеется механизм имени пользователя и пароля, поэтому можно ограничить количество раз в час, когда конкретный пользователь может получить доступ к услуге.Конечно, могут быть разработаны механизмы для автоматического создания нескольких учетных записей, но механизм Captcha может помочь вам с этой проблемой.
  2. Создание механизма Captcha для самой службы также может быть вариантом.Хотя это не поможет вам ограничить количество запросов от конкретного человека, это поможет гарантировать, что человек должен вводить ответ каждый раз, что, по крайней мере, замедлит количество обращений к службе.

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

РЕДАКТИРОВАТЬ: Используя POST илиМетоды GET не имеют абсолютно никакого значения в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...