Как ограничить доступ к [HttpGet] ActionResult в ASP.NET MVC? - PullRequest
0 голосов
/ 17 сентября 2010

Представьте, что у меня есть ActionResult, подобный этому:

[HttpGet]  
public ActionResult Cities(string q)  
{  
  //Return a list of cities that matches parameter
}

Как мне остановить все другие сайты, кроме моего, используя это, как если бы это был их собственный маленький REST-сервис для получениясписок подходящих городов?Является ли проверка реферера единственным способом?Или есть идеи получше?

Ответы [ 4 ]

0 голосов
/ 20 сентября 2010

Насколько вы привязаны к идее запроса HttpGet?Если это был HttpPost, вы могли бы использовать AntiForgeryToken и его атрибут, чтобы убедиться, что он пришел с правильной страницы, в основном это метод cookie, но все это хорошо для вас обернуто.

0 голосов
/ 17 сентября 2010

Как вы беспокоитесь об этом? Реферер может быть подделан, если кто-то определен достаточно.

У вас уже есть какая-то форма управления сессиями пользователей - если это так, используйте ее, хотя она по-прежнему не является пуленепробиваемой, если посетитель с другого сайта также вошел в ваш.

ЕСЛИ не ... реализовать что-то эквивалентное путем установки файла cookie на исходной странице с коротким сроком действия, который должен присутствовать (и быть действительным) в целевом действии.

0 голосов
/ 18 сентября 2010

Единственный способ запретить другим сайтам доступ к этому действию - использовать какой-либо механизм аутентификации.Вы можете использовать cookie-файл, который был зашифрован вашим machineKey , чтобы убедиться, что запрос поступил из того же домена.Чтобы это работало, вам нужно иметь страницу входа в систему, которая будет выдавать файл cookie для аутентификации.

0 голосов
/ 17 сентября 2010

зачем использовать REST, если вы используете его только внутри своего проекта?

сделать метод из него, например, в global.asax. все может достичь этого.

также, вы используете это для jquery / json?

a [HttpPost] и $ .post могут помочь вам в этом случае.

...