2009-08-20 6 views
4

J'ai un service Web JSON que je ne souhaite fournir que pour certains sites. C'est un service qui serait appelé via JavaScript en utilisant JSONP. Comment pourrais-je prévenir (ou au mieux rendre plus difficile pour) les sites non autorisés d'y accéder? Exiger un utilisateur/mot de passe ne fonctionnera pas car cela serait clairement visible en JavaScript. Exemple: Mon service Web sur domain.com fournit des informations météorologiques, et je souhaite seulement que website.com et webpage.com puissent y accéder. Mais puisque le service Web est accessible via JavaScript, lazywebsite.com peut simplement afficher la source du site Web/page Web et copier/coller son code JavaScript.Protection d'un service Web JSON

Mes pensées à ce jour:

  • Utilisez une clé API et enregistrer les HTTP_REFERER où le service est accessible à partir. Ce n'est pas idéal car HTTP_REFERER n'est pas fiable.
  • Avez-website.com/webpage.com générer une clé côté serveur unique en utilisant un algorithme que je fournis, l'enregistrer dans une session, et l'utiliser comme une clé pour accéder au service Web. De cette façon, le jeton est uniquement enregistré pour ce visiteur spécifique et le JS ne peut pas être copié/collé. Le problème passe ensuite à website.com/webpage.com en protégeant leur page qui génère la clé unique.

Y a-t-il de meilleures solutions?

Répondre

4

Il n'y a pas de manière parfaite.

Si vous êtes sérieux au sujet de la sécurité, la solution est de ne pas publier votre service JSON dans le monde. Rendez-le privé et exigez que website.com et webpage.com fassent une demande privée, backend de leurs serveurs vers les vôtres pour les données. Ensuite, vous pouvez authentifier tout ce que vous voulez et les secrets restent en sécurité dans leur code serveur. Fondamentalement, c'est une solution proxy. (Un bel avantage: vos données JSON auront désormais la même origine que le site web, ce qui signifie que vous n'avez pas à faire de hacks JSONP).

Si vous êtes moins sérieux au sujet de la sécurité et que vous voulez simplement le rendre difficile, voici les choses les plus simples que vous avez déjà exposées. Vérifiez le référent. Cet en-tête peut être usurpé, mais c'est douloureux et j'espère que la plupart des attaquants ne penseront pas à l'essayer. Nécessite également un mot de passe et/ou une clé API (ils sont équivalents), et l'obscurcit dans le Javascript pour le rendre plus difficile à obtenir.

-2

Pour mettre à jour cette vieille question, je vous recommande de regarder ce que font les API javascript facebook et twitter pour des raisons de sécurité.

Questions connexes