Domanda

Ho creato un'applicazione che utilizza jQuery e JSON per utilizzare un servizio web .asmx ASP.NET per eseguire operazioni crud. L'applicazione e .asmx si trovano sullo stesso dominio. Non mi dispiace che le persone che consumano le operazioni di lettura di .asmx da remoto, ma non voglio che le persone cancellino casualmente roba !!!

Posso dividere i metodi che vorrei essere accessibili pubblicamente e quelli "nascosti" in 2 servizi web. Come posso bloccare le chiamate al servizio web 'hidden'.asmx sullo stesso dominio in cui è ospitato?

Grazie in anticipo.

Modifica Qualcuno può commentare questo, sembra plausibile (fonte: http: // www .slideshare.net / simon / web-security-horror-stories-presentation ): Ajax può impostare le intestazioni Http, le forme normali non possono. Le richieste Ajax devono provenire dallo stesso dominio.

Quindi " x-richiesto-con " & Quot; XMLHttpRequest " le richieste devono provenire dallo stesso dominio.

È stato utile?

Soluzione

Esistono due scenari che è necessario proteggere con i servizi Web:

  1. L'utente è autenticato?
  2. L'azione proviene dalla mia pagina?

Il pezzo di autenticazione è già curato se si utilizza l'autenticazione moduli. Se il tuo servizio web si trova in un'area del sito protetta da autenticazione basata su moduli, nessuno sarà in grado di accedere ai tuoi servizi web se non sono connessi.

Il secondo scenario è una storia leggermente più complicata. L'attacco è noto come CSRF o XSRF (Cross Site Request Forgery). Ciò significa che un sito Web dannoso esegue azioni per conto del tuo utente mentre sono ancora connessi al tuo sito. Ecco un ottimo commento su XSRF .

Jeff Atwood riassume tutto nel link sopra, ma ecco la protezione XSRF in quattro passaggi:

  1. Scrivi un GUID nel cookie del tuo utente.
  2. Prima della tua chiamata AJAX, leggi questo valore dal cookie e aggiungilo al servizio web POST.
  3. Sul lato server, confronta il valore FORM con il valore del cookie.
  4. Poiché i siti non possono leggere i cookie di un altro dominio, sei sicuro.

Altri suggerimenti

In AJAX il browser effettua le chiamate, quindi anche se dovessi controllare che il dominio sia lo stesso non sarebbe abbastanza sicuro perché può essere facilmente simulato.

È necessario utilizzare una sorta di token di autenticazione / autharization (preferibilmente con un timeout) per mantenere le cose al sicuro.

Una soluzione rapida e sporca sarebbe quella di utilizzare le restrizioni dell'indirizzo IP per consentire solo l'accesso dell'indirizzo IP del tuo dominio tramite IIS.

Probabilmente meglio sarebbe usare l'autenticazione HTTP. Esistono molti modi per farlo, ho trovato Autenticazione nei servizi Web ASP.NET una panoramica utile .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top