2010-08-05 4 views
6

J'ai juste eu cette pensée, je ne sais pas si je suis lent cependant.Web Apps: Stocker l'identifiant dans des champs cachés en toute sécurité?

Habituellement, je stocke l'ID de l'élément que je suis en train d'éditer dans un champ caché. Ensuite, dans backend (j'utilise PHP/Zend Framework btw), je l'obtiens pour déterminer quel élément est édité. Mais alors j'ai pensé, dans quelque chose de plus sûr, par exemple. modifier le profil, l'utilisateur peut en quelque sorte éditer un champ caché droit? Ensuite, il peut modifier le profil de quelqu'un d'autre. Je sais pour le profil d'édition, je peux obtenir l'id forme la variable de session, mais que se passe-t-il si j'ai quelque chose qui m'oblige à stocker l'identification quelque part?

J'ai ACL (Zend_Acl) Je fais cela. En fait saisir l'identifiant de la demande params

$id = $req->getParam('id'); 

puis vérifier si l'utilisateur connecté est autorisé à modifier l'élément. Mais la chose est je me demande si l'URL est quelque chose comme /users/edit/1 où 1 est l'ID. Mais d'une manière ou d'une autre, le champ caché est changé en 2, quel sera le paramètre de requête?

Comment gérez-vous cela?

Répondre

10

Vous devez stocker une sorte d'identifiant sur le client. Sinon, comment sauriez-vous quel élément modifier?
Cela ne vous libère pas de la obligatoire vérifier sur le serveur que l'utilisateur actuel a des privilèges pour modifier/voir l'élément édité.
Autre que cela, pourquoi voudriez-vous comment il a pu éditer l'élément (que ce soit par l'utilisation légitime de l'outil web, ou en éditant le champ caché/quel que soit).

+0

Je me demande quelle est la valeur que j'obtiendrai si le paramètre d'identifiant est dans GET & POST? qui sera utilisé? –

+0

il est défini dans le php.ini –

+0

Eh bien sûrement cela dépend de ce que vous appelez réellement. $ _POST ou $ _GET. Vous pouvez ensuite choisir lequel est utilisé et, pour autant que je sache, utiliser des variables globales de cette manière n'est pas une bonne idée. – webnoob

1

L'enregistrement d'ID dans une valeur masquée n'est pas très sûr. Généralement, nous stockons l'ID dans la variable de session.

+1

Il n'est pas nécessaire d'utiliser la variable de session. Il est plus sain sur le plan sémantique (et plus facile) de vérifier que l'utilisateur qui publie des données a la permission de modifier l'enregistrement pour lequel il publie des données. – meagar

+0

ah. Meagar, tu as dit ce que je pensais très bien! Avoir 2 variables supposées stocker la même valeur, est en désordre et peut être sujet aux erreurs –

+0

L'OP demande comment déterminer quel est l'enregistrement en cours de modification sans le modifier, c'est-à-dire comment ils stockent l'ID pour ensuite le renvoyer au serveur pour interroger l'enregistrement avec, donc la déclaration de ppshein est correcte. Vous stockez l'ID dans une session afin qu'il ne puisse pas être modifié et puis vérifier les autorisations pour cet enregistrement. Vous ne pouvez pas vérifier les autorisations si vous ne savez pas quel document est en cours de modification. – webnoob

0

Il ne doit pas être basé sur quelque chose soumis par l'utilisateur. Vous devez toujours vérifier les autorisations utilisateur côté serveur. Un attaquant peut préparer n'importe quelle requête sur votre serveur.

1

comme dit ppshein, stocker des identifiants sensibles dans un var caché n'est PAS sûr. Voulez-vous stocker un mot de passe dans un var caché? C'est vraiment facile, même pour un hacker débutant, d'obtenir ces données.

Vous devez vous assurer que tous les contrôles d'accès sont appliqués par le serveur. Dans votre cas, vous devez vous assurer que l'utilisateur connecté (celui de la session) est le propriétaire du profil en cours de modification. Ou que l'utilisateur qui effectue les modifications a les permissions pour éditer ce profil (par exemple est un administrateur)

0

D'accord avec tous les points ci-dessus, mais si vous avez vraiment besoin de stocker quelque chose clientide pour une raison quelconque, vous pouvez toujours crypter le données et décrypter lorsque vous avez besoin de l'utiliser, mais encore une fois, l'utilisation de sessions serait le meilleur moyen de traiter avec eux car ils ne sont pas accessibles côté client.

+0

qui ne change pas le fait que l'utilisateur peut changer la valeur tho. –

+0

Bien sûr, et c'est là qu'intervient la validation côté serveur. Si un pirate change une valeur dans un ID chiffré, il ne déchiffre plus correctement et vous savez donc que quelque chose ne va pas. – webnoob

+0

alors je pense que le cryptage ne peut pas être trop utile dans ce cas, car l'ID n'est pas un secret. crypter ou pas, je vais encore besoin de vérifier si l'utilisateur a accès à la ressource demandée. –

Questions connexes