2009-03-07 10 views
6

Zbudowałem aplikację, która używa jQuery i JSON do korzystania z usługi WWW ASPasm .asmx do wykonywania operacji crud. Aplikacja i .asmx znajdują się w tej samej domenie. Nie przeszkadza mi to, że ludzie zużywają operacje odczytu pliku .asmx zdalnie, ale nie chcą, aby ludzie losowo usuwali pliki !!!Blokowanie wywołań międzydomenowych do usługi asp.net .asmx WWW

Mogę podzielić metody, które chciałbym publicznie udostępnić, a te "ukryte" na 2 serwisy internetowe. Jak mogę blokować połączenia do usługi WWW "hidden'.asmx" do tej samej domeny, w której znajduje się serwer?

Z góry dziękuję.

Edit: Czy ktoś może wypowiedzieć się na temat tego, wydaje się prawdopodobne (źródło: http://www.slideshare.net/simon/web-security-horror-stories-presentation): Ajax można ustawić nagłówki HTTP, normalne formy cant. Żądania Ajaxa muszą pochodzić z tej samej domeny.

Żądania "x-requested-with" "XMLHttpRequest" muszą pochodzić z tej samej domeny.

+0

Czy masz konkretne pytanie dotyczące tej prezentacji? Wszystko jest bezwarunkowo wykorzystywane do naruszania bezpieczeństwa witryn, ale dzięki podstawowym zabezpieczeniom jesteś bezpieczny. –

+0

Tak, to jest ta część, w której jest napisane, że możesz polegać na X-requested-with, aby przekazać ci informacje z tej samej domeny, a więc bezpieczne. Ive zadał to samo pytanie gdzie indziej dziś i każdy jest przekonany, że każdy nagłówek http może być sfałszowany. Nie jestem tego taki pewien. ive, Ive rozwiązany to w inny sposób (główny refaktor) – jdee

+0

ale bardzo dziękuję za pomoc. to na pewno postawiło mnie na właściwej drodze do rozwiązania mojego prawdziwego problemu. – jdee

Odpowiedz

8

Istnieją dwa scenariusze, które trzeba zabezpieczyć usług internetowych:

  1. Czy użytkownik uwierzytelnione?
  2. Czy działanie pochodzi z mojej strony?

Uwierzytelnienie jest już zadbane, jeśli korzystasz z uwierzytelniania za pomocą formularzy. Jeśli twoja usługa sieciowa znajduje się w obszarze chronionym za pomocą uwierzytelniania za pomocą formularzy, nikt nie będzie mógł uzyskać dostępu do twoich usług internetowych, chyba że są zalogowani.

Drugi scenariusz to nieco trudniejsza historia. Atak jest znany jako CSRF lub XSRF (Cross Site Request Forgery). Oznacza to, że złośliwa witryna wykonuje akcje w imieniu użytkownika, gdy nadal jest on zalogowany w witrynie. Here's a great writeup on XSRF.

Jeff Atwood rodzaj podsumowuje to wszystko w linku powyżej, ale tutaj jest ochrona XSRF w czterech etapach:

  1. Napisz GUID z plikiem cookie użytkownika.
  2. Przed wywołaniem AJAX należy odczytać tę wartość z pliku cookie i dodać do usługi internetowej POST.
  3. Po stronie serwera porównaj wartość FORMY z wartością cookie.
  4. Ponieważ witryny nie mogą czytać plików cookie z innej domeny, jesteś bezpieczny.
-1

W AJAX przeglądarka wykonuje połączenia, więc nawet gdybyś miał sprawdzić, czy domena jest taka sama, to nie byłaby wystarczająco bezpieczna, ponieważ można ją łatwo sfałszować.

Musisz użyć tokenu autoryzacji/autoryzacji (najlepiej z limitem czasu), aby zachować bezpieczeństwo.

+0

Czy możesz opracować? jak mógłbym wspomnieć o systemie tokenów? – jdee

+0

> Powinno być "jak mogę utworzyć wspomniany system tokenów?" dzięki – jdee

+0

Musisz wydać klucz, który ajax musi odesłać, gdy użytkownik zażąda operacji crud. Ten klucz powinien wygasnąć po krótkim czasie, w ten sposób tylko strony wygenerowane z twojego serwera mają klucz i mogą wykonywać operacje – Sruly

-1

Szybkie i brudne rozwiązanie polegałoby na zastosowaniu ograniczeń adresów IP, aby zezwolić na dostęp do domeny IP tylko za pośrednictwem IIS.

Prawdopodobnie lepiej byłoby używać uwierzytelniania HTTP. Można to zrobić na wiele sposobów, uważam, że przydatny przegląd to Authentication in ASP.NET Web Services.

Powiązane problemy