2009-06-11 5 views
1

Je travaille dans CodeIgniter, et je veux envoyer des requêtes à mon contrôleur/modèle qui ont plusieurs paramètres impliqués. Y a-t-il une différence entre la transmission de ces paramètres via une forme masquée (c'est-à-dire l'utilisation de $_POST) par opposition à leur transmission via des URI (par exemple, "travel/$ month/$ day /")? Y a-t-il des problèmes de sécurité avec cette approche?URIs vs Hidden Forms

Exemple préoccupation de sécurité:

  • URIs

    http://www.example.com/travel/$month/$day/

  • forme cachée:

    form_hidden('month',$month);
    form_hidden('day',$day);

Répondre

0

Si vous choisissez URIs, si l'utilisateur signets les URL,
il apporte des problèmes de sécurité.

et si un utilisateur clique sur un lien,
le serveur Web cible peut maintenant connaître
HTTP_REFFER, et l'administrateur du serveur
peut connaître le lien.

cela signifie qu'il peut voir l'URI. Donc mon opinion personnelle est que
vous feriez mieux de choisir la forme cachée.

0

Si vous surveillez vos données entrantes (les utilisateurs sont de mauvais gobelins, souvenez-vous), et nettoyez si nécessaire cela ne fera pas beaucoup de différence. La différence se résume à la convivialité: si vous voulez que les utilisateurs puissent accéder aux mêmes résultats sans devoir toujours passer par un formulaire, utilisez la méthode URL.

En toute honnêteté, votre exemple ne donne pas assez de données pour déterminer quelle méthode (POST/GET) serait appropriée pour vous.

Lecture suggérée: GET versus POST in terms of security?

+0

Merci! Désolé, mon message a été simplifié. Mon objectif actuel est de créer un forum qui passerait autour de user_ids, question_ids, answer_ids, category_ids ... Merci pour ce commentaire, je suis en train de vous lire. –

+0

Si vous souhaitez permettre un lien direct vers des questions, des réponses, des pages d'utilisateurs (toutes les bonnes idées, si vous me le demandez), alors autorisez les valeurs d'URL. Vous remarquerez que StackOverflow fait cela ... cela devrait vous donner un peu de confort. – Sampson

3

Règle de base - requêtes GET ne doivent jamais changer l'état des choses. Donc, si vous changez quelque chose ou demandez - utilisez des formes cachées avec des valeurs nonce (pour éviter les resouhissions accidentelles et CSRF attacks). Sinon, il n'y a pas de différence.

L'authentification doit être découplée des données URI et POST - il existe des cookies, des authentifications HTTP et des certificats clients SSL. Tout le monde sait qu'il y a un 11 juin 2009, et beaucoup de gens savent que vous utilisez le schéma /$year/$month/$day/ dans les URI (ou les champs POST "year", "month" et "day") sur votre site. Mais seuls ceux qui ont le droit d'accès devraient être en mesure de voir ce qui est sur cette page (ou les données POST à ​​cet URI). Et, oui, les données GET et POST peuvent être facilement altérées, donc vous devez évidemment vérifier leur validité.

0

J'ai récemment rencontré ce même problème. Lorsque des éléments supplémentaires sont exposés dans l'URL, vous risquez d'exposer des méthodes/données de site Web. Après un peu de recherche, j'ai choisi de ne montrer des variables que lorsque cela était absolument nécessaire ou si la page était juste une vue simple. Plus vous exposez de données dans votre URL, plus vous devrez probablement mettre en place de contrôles (que se passe-t-il si l'utilisateur modifie l'URL de manière x)?

Une autre considération est la possibilité de mettre en signet ou de lier à des URL (vraisemblablement des vues). Une idée consiste à masquer les variables dans l'URL via une chaîne cryptée. Vous pouvez ensuite stocker la chaîne chiffrée dans votre base de données et la sérialiser si nécessaire. Je l'ai fait pour un moteur de recherche et cela m'a donné le meilleur des deux mondes. C'était avec CodeIgniter.