2011-05-06 2 views
0

Oui je sais, un autre effort HTTP_REFERER. Je grince des dents quand je le vois. Mais il m'a été remis comme une solution à un problème de «retour en arrière» et cela fonctionne réellement, alors ...La solution HTTP_REFERER ultime pour le bouton retour PHP?

... le problème est, je ne le comprends pas assez pour se sentir à l'aise de le déployer en direct .

Je suis passé par beaucoup de messages ici sur les dangers de HTTP_REFERER, mais je me dit que ce code leur adresse pour cette tâche ... mais je ne suis pas convaincu.

Alors, mes questions sont au bas du code ci-dessous - mais d'abord, voici la base derrière:

Ce code va dans un panier. Il fournit l'action du bouton "Continuer les achats" après qu'un utilisateur a cliqué sur "Voir panier". Son but est de fournir la redirection la plus appropriée (ou attendue) à l'origine de l'utilisateur. Par défaut, sans ce code ajouté, le bouton «Continuer à faire du shopping» de cette page particulière «panier d'achat» amène simplement l'utilisateur à la page d'accueil du chariot - sorte de coups si l'utilisateur a navigué quelques pages profond pour trouver un ensemble de produits ou une catégorie spécifique, ou regardait un produit, etc. Donc nous voulons améliorer cela. En outre, le panier requires javascript pour effectuer un achat, que l'utilisateur est averti s'ils visitent avec JS off, alors JS sur devrait de l'utilisateur lors de cette opération. Enfin, nous voulions garder la solution à un seul bloc de code, de sorte qu'il peut être appliqué facilement et transportés dans des versions mises à jour du panier avec peu de question.

La méthodologie qu'il m'a été décrite:

  1. Si réferrent est réglé et il est vide et oui il ne contient le domaine alors

    1a de ce panier. Si le referer est la page du panier lui-même, appliquer un javascript (-1) effet, nous allons par ailleurs être coincé dans un endroit

    1b. SINON allez-y et appliquez le Referer - Done.

  2. ELSE si un refer est réglé et que ce n'est pas vide, mais pas elle ne contient pas le domaine de ce panier puis

    2a. Quelque chose ne va pas, envoyez-les à la page d'accueil. (?? pourquoi ??)

    2b. ELSE appliquons l'effet javascript (-1). - Terminé.

Le code:

if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) { 
    if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') { 
     $this->data['continue'] = 'javascript:history.go(-1)'; 
    } 
    else { 
     $this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']); 
    } 
} 
else { 
    if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) { 
     $this->data['continue'] = 'index.php?r=home'; 
    } 
    else { 
     $this->data['continue'] = 'javascript:history.go(-1)'; 
    } 
} 

Mes questions:

  1. Ok, donc nous avons combiné deux méthodes suspectes, et il semble que collectivement au travail. Mais qu'est-ce qui peut mal tourner avec ça (Sécurité/Fonction)? Y a-t-il un showstopper ici qui me manque?

  2. Que va accomplir la deuxième partie (2. et 2.a.)? On m'explique que c'est un effort pour déterminer si quelqu'un essaye délibérément d'alimenter un faux référent - mais cela n'a pas de sens pour moi - pourquoi nous soucions-nous de diriger cette personne vers la page d'accueil par rapport au javascript (-1) méthode?

  3. des réflexions sur l'amélioration? Ceux viennent toujours handly ;-)

Nous vous remercions de votre temps pour aider à cette ...

+1

Le référenceur est fourni par le client et n'est pas fiable. vous auriez probablement plus de chance de stocker la dernière page affichée dans une variable de session. – dqhendricks

+0

Bonjour, merci ... c'est un point clé de ce post ... ce problème est * soi-disant * adressé dans le code, en vérifiant si le referer (1) existe, (2) n'est pas vide, et (3) contient le domaine du panier, puis par défaut à la méthode javascript ... il répond également à notre exigence d'être autonome. Je sais qu'il existe de meilleures solutions impliquant des variables de session, etc. mais dans ce cas j'essaie de me concentrer spécifiquement sur cette version de http_referer, pour voir si elle est viable dans cette application ou pas ... – Soyo

+0

Ne comptez jamais sur JavaScript en tant que se retirer! –

Répondre

1

Referer est tout simplement la dernière page l'utilisateur visité avant d'aller au panier.

  1. Javascript: history.go() contient un tableau de pages visitées similaires à referer, il peut envoyer l'utilisateur vers une page dans l'histoire. Je ne sais pas quel est le risque sauf si le chariot n'a pas de délai d'expiration. Mais je ne suis pas vraiment une personne de sécurité, donc mieux vaut laisser quelqu'un avec plus de connaissances expliquer les risques là-bas. Si un utilisateur a sauté d'un autre site directement dans un panier, alors il devrait vraiment y avoir quelque chose qui cloche et plutôt que de les laisser là, envoyez-les à la page d'accueil. Dans ce cas, Java est un logiciel côté client, donc il n'aurait pas d'historique de navigation sur votre site à utiliser pour envoyer l'utilisateur à votre page d'accueil.

  2. Si vous n'aimez vraiment pas referer, mie de pain sont toujours une autre option, ou $ _SESSION [ 'précédentPage'] = ....

-moi si je me trompe.

+1

Merci beaucoup pour votre réponse ... Hahaha "si vous n'aimez vraiment pas referer" ... Hey je veux l'aimer bien !! ;-) ... C'est surtout que je ne fais pas confiance à la sécurité, et c'est ma plus grande préoccupation. Un bon point sur la question de la page d'accueil ... Je suppose que si elle peut détecter que l'utilisateur venait d'un site extérieur, directement à la 'vue du panier', alors les envoyer à la page d'accueil les garderait au moins dans le magasin, et non renvoyez-les au site d'origine. Bien sûr, si aucun referer, alors le javascript par défaut les renverrait ... mais semble une visite improbable si ...? tx – Soyo

+0

Peu probable, mais pas impossible. Surtout quand vous avez quelqu'un qui essaie de pirater votre panier;) – robx

Questions connexes