Pregunta

He creado una aplicación que utiliza jQuery y JSON para consumir un servicio web ASP.NET .asmx para realizar operaciones crudas. La aplicación y .asmx están en el mismo dominio. No me importa que la gente consuma las operaciones de lectura del .asmx de forma remota, pero no quiero que la gente borre cosas al azar.

Puedo dividir los métodos a los que me gustaría tener acceso público y los "ocultos" en 2 servicios web. ¿Cómo puedo bloquear las llamadas al servicio web 'hidden' .asmx para el mismo dominio en el que está alojado?

Gracias de antemano.

Editar: Alguien puede comentar sobre esto, parece plausible (fuente: http: // www .slideshare.net / simon / web-security-horror-stories-presentation ): Ajax puede configurar encabezados HTTP, formas normales no pueden. Las solicitudes de Ajax deben ser del mismo dominio.

Así que " x-solicita-con " " XMLHttpRequest " Las solicitudes deben ser del mismo dominio.

¿Fue útil?

Solución

Hay dos escenarios que debe proteger con los servicios web:

  1. ¿El usuario está autenticado?
  2. ¿La acción viene de mi página?

La pieza de autenticación ya se ocupa si está utilizando la autenticación de formularios. Si su servicio web se encuentra en un área del sitio protegida por autenticación de formularios, nadie podrá acceder a sus servicios web a menos que estén conectados.

El segundo escenario es una historia un poco más complicada. El ataque se conoce como CSRF o XSRF (falsificación de solicitud de sitios cruzados). Esto significa que un sitio web malicioso realiza acciones en nombre de su usuario mientras aún están conectados a su sitio. Aquí hay una excelente reseña sobre XSRF .

Jeff Atwood lo resume todo en el enlace anterior, pero aquí está la protección XSRF en cuatro pasos:

  1. Escriba un GUID en la cookie de su usuario.
  2. Antes de su llamada AJAX, lea este valor de la cookie y agréguelo al servicio web POST.
  3. En el lado del servidor, compare el valor del FORMULARIO con el valor de la cookie.
  4. Debido a que los sitios no pueden leer las cookies de otro dominio, estás seguro.

Otros consejos

En AJAX, el navegador realiza las llamadas, por lo que incluso si tuviera que comprobar que el dominio es el mismo, no sería lo suficientemente seguro porque se puede falsificar fácilmente.

Necesitas usar algún tipo de tokens de autenticación / autorización (preferiblemente con un tiempo de espera) para mantener las cosas a salvo.

La solución rápida y sucia sería utilizar restricciones de dirección IP para permitir solo el acceso a la dirección IP de su dominio a través de IIS.

Probablemente sería mejor utilizar la autenticación HTTP. Hay muchas maneras de hacer esto, encontré que Autenticación en servicios web ASP.NET una descripción general útil .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top