2010-08-20 5 views
1

Encore en train d'apprendre des applications Web JSP ici.Chiffrement de paramètre de servlet

Cela fait un moment que je fais cela dans mon application web mais j'aimerais connaître une solution plus sécurisée.

Imaginez une table qui affiche certaines informations de livre. Lorsque l'utilisateur clique sur l'une des lignes du tableau, , j'envoie essentiellement le BookID avec l'URL.

Exemple URL. http://locathost:8080/myapp/editbook.htm?bookID=3

dans ma servlet. Je pense que c'est un peu faible, est-ce qu'il y a une façon dont je pourrais fournir un moyen plus sûr autre que celui-ci. Il est assez facile pour un hacker de modifier l'URL si j'envoie le BookID avec l'URL.

Pouvez-vous me partager un lien sur la façon de le faire à la fois côté client et côté serveur?

Merci

Répondre

2

Je pense que cela est un peu faible, est-il un moyen où je pouvais fournir un moyen plus sûr d'autres que cela.

Vous devez définir "sécurisé" sur la base de votre application. Les exigences sont totalement différentes pour un site web public vendant des livres v/s une bibliothèque privée hébergeant des volumes confidentiels v/s toute autre application entre les deux.

Au minimum, vous devez faire ce qui suit -

  1. Vérifiez que bookID est en fait un nombre entier et est dans une plage attendue.
  2. Assurez-vous que lie bookid dans une requête SQL paramétrée - ceci afin d'empêcher l'injection SQL.
  3. Afficher une page « Livre introuvable » si le livre ne peut pas être trouvé

Pour un site Web public, ce qui précède est suffisant. Vous voulez réellement que les gens découvrent vos livres, donc si quelqu'un modifie le bookID, vous ne devriez pas vous en soucier.

Pour une bibliothèque sécurisée, vous devez en faire beaucoup plus.

  1. Assurez-vous que l'URL est protégée dans web.xml, afin que les utilisateurs authentifiés et autorisés peuvent se rendre à l'URL
  2. Vérifiez l'utilisateur a accès à bookID.Vous pouvez stocker la liste des livres disponibles pour un utilisateur dans l'objet de session.
  3. Si l'utilisateur n'a pas accès, renvoyez une page d'erreur 403.

Il existe plusieurs autres stratégies pour protéger les URL; certains utilisent des jetons pour s'assurer que l'URL n'a pas été manipulée. D'autres n'envoient pas d'ID de livre au client et s'appuient plutôt sur les numéros {1 à n} où seul le serveur sait que 1 correspond au livre A et ainsi de suite. Mais l'idée est de s'assurer qu'un utilisateur n'a pas accès à un livre auquel il n'a pas les permissions.

Si vous utilisez Spring, je recommande fortement Spring Security. Sinon, regardez dans JAAS.

0

Vous devez supposer que tout utilisateur peut envoyer quoi que ce soit à vous. La solution n'empêche pas les utilisateurs d'envoyer des données dans l'URL, c'est de contrôler qu'ils peuvent en fait faire l'opération suivante.

Vous avez besoin d'une authentification et d'autorisations.

How to use authentication with your web.xml

Defining Security Requirements for Web Applications

+0

c'était rapide. Je n'ai pas vraiment lu sur la sécurité et je voudrais parcourir le lien que vous avez donné plus tard. Mais j'ai créé un filtre de servlet qui intercepte toutes les demandes et vérifie un objet dans leur session. Ceci est mon premier schéma d'authentification après leur connexion réussie. Je voudrais savoir, comment les sites que j'ai visités ont créé des liens tels que [http: //somesite/app.htm? Id = 3748asghks373] Je pense qu'ils font une sorte de cryptage ici. Ai-je raison? –

+0

Ce n'est pas vraiment un cryptage, c'est plutôt un ticket pour accéder à une ressource. Mais avec ce type de lien, les utilisateurs ne peuvent pas échanger de liens pour partager des informations. Pensez comme ceci: Et si sur amazon.com (ou autre site web) les liens étaient tous ces éléments. Et si vous ne pouviez pas échanger les informations que vous lisez? Si vous ne voulez vraiment pas que les informations soient partagées, vous pouvez toujours utiliser des tickets qui disent "Pour ce ticket, si l'utilisateur est ce qu'il prétend être, alors la valeur sera ..." Mais c'est vraiment lourd pour le cas d'utilisation que vous nous avez donné (juste en éditant quelques informations). –