Блокировать междоменные вызовы веб-службы asp.net .asmx

StackOverflow https://stackoverflow.com/questions/622459

Вопрос

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

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

Заранее благодарю.

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

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

Это было полезно?

Решение

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

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

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

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

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

  1. Запишите GUID в файл cookie вашего пользователя.
  2. Перед вызовом AJAX считайте это значение из файла cookie и добавьте его в сообщение веб-службы.
  3. На стороне сервера сравните значение ФОРМЫ со значением файла cookie.
  4. Поскольку сайты не могут считывать файлы cookie с другого домена, вы в безопасности.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top