web-dev-qa-db-fra.com

Sécurité CORS avec des applications mobiles

Nous devons conserver la sécurité de notre serveur API avec la restriction CORS:

Access-Control-Allow-Origin : http://myonlinesite.com

Mais nous avons également besoin que cette API soit accessible pour nos applications mobiles (Android + iOs).

Toutes les solutions que j'ai trouvées m'autorisent à autoriser tous Origin: *, mais cela constituerait un grave problème de sécurité pour notre API.

Nous construisons nos applications avec Cordova, qui WebView sert les fichiers locaux et envoie donc: Origin: null, pour toutes ses demandes http (s). Nous pensons donc à ajouter null à l’origine autorisée. C'est mieux, car il bloquera tous les autres sites Web qui tentent de récupérer notre API, mais il permettra à toutes les applications mobiles de le récupérer ...

Y a-t-il une solution plus intéressante pour cela?

Merci!

39
Vincent Wasteels

Nous envisageons donc d'ajouter null à l'origine autorisée. C'est mieux, car il bloquera tous les autres sites Web qui tentent de récupérer notre API, mais il permettra à toutes les applications mobiles de le récupérer ...

Eh bien, si vous faites cela, vous autorisez les demandes de code JavaScript qui s'exécute depuis n'importe quel origine (autre que http/https), y compris toute personne exécutant quoi que ce soit à partir d'un. file:// ou même data: URL.

Donc, si vous utilisez une politique CORS restrictive pour des raisons de "sécurité", envoyez des réponses avec un Access-Control-Allow-Origin: null _ header semble être une très mauvaise idée.


Nous devons conserver la sécurité de notre serveur API avec la restriction CORS: toutes les solutions que j'ai trouvées me permettent d'autoriser toutes les applications Origin: *, mais cela constituerait un grave problème de sécurité pour notre API.

Vous n'expliquez pas pourquoi vous avez déterminé qu'il s'agirait d'une défaillance de sécurité ou de la nécessité de disposer d'une stratégie CORS restrictive. Mais à moins que (1) votre serveur Web ne fonctionne sur un intranet ou derrière un autre type de pare-feu, et (2) que l'accès aux ressources ne soit par ailleurs restreint que par une autorisation IP, vous ne gagnez rien à utiliser une stratégie CORS restrictive. . Pour citer la spécification :

Configuration de base du protocole CORS sécurisé

Pour les ressources où les données sont protégées via une authentification IP ou un pare-feu (malheureusement encore assez commun), l’utilisation du protocole CORS est dangereuse. (C’est la raison pour laquelle le protocole CORS a dû être inventé.)

Cependant, sinon, utiliser l'en-tête suivant est sans danger:

Access-Control-Allow-Origin: *

Même si une ressource expose des informations supplémentaires basées sur un cookie ou une authentification HTTP, l'utilisation de l'en-tête ci-dessus ne le révélera pas. Il partagera la ressource avec des API telles que XMLHttpRequest, un peu comme si elle était déjà partagée avec curl et wget.

Ainsi, en d’autres termes, si l’on ne peut pas accéder à une ressource depuis un périphérique aléatoire connecté au Web en utilisant curl et wget, l’en-tête susmentionné ne doit pas être inclus. Si vous pouvez y accéder, vous pourrez le faire.

21
sideshowbarker

Comme indiqué dans la réponse de sideshowbarker, en utilisant Access-Control-Allow-Origin: null ne peut être considéré comme sécurisé si l'application peut être ouverte dans un contexte de navigateur. Cependant, il ne présente pas de risque de sécurité pour une application qui s'exécute dans sa propre vue Web dédiée.

La règle de la même origine (qui s'étend à CORS) est conçue pour un type de menace spécifique: un script d'un domaine étranger, exécuté dans le navigateur, envoyant une requête à votre serveur incluant vos cookies d'autorisation. Mais si vous utilisez votre application dans un WKWebView dédié, aucun script étranger ne pourra faire une demande à votre serveur à l'aide de vos cookies.

2