Comment protéger un privé API REST dans une application AJAX
Je sais qu'il y a beaucoup de questions similaires posté, mais aucun d'eux se réfère à un code HTML/javascript application dans laquelle l'utilisateur peut accéder au code.
J'ai un privé RESTE API écrite en nodejs. Il est privé, car son seul but est de mon serveur HTML5 clients apps (google Chrome app et Adobe Air app). Donc une clé API n'est pas une bonne solution, car n'importe quel utilisateur peut voir le code javascript.
Je veux éviter les bots à la création de comptes sur mon serveur et de consommer de mes ressources.
Est-il un moyen pour accomplir cette?
- Je ne suis pas sûr si aucune des réponses satisfait à votre question. Merci de partager la façon dont vous avez abordé le problème de votre décrites. Je suis bâtiment REPOS + AJAX basé sur une application web qui peut être utilisé pour les utilisateurs non enregistrés. Comme vous, je veux protéger les ressources contre les bots.
- Logiquement il n'y a vraiment aucun moyen de faire une API vraiment privé si elle est appelée à partir d'une page web où l'on peut voir la source et/ou de surveiller les données qui sont envoyées au serveur. Pour attraper les bots vous avez l'habitude des trucs comme Captcha, mais en fin de compte vous avez besoin d'assistance dorsales (Smpz, rapide auto-mise à l'échelle, etc.) pour faire face à la possibilité d'automatisée des attaques de type DDOS. Aussi longtemps que vous le détecter les attaques DDOS le plus tôt possible (avant de prendre DB connexions, etc.), ce n'est pas différent de la manipulation de robots de la tentative de téléchargement de la page, en premier lieu.
Vous devez vous connecter pour publier un commentaire.
Une clé API s'agit d'une bonne solution, en particulier si vous avez besoin de contraintes sur la clé API de la demande d'origine; pensez que vous ne devrait accepter une clé API si le web d'origine demande provient d'une source autorisée, comme votre domaine privé. Si un site web demande provient d'une non autorisée de domaine, vous pouvez tout simplement refuser de traiter la demande.
Vous pouvez améliorer la sécurité de ce mécanisme en utilisant un spécialisé schéma de codage, comme une table de hachage-based message authentication code (HMAC). La ressource suivante explique ce mécanisme clairement:
http://cloud.dzone.com/news/using-api-keys-effectively
Ce que vous voulez faire est d'employer mutuellement authentification SSL, de sorte que votre serveur n'accepte les connexions entrantes à partir de votre application et votre application ne communiquer avec votre serveur.
Voici le haut niveau de l'approche. Créer une auto-signé certificat SSL de serveur et de les déployer sur votre serveur web. Si vous utilisez Android, vous pouvez utiliser l'utilitaire keytool inclus avec le kit SDK d'Android pour ce but; si vous utilisez une autre application plate-forme, des outils similaires existent pour eux. Puis créer une auto-signé du client et de la déployer au sein de votre application personnalisé dans un fichier de clés inclus dans votre application en tant que ressource (keytool va générer aussi). Configurer le serveur pour demander côté client SSL authentification et de n'accepter le certificat du client que vous avez généré. Configurer le client pour utiliser ce certificat côté client de s'identifier et pour accepter un certificat côté serveur que vous avez installés sur votre serveur pour que la partie.
Si quelqu'un/quelque chose d'autre que votre application tente de se connecter à votre serveur, la connexion SSL ne sera pas créé, comme le serveur rejette entrant connexions SSL qui ne présentent pas le certificat du client que vous avez inclus dans votre application.
Une étape-par-étape pour c'est beaucoup plus de réponse que ce qui est justifié ici. Je suggère de le faire dans les stades qu'il y a des ressources sur le web sur la façon de traiter avec certificat SSL auto-signé dans Android (je ne suis pas familier avec la façon de faire cela sur d'autres plates-formes mobiles), à la fois côté serveur et client. Il y a aussi de passer à travers dans mon livre, la Sécurité des Applications pour la Plateforme Android, publié par O'Reilly.