En mi problema, hay un sistema existente que funciona como un servicio de alerta o de recorte que ejecuta búsquedas definidas por el usuario y genera listas de resultados. Estos son configurados por usuarios autenticados y este sistema interno utiliza un GUID como el identificador para obtener los resultados, que se almacenan en una base de datos.
Hay un requisito para exponer estos resultados a través de RSS. Sin embargo, aparte de incluir username:password@
en la URL, no conozco ninguna técnica que funcione con los lectores RSS. La idea ingenua es hacer que las URL sean algo como /alert/{guid}/rss
, que tiene algunos problemas. Debido a que los GUID están diseñados para ser únicos y no aleatorios, me preocupa la posibilidad de adivinar ataques, ya que cada intento de adivinación apuntalará la solicitud del sistema web hacia el sistema interno y accederá a la base de datos. Estoy buscando una manera de agregar un poco de singularidad a la URL y evitar el acceso innecesario a la base de datos, a la vez que se conserva la clave basada en GUID.
Mi idea es expandir la URL /feed/{guid}/rss
a algo como /feed/v1/{hash}/{guid}/rss
que contiene un segmento de hash adicional. Este segmento se generaría combinando el guid existente y una aplicación proporcionada de forma secreta a través de concatenación o XORing o algo así. Esta sería la URL que se proporcionaría a los lectores RSS desde la aplicación. Luego, cuando una URL entra en el sistema, el segmento de hash puede volver a calcularse en la memoria, compararse y rechazarse sin un viaje al servicio interno y la base de datos. El segmento /feed/
líder de la URL es único en el sistema para permitir el enrutamiento de URL / equilibrio de carga en el futuro para alimentar la caché. El segmento /v1/
está en su lugar si el secreto tiene que cambiar para futuras URL de fuentes.
Ya que no quiero ser otra prueba para "Ley de Schneier" , ¿cuáles son los problemas con este patrón? Creo que ayuda con la denegación de servicio para ataques de fuerza bruta (pero no si se conoce al menos una URL válida). También creo que crea URL "aleatorias" para la sensibilidad de los datos. Estoy abierto a críticas u otras ideas, pero estoy atascado con las claves basadas en GUID.