Умный способ запретить пользователям переходить на страницу сайта напрямую - PullRequest
0 голосов
/ 13 июня 2009

Сайт имеет 100 страниц, следуя определенной карте сайта. Пользователь может перейти к page2.aspx из page1.aspx. Но если пользователь переходит на страницу page2.aspx, скажем, через книгу, помеченную URL, его следует перенаправить на страницу page1.aspx.

Редактировать: я не хочу заходить и добавлять код на каждую страницу, которая должна удовлетворить эту потребность.

Примечание. Это не сценарий обратной передачи между страницами.

Ответы [ 5 ]

1 голос
/ 13 июня 2009

Я недавно работал с реальным кодом, который проверил, был ли реферер пустым, и использовал это как шаг в авторизации. Идея заключалась в том, что пользователи не смогут подделать реферера, вам не нужен специальный браузер для фальсификации реферера. Пользователи могут забронировать пометить вашу страницу на вкусный, тогда вкусно.com является рефералом (а не пустым).

У меня были реальные аргументы о том, насколько сложным должен быть пользователь, чтобы делать определенные хаки - то есть, если пользователи не знают, как установить реферер, вы можете доверять ему. Хотя это правда, вряд ли ваши пользователи напишут собственный браузер, но уже есть дополнения Firefox для установки заголовков, ссылок и т. Д., И они просты в использовании.

У Джоша лучший ответ - на странице 2 вы должны проверить журнал посещений и посмотреть, недавно ли пользователь просмотрел страницу 1

1 голос
/ 13 июня 2009

Вы можете рассмотреть что-то, основанное на WorkFlow, например: http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx

Команда WCSF также включила блок приложения потока страниц , который можно использовать в качестве автономного дополнения к вашему приложению.

1 голос
/ 13 июня 2009

Как уже упоминал другой ответчик, вы можете использовать заголовок Referrer, но он может быть подделан клиентом.

Поскольку вы не хотите изменять каждую страницу, вы можете что-то сделать с IHttpModule . Предполагая, что у вас есть какой-то способ описания действительных переходов по страницам, вы можете сделать что-то вроде этого в обработчике BeginRequest:

  • Проверьте сеанс на наличие списка допустимых страниц (используя список по умолчанию для первого посещения, если в сеансе нет ни одного).
  • Если этот запрос относится к неверной странице, перенаправьте туда, где пользователь должен быть.
  • На основе этого запроса настройте список допустимых страниц и перенаправьте страницу в сеансе, чтобы она была готова к следующему запросу.
1 голос
/ 13 июня 2009

Полагаю, вы могли бы проверить реферер, и если его нет / или это не page1.aspx, вы можете перенаправить обратно на page1.aspx.

0 голосов
/ 15 июня 2009

Мне нравится много ответов выше (особенно рабочий процесс).

Другой вариант - создание каждой страницы в качестве пользовательского элемента управления и возможность page1.aspx контролировать то, что загружается в пользовательский элемент управления. Преимущество заключается в том, что рабочий процесс хранится в одном месте, а не на каждой странице.

Однако я не думаю, что там есть волшебная пуля. Похоже, что эта проблема безопасности является запоздалой мыслью или, возможно, сообщается как ошибка, и вам было поручено быстро и эффективно исправить ее.

Я бы начал взвешивать ответы здесь с учетом их стоимости в часах. Я подозреваю, что самым быстрым решением будет проверка адресов рефералов на каждой странице. Хотя это может быть взломано, оно неясно, и если этот риск приемлем для вас, это может быть подходящим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...