Il est un fait connu que l'exposition des informations d'exception à l'utilisateur final présente des risques de sécurité, car un adversaire peut l'utiliser pour comprendre comment les choses fonctionnent en interne et l'attaquer. Mais qu'en est-il d'un service Web, où ces informations pourraient être pertinentes pour les développeurs qui utilisent l'API?
D'une part, exposer la trace de pile complète et même le message est risqué car il peut contenir des informations de base de données, par exemple d'un autre côté, si quelque chose ne va pas et que le serveur dit juste 500 "désolé", les développeurs seraient frustrés. Je suppose que la bonne façon est de gérer toutes les exceptions que vous connaissez de manière sécurisée, c'est-à-dire de détecter les exceptions commerciales/de validation et de les renvoyer avec des codes d'erreur et des messages spéciaux (pas de trace de pile) et pour tous les inconnus, faites toujours 500 "désolé".
Mais je voudrais ici quelles sont les façons courantes de le faire et quelle approche devrait être adoptée du point de vue de la sécurité.
L'API ne doit exposer aucune information interne, c'est-à-dire des traces de pile ou similaire. Comme vous l'avez vraiment remarqué, ils peuvent divulguer des informations qui pourraient être utilisées pour attaquer l'implémentation.
De plus, ils ne sont généralement pertinents que pour le développeur de l'API et non pour l'utilisateur de l'API. Ces utilisateurs attendent de toute façon des messages d'erreur appropriés et pas un message étrange où ils devraient d'abord demander au développeur de l'API ce que cela signifie et le développeur devrait regarder le code source. Donc, cela pourrait être moins un problème de sécurité mais plus un problème d'utilisation de l'API si vous jetez simplement la trace de la pile à l'utilisateur au lieu de quelque chose de significatif pour l'utilisateur.
Habituellement, il existe deux types d'exceptions:
C'est un problème de convivialité vs sécurité .
Une API , spécialement une REST one, doit être conviviale , auto-documenté. Cela inclut la fourniture d'erreurs amicales indiquant l'erreur exacte, la cause possible, la pile, etc.
En revanche, pensez que amical est risqué ...
La réponse est donc: Oui, c'est un problème de sécurité. Les informations aideront un attaquant potentiel à en savoir plus sur votre API.
Comment le faire?
Dans ASP.NET vous avez défini dans web.config pour contrôler la façon dont verbeux sont les erreurs (CustomErrors).
Les paramètres par défaut indiquent une erreur générique de sécurité, sauf que vous naviguez depuis le même ordinateur , puis il affiche une erreur complète. De cette façon, les développeurs de leurs ordinateurs locaux peuvent voir les erreurs mais une fois déployés dans un environnement, les informations détaillées sur les erreurs ne peuvent pas être vues.
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>