Je dois concevoir un "widget", un script que les partenaires intégreront dans leurs sites Web pour afficher une interface utilisateur et passer des appels à notre API.
Fondamentalement, il affichera nos données sur ces sites en fonction de certains identifiants qu'ils fournissent dans nos appels API. Ce que nous aimerions éviter, c'est que quelqu'un abuse de l'API et l'utilise pour gratter l'intégralité de notre catalogue.
Chaque partenaire qui intègre notre script recevra une clé publique qui doit être fournie lors de l'appel de l'API. Une idée serait de leur demander d'ajouter cette clé lors du chargement du script, par exemple:
<script src="//initrode.com/widget/loader.js?key=xxxx"></script>
De cette façon, la demande de script peut être utilisée pour enregistrer la paire IP clé / source et répondre aux appels d'API suivants uniquement si la paire clé / IP correspond à une paire enregistrée (avec une durée de vie limitée et une limite de demandes par jour).
Je ne suis pas sûr que ce soit une bonne idée, car il s'agit évidemment de sécurité grâce à l'obscurcissement (quelqu'un rechargeant le script le contournera complètement); mais je ne vois pas d'autre moyen de restreindre l'accès. Je ne peux pas fournir une clé unique à chaque utilisateur, uniquement aux partenaires. Je ne peux pas utiliser de système à clé privée car tout le code sera accessible à tous. Il s'agit essentiellement de restreindre l'accès à une API publique, c'est-à-dire contradictoire dans sa définition.
Que pensez-vous de cette solution et que feriez-vous de ces contraintes?
la source
Réponses:
Vous avez besoin de plusieurs types de protection.
Tout d'abord , vous devez empêcher l'utilisation de la clé du site A sur le site B.
En théorie, si la clé est liée à un domaine, vous ne pouvez pas dépendre de l'en-
referer
tête, mais comme vous êtes client incorpore directement un script, vous pouvez raisonnablement compter sur ledocument.location
côté client. L'envoi de cet emplacement (ou de portions de celui-ci) directement au serveur n'est pas fiable; mais vous pouvez l'utiliser pour générer une clé de session:client_key
demande de bibliothèque d'API.session_key
utilisationhash(document.location.host + session_salt)
.session_key
+client_key
pour un appel API.client_key
hôte et le «sel» de la session, en calculant le hachage et en le comparant à celui fourniclient_key
.Deuxièmement , vous devez empêcher Hacker Hank d'ouvrir la console de débogage ou d'utiliser un client modifié sur le site A pour faire ce qu'il veut avec votre API.
Notez cependant qu'il est très difficile, voire impossible, d' empêcher complètement Hacker Hank d'abuser de l'API. Mais, vous pouvez rendre cela plus difficile. Et le moyen le plus raisonnable d'entraver Hank, à ma connaissance, est de limiter le taux.
Troisièmement , comme vous le faites probablement déjà: chiffrez le trafic. Bien sûr, la NSA le verra; mais Hacker Hank est moins susceptible de le faire.
la source
On dirait que vous faites ici en transformant vos fichiers javascript en ressources protégées. Et le regrouper avec une sorte de génération de jetons en même temps. C'est intéressant.
Les gars de la sécurité avec lesquels je travaille rejettent généralement l'adresse IP d'emblée parce que l'IP est usurpé. Mais si vous utilisez une restriction IP combinée à SSL, cela fait généralement l'affaire.
Mais vous devez "mettre sur liste blanche" les adresses IP, sinon tout pirate informatique peut simplement entrer par la porte d'entrée.
J'étais sceptique, mais je pense en fait que votre système fonctionne plutôt bien. Si 1) le fichier .js et les appels d'API suivants sont effectués avec TLS (c'est-à-dire SSL ou https), et 2) les adresses IP sont sur liste blanche. Ensuite, je vais faire une déclaration audacieuse et dire que je pense que vous passeriez un examen de sécurité, même pour les interactions PCI (carte de crédit).
À mon humble avis ... Mais si vous essayez simplement de protéger les informations exclusives de l'entreprise au lieu des informations de carte de crédit (PCI) ou personnelles / privées (PII), cela est probablement bon même sans SSL, selon le montant prêt à risquer d'exposer votre catalogue.
Autrement dit: avec SSL, un pirate dédié ne pourrait pas obtenir votre catalogue. (À moins qu'ils ne cassent SSL, mais ils pourraient aussi casser Amazon). Sans SSL, un pirate dédié pourrait flairer vos appels, usurper l'IP et dérouler votre catalogue. C'est donc une sorte de jugement sur le risque.
J'essaie de penser à un moyen de se passer de la liste blanche IP parce que c'est généralement une douleur à gérer;) sans aller à OAuth à part entière. Je vais faire des nouilles là-dessus.
la source