web-dev-qa-db-fra.com

L'exposition d'informations sur les exceptions dans le service Web constitue-t-elle un risque pour la sécurité?

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é.

18
Ilya Chernomordik

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.

23
Steffen Ullrich

Habituellement, il existe deux types d'exceptions:

  • Exceptions attendues, comme des valeurs d'entrée non valides; ou échec d'authentification; ou demander un objet inexistant. Ainsi, vous pouvez (et devriez) être prêt à gérer ce type avec élégance, avec un code d'erreur et un message descriptifs et documentés. Il n'y a aucun point de trace de pile dans ce cas.

Youtube invalid video code

  • Exceptions internes (ou inattendues): indisponibilité de la base de données; mémoire insuffisante; bug dans votre code conduisant à NPE . Il n'y a également aucun point dans la trace de la pile pour l'utilisateur de l'API . Cependant (en tant que développeur), vous êtes intéressé par ces traces de pile. Dans la plupart des cas, l'utilisateur lui-même ne peut pas résoudre ce problème, il doit donc contacter le développeur. Vous pouvez attacher crypté trace de pile à un message générique "désolé", afin que vous, en tant que développeur, puissiez résoudre plus facilement le problème de l'utilisateur:

Youtube internal error

7
deniss

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>
4
Oscar Foley