Блокировать кросс-доменные звонки на веб-сервис asp.net .asmx - PullRequest
6 голосов
/ 07 марта 2009

Я создал приложение, которое использует jQuery и JSON для использования веб-службы ASP.NET .asmx для выполнения необработанных операций. Приложение и .asmx находятся в одном домене. Я не возражаю против людей, использующих операции чтения .asmx удаленно, но не хочу, чтобы люди случайно удаляли вещи !!!

Я могу разделить методы, которые я хотел бы сделать общедоступными, и «скрытые» методы на 2 веб-сервиса. Как заблокировать вызовы веб-службы hidden.asmx в том же домене, в котором он размещен?

Заранее спасибо.

Edit: Может кто-то прокомментировать это, кажется правдоподобным (источник: http://www.slideshare.net/simon/web-security-horror-stories-presentation): Ajax может устанавливать заголовки Http, обычные формы не могут. Запросы Ajax должны быть из одного домена.

Таким образом, запросы "x-required-with" "XMLHttpRequest" должны быть из одного домена.

Ответы [ 3 ]

8 голосов
/ 08 марта 2009

Существует два сценария, которые необходимо обезопасить с помощью веб-служб:

  1. Аутентифицирован ли пользователь?
  2. Идет ли действие с моей страницы?

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

Второй сценарий - немного более хитрая история. Атака называется CSRF или XSRF (подделка межсайтовых запросов). Это означает, что вредоносный веб-сайт выполняет действия от имени вашего пользователя, пока он все еще находится на вашем сайте. Вот отличная рецензия на XSRF .

Джефф Этвуд суммирует все это в приведенной выше ссылке, но вот защита XSRF в четыре этапа:

  1. Напишите GUID для файла cookie вашего пользователя.
  2. Перед вызовом AJAX прочитайте это значение из файла cookie и добавьте его на веб-сервис POST.
  3. На стороне сервера сравните значение FORM со значением cookie.
  4. Поскольку сайты не могут читать файлы cookie с другого домена, вы в безопасности.
0 голосов
/ 08 марта 2009

Быстрое и грязное решение состоит в том, чтобы использовать ограничения IP-адресов, чтобы разрешить доступ только к IP-адресу вашего домена через IIS.

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

0 голосов
/ 07 марта 2009

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

Вам нужно использовать какие-то токены аутентификации / авторизации (желательно с тайм-аутом), чтобы обеспечить безопасность.

...