Estoy creando una API REST para almacenar datos confidenciales de seguridad para mi cliente y socios de terceros.
Cada solicitud se valida utilizando un HMAC de ciertos datos que se ingresan en una clave temporal asignada por un corto tiempo después de que el usuario haya iniciado sesión. Por supuesto, todo se ejecuta sobre TLS. Cada solicitud se registra, junto con las claves de los datos devueltos, así como las claves de los datos que se habrían devuelto si la solicitud no se bloqueara por algún motivo.
Si los datos no están presentes, o si los datos en una ubicación pueden ser leídos por un usuario en particular, pero no se actualizan, o si la solicitud de actualización tiene un formato incorrecto, ¿debería el servidor devolver un mensaje de error significativo, o no?
-
Si el usuario no tiene permisos para realizar una acción, se debe devolver una respuesta 401 o 403, lo que indica que la solicitud falló debido a la falta de permisos para realizar la acción. Se pueden usar otros códigos de respuesta en el caso de que los datos tengan un formato incorrecto o los tipos de datos esperados no coincidan (enviar una cadena a un campo int, etc.). Básicamente, siga las buenas prácticas de REST / HTTP y registre todo, pero no proporcione ninguna información al usuario más allá de una pista básica sobre lo que salió mal.
-
Nunca le dé a nadie información, en caso de que pueda usarse contra el sistema de alguna manera. Solo devuelve un error 500, sin descripción de ningún tipo. Hay cierto nivel de desacuerdo en cuanto a si se debe o no devolver un 404, o si se debe devolver una respuesta vacía o un error 500 en su lugar. Si un desarrollador externo se encuentra con estas respuestas y no entiende por qué, debe comunicarse con nuestra empresa, hacer que alguien revise los registros y explique cómo realizar las solicitudes correctamente.
¿Alguien tiene experiencia "desde las trincheras" respecto a qué metodología tiene más sentido? De particular preocupación es cómo equilibrar la seguridad con la usabilidad y las solicitudes de soporte.