¿Cómo aumentan la seguridad los tokens de recursos indirectos y específicos de la sesión?

6

El sitio web de OWASP recomienda esto :

  1. Utilice referencias de objetos indirectos por usuario o sesión. Esto evita que los atacantes se dirijan directamente a los recursos no autorizados. Por ejemplo, en lugar de usar la clave de la base de datos del recurso, una lista desplegable de seis recursos autorizados para el usuario actual podría usar los números del 1 al 6 para indicar qué valor seleccionó el usuario. [cursiva mía]
  2. Comprobar acceso. Cada uso de una referencia de objeto directo de una fuente no confiable debe incluir una verificación de control de acceso para asegurar que el usuario esté autorizado para el objeto solicitado. [cursiva mía]

Entonces, si un usuario no tiene acceso al recurso solicitado, , ¿de qué manera el ofuscado de la referencia directa de objetos mejora la seguridad?

Dada la complejidad creciente que, por ejemplo, se acumularía un sitio MVC de ASP.NET, ¿vale la pena el problema adicional para cualquier cosa que no sean los sitios bancarios?

    
pregunta Robert Harvey 11.07.2013 - 19:42
fuente

2 respuestas

5

Explicaré esto dando un ejemplo:

Sugiera que tenga una lista de objetos en su base de datos llamada:

  • pera
  • Apple
  • naranja

Tiene una consulta que llena una tabla hash almacenada en su sesión que mapea los frutos que está autorizado a tener en un número:

  • 1 = > Pera
  • 2 = > Manzana

No tienes acceso a Orange. Luego tiene una función que le permite agregar frutas a una canasta, por lo que elige un número 1 o 2 (esta es la referencia de objeto indirecta). No se puede acceder a Orange en esta sesión ya que no está presente en la tabla hash (no hay el número 3). Con la referencia directa de objetos, tendría una función que solo usa Apple, Pera, Naranja en lugar de un número. Por lo tanto, podría abusar de la función (si no se utilizan controles de acceso) para agregar también la Naranja a su cesta.

Personalmente, no veo problemas con la referencia directa a objetos SI existen controles de acceso adecuados . Estos controles de acceso deben ser probados extensivamente. Puede haber más aplicaciones críticas que otras donde esto podría ser necesario, pero imagínese aplicaciones donde haya miles de usuarios con cada 100 o 1.000 opciones únicas para ellos. Almacenar todo esto en una sesión podría tener un impacto significativo en el rendimiento (considerando que el servidor necesitará almacenar esta información para cada cliente en el servidor web).

Ahora para responder a su primera pregunta: simplemente porque no se cargará en la sesión. Como en mi ejemplo de tabla hash, simplemente no tendrás disponible el naranja.

    
respondido por el Lucas Kauffman 11.07.2013 - 20:03
fuente
0

Creo que definiste un objeto de referencia como absoluto y asociado con finanzas. Qué hay de lo siguiente: usted es un proveedor de software, su sw se vende en línea después de que un visitante lo compra. ¿No preferiría que SOLAMENTE el comprador pueda acceder a un hipervínculo para su producto?

Olvídese de las finanzas (sitios bancarios) o incluso del software, ¿qué hay de decir una red social? "De vuelta en los días" si olfateaba el cable, era un hecho conocido que podía extraer los URI de la captura de TCP, abrirlos en un navegador y tenía acceso instantáneo al correo electrónico, a los componentes de las redes sociales, etc.

Hay muchos escenarios diferentes que lo necesitarías. Piénselo por lo que es: "Objeto directo inseguro", un objeto al que se puede acceder directamente y que no se puede proteger por ningún motivo. Necesitamos protegerlo asignándole una "referencia" para que nunca se pueda "nombrar directamente".

    
respondido por el munkeyoto 11.07.2013 - 19:57
fuente

Lea otras preguntas en las etiquetas