J'ai une application mobile (actuellement IOS et bientôt Android) qui parle à un service web. Il n'y a pas de connexion et les données ne sont pas privés. Fondamentalement, l'application affiche un marqueur (lon, lat) et Obtient le plus proche de 25 marqueurs pour afficher sur une carte.
C'est un très trivial application et je ne peux pas imaginer que quelqu'un de mettre un grand effort en abusant du service web. Cependant, je peux le voir il est amusant pour quelqu'un dans la diffusion de nombreux marqueurs. Ce que la plupart des préoccupations moi est quelqu'un exécutant un script qui pousse de nombreuses demandes (à l'aide d'coûteux en bande passante et en faisant des bêtises de mes données d'application).
Je suis en train de parvenir à une conclusion cela ne peut pas être sécurisé. La meilleure réponse est "ne faites pas cela". Ne pas fournir un service web sans authentification. Pas beaucoup de services sont donc ouvertes. Google you Tube API est ouverte, mais la plupart ne le sont pas. Malheureusement, je n'ai pas le choix. Donc, après des jours de recherche sur ce, voici ma façon de penser. Sachez que je suis très loin d'être un expert en sécurité et je suis convaincu que mon approche pourrait être améliorée. Mais il peut vous diriger dans la bonne direction. Heureusement, quelqu'un de plus expérimenté pourrait carillon et corriger/améliorer sur ce point. J'ai trouvé cet article et les commentaires particulièrement utile.
Message De Sécurité Au Niveau De L'
Je vais sécuriser les msgs avec un hachage de chiffrement. Les clients de service web et conservent une copie d'un secret partagé qui est utilisé comme sel de créer un hash de l'URL et tous les arguments. Le hachage est passé comme un argument supplémentaire et la valeur de hachage est reconstruite et par rapport à l'autre bout (à l'aide de la clé partagée sous forme de sel). C'est assez bien jusqu'à ce que vous comprenez que tout client mobile code peut être à l'ingénierie inverse de minutes. À quel point cette ligne de défense est tout à fait inutile.
Client De Mesures
Le client comprend la limitation de fréquence des messages comme une mesure visant à limiter le nombre de messages envoyés par les honnêtes utilisateurs. Encore une fois c'est inutile contre un attaquant qui jailbreaks l'appareil mobile.
Côté Serveur De Sécurité
Donc, le serveur doit disposer d'autant de mesures de sécurité supplémentaires que possible, de rester seul sur l'hypothèse que votre client (et secret partagé) est compromise. Voici ce que j'ai:
Un msg arg est un temps UTC, qui est utilisé pour limiter les attaques de relecture. Cela devrait empêcher un attaquant de tirer le même msg sur le serveur à plusieurs reprises.
Le serveur effectue la limitation par IP. Oui, IPs sont facilement usurpée et proxy de commutation est un jeu d'enfant, mais tout ce qui est utile lorsque vous avez si peu.
Bien sûr, le serveur strictement valide tous les arguments, utilise parametised requêtes et ne retourne pas les exceptions.
Le Transport Au Niveau De La Sécurité
Malheureusement, je suis assez confiant que la délivrance de la client SSL cert n'est pas possible sans un processus d'enregistrement. Et parce que je suis en utilisant le msg vérifier le hash (et mes données n'est pas privé) je ne suis pas entièrement sûr de ce que SSL apporte à la table. Cependant, je vais probablement l'utiliser SSL (avec une seule application à l'échelle cert), car il ajoute un autre niveau de sécurité qui est facilement et à moindre coût de déploiement (mais à un coût supplémentaire de temps de connexion pour chaque msg).
Le Béante Gros Trou Dans Mon Approche
Je suis averti que si l'app devenu populaire que quelqu'un va compromettre le secret partagé sur le client. Tout simplement parce qu'ils peuvent et ils seront probablement de le publier sur internet. Si vraiment tout se résume à côté serveur. Malheureusement, je n'ai aucun moyen d'identifier et de bloquer un attaquant. Ce que j'aimerais beaucoup.
Un Dernier Moyen,
Après des jours de recherche, c'est tout ce que j'ai. Mais j'en veux plus. Je voudrais tout particulièrement apprécier toutes les idées pour renforcer le côté serveur. Donc, j'ai mis tous mes points comme un bounty. Oui, monsieur, tous les 97 points!