Окончательное решение HTTP_REFERER для кнопки возврата PHP? - PullRequest
0 голосов
/ 06 мая 2011

Да, я знаю, еще одно усилие HTTP_REFERER.Я съеживаюсь, когда вижу это.Но он был передан мне в качестве решения проблемы «возврата», и он действительно работает, поэтому ...

... проблема в том, что я не понимаю этого достаточно, чтобы чувствовать себя комфортно при развертываниион жив.

Я прочитал здесь много сообщений о рисках HTTP_REFERER, однако мне сказали, что этот код обращается к ним для этой конкретной задачи ... но я не уверен.

Итак, мои Вопросы находятся внизу кода ниже - но, во-первых, вот основа этого:

Этот код входит в корзину.Он обеспечивает действие кнопки «Продолжить покупки» после того, как пользователь нажмет «Просмотреть корзину».Его цель - предоставить наиболее подходящее (или ожидаемое) перенаправление назад туда, откуда пришел пользователь.

По умолчанию без добавления этого кода кнопка «Продолжить покупки» этой конкретной страницы «Просмотр корзины»просто переносит пользователя на домашнюю страницу корзины - такие удары, если пользователь перешел на несколько страниц вглубь, чтобы найти набор продуктов или определенную категорию, или смотрел на продукт и т. д. Поэтому мы хотим улучшитьна что.Кроме того, корзина требует JavaScript для завершения покупки, о чем пользователь предупреждает, если он заходит с выключенным JS, поэтому от пользователя ожидается включение JS во время этой операции.Наконец, мы хотели сохранить решение в виде единого блока кода, чтобы его можно было легко применять и переносить в обновленные версии корзины без особых проблем.

Методология, которая была мне описана:

  1. Если задан реферер И он не пустой И да, он содержит домен этой корзины, тогда

    1a.Если реферером является сама страница корзины, примените эффект javascript (-1), иначе мы застрянем в одном месте

    1b.В противном случае примените Реферер - Готово.

  2. В противном случае, если ссылка установлена ​​И она не пустая, НО она не содержит домен этой корзины, тогда

    2a,Что-то не так, отправьте их на домашнюю страницу.(?? почему ??)

    2b.В противном случае давайте применим эффект javascript (-1).- Готово.

Код:

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)';
    }
}

Мои вопросы:

  1. Итак, мы объединили дваПодозреваемые методы, и все вместе, кажется, работает.Но что может пойти не так с этим (Безопасность / Функция)?Здесь есть showtopper, что я скучаю?

  2. Чего ожидает вторая часть (2. и 2a.)?Мне объяснили, что это попытка определить, намеренно ли кто-то пытается накормить фальшивого реферера - но для меня это не имеет смысла - почему мы хотим направить этого человека на домашнюю страницу вместо использования javascript (-1) метод?

  3. ЛЮБЫЕ мысли по улучшению?Они всегда приходят с умом; -)

Спасибо за то, что уделили нам время для помощи ...

1 Ответ

1 голос
/ 06 мая 2011

Referer - это просто последняя страница, которую посетил пользователь перед переходом в корзину.

  1. Javascript: history.go () содержит массив посещенных страниц, похожих на referer, поэтому онможет отправить пользователя обратно на страницу истории.Я не знаю, что это за риск, если в корзине нет времени ожидания.Но я не очень специалист по безопасности, поэтому лучше позволить кому-то с большими знаниями объяснить там риски.

  2. , если пользователь перепрыгнул с какого-то другого веб-сайта прямо в корзину, тотам действительно должно быть что-то не так, и вместо того, чтобы оставлять их там, отправьте их на домашнюю страницу.В этом случае java является программным обеспечением на стороне клиента, поэтому у него не было бы истории просмотра вашего сайта, чтобы использовать его для отправки пользователя на вашу домашнюю страницу.

  3. Если вы действительно этого не делаетеКак и реферер, хлебные крошки - это всегда другой вариант, или $ _SESSION ['previousPage'] = ....

Исправьте меня, если я ошибаюсь.

...