web-dev-qa-db-fra.com

Peut-on mettre en cache et sécuriser une API REST avec Cloudflare?

Je conçois une API RESTful destinée à être consommée par une application d'une seule page et une application mobile native. Certains appels de cette API retournent des résultats publics qui peuvent être mis en cache pendant un certain temps. De plus, il existe un besoin de protection de taux pour protéger l'API contre les utilisateurs non autorisés (araignées)

Puis-je utiliser Cloudflare pour implémenter la mise en cache et la protection de limitation de débit/DDOS pour mon API RESTful?

Caching: Cloudflare prend en charge les en-têtes de contrôle de cache HTTP pour que l'API puisse décider pour chaque entité demandée via GET si elle est publique et combien de temps elle peut être mise en cache.

  • Cependant, il n'est pas clair si l'en-tête de contrôle du cache est également transmis en aval au client, ce qui déclenchera également le navigateur pour mettre en cache la réponse? Cela peut ne pas être souhaitable, car cela pourrait rendre le dépannage plus difficile
  • Akamai a un en-tête Edge-Control pour garantir que le contenu est mis en cache dans CDN mais pas dans le navigateur. Peut-on faire quelque chose de similaire avec Cloudflare?

Protection DDOS: Le support Cloudflare a un article recommandant que la protection DDOS soit désactivée pour les API backend , mais cela ne s'applique pas à mon cas d'utilisation où chaque client est censé faire quelques demandes à l'API. La protection DDOS native correspond en fait à mes exigences de protection de l'API contre les bots.

  • J'ai besoin de savoir comment je peux détecter par programmation quand Cloudflare sert une Captcha/ Je suis attaqué etc. page Cela permettrait alors à l'application SPA/mobile de réagir intelligemment et de rediriger l'utilisateur vers une vue Web où elle pourrait démontrer son "humanité".

  • De la documentation Cloudflare, il n'est pas évident quel code d'état HTTP est envoyé lorsqu'un défi DDOS est présenté. Un open-source cloudscraper pour contourner la protection Cloudflare DDOS semble indiquer que Captcha et les pages de défi sont livrées avec un état HTTP 200. Existe-t-il un meilleur moyen que d'analyser la demande pour savoir si la protection DDOS est activée?

  • Cloudflare tilise apparemment des cookies pour enregistrer qui a résolu le Captcha avec succès. Cela crée évidemment une complexité supplémentaire avec les applications natives. Existe-t-il un bon moyen de transférer les cookies de session Cloudflare vers une application native une fois le défi résolu?

Il s'agit probablement d'un cas d'utilisation avancé de Cloudflare - mais je pense que c'est prometteur et je serais heureux d'entendre si quelqu'un a de l'expérience avec quelque chose comme ça (sur Cloudflare ou un autre CDN).

33
flexponsive

Cloudflare a publié ne liste des meilleures pratiques pour l'utiliser avec des API.

TL; DR, ils recommandent de définir une règle de page qui corrige toutes les demandes d'API et d'y mettre les paramètres suivants:

  1. Niveau de cache: Contournement
  2. Toujours en ligne: OFF
  3. Pare-feu d'application Web: OFF
  4. Niveau de sécurité: Tout sauf "Je suis attaqué"
  5. Vérification de l'intégrité du navigateur: OFF
5
hoffm

Oui, CloudFlare peut vous aider avec les protections DDOS et Non, il n'implémente pas la mise en cache et la limitation de débit pour votre API. Vous devez les implémenter vous-même ou vous utilisez un cadre qui le fait.

Vous pouvez utiliser CloudFlare pour protéger votre point de terminaison API en l'utilisant comme proxy. CloudFlare protège l'intégralité du bit URL que vous pouvez utiliser les règles de page pour modifier les paramètres de votre point de terminaison api.

Example: https://api.example.com/*
  • Réduisez la sécurité de cette règle entre faible ou moyen afin de ne pas afficher de captcha.
  • Les API ne sont pas destinées à montrer que vous les protégez avec des autorisations et des codes d'accès.
  • vous pouvez implémenter des en-têtes HTTP Strict Transport Security and Access-Control sur vos en-têtes.
  • Les fournisseurs d'hébergement cloud (par exemple DigitalOcean, Vultr, etc.) ont une protection DDoS gratuite ou payante. Vous pouvez vous y abonner uniquement sur cette machine virtuelle publique. Ce sera un gros plus car vous avez maintenant une double protection DDOS.

Pour les API de cache

Create a page rule like https://api.example.com/*.json
  • Définissez le niveau de mise en cache pour cette règle de sorte que CloudFlare la mette en cache sur ses serveurs pour une durée spécifique.

Il existe de nombreuses autres façons de protéger les API. Espère que cette réponse vous a été utile?

3
Sojimaxi