Как запретить пользователям доступ к веб-приложению с локально сохраненной страницы входа в Html? - PullRequest
9 голосов
/ 31 января 2012

У меня есть веб-приложение, которое используется многими нетехническими пользователями. Я обнаружил, что некоторые из этих пользователей сохраняют страницу входа приложения на свои рабочие столы (которая также сохраняет связанные файлы CSS и JS). Затем, чтобы начать использовать приложение, они дважды щелкают по значку на рабочем столе, который показывает локальную копию с использованием протокола file: //.

Это может вызвать проблемы позже, например, если я изменю форму входа или URL-адрес, на который она отправляет сообщения, и т. д. Кроме того, некоторые утилиты javascript, например, PIE.htc не работает с использованием протокола file: //.

Очевидно, что они должны делать - сохранять закладки / избранное браузера, я ищу способ обнаружения и предупреждения этих пользователей, не путая остальных. Я использую некоторые JavaScript, чтобы предупредить этих пользователей:

if (top.location.protocol == 'file:') {
    alert('This application is not designed to be accessed from a desktop copy...')
}

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

Кто-нибудь еще имел эту проблему и придумал умные решения, которыми он хотел бы поделиться?

Спасибо

Обновление:

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

Если пользователь сохранил страницу входа локально, он, скорее всего, будет иметь разные одноразовые значения в сохраненной форме по сравнению с cookie (если у них вообще есть cookie).

Обычно никто не добавил бы защиту CSRF (вот как это выглядит) в форму входа, но она удовлетворяет моим требованиям. Я читал об этой технике в The Register, http://www.theregister.co.uk/2009/10/02/google_web_attack_protection/, Google реализовал аналогичную защиту для своих форм входа в систему, чтобы защитить от подделки запросов на вход в систему, http://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests.

Ответы [ 6 ]

2 голосов
/ 31 января 2012

Я думаю, что вам лучше всего научить пользователей использовать закладки вместо сохранения физических файлов.

Кроме этого, возможно, есть способ создать ярлык для вашего URL, возможно, при входе в систему?

1 голос
/ 31 января 2012

Почему бы вам вместо оповещения не перенаправить на свою страницу?

window.location = 'http://www.yourdomain.com'

Или вы также можете принудительно перезагрузить с помощью window.location.reload();

1 голос
/ 31 января 2012

Может быть, печенье? Если сайт работает с file:\\, вероятно, в запросе нет файлов cookie. (Конечно, теперь вы должны добавить куки (данные сеанса) на вашу страницу входа в систему.

Также читайте о CSRF http://en.wikipedia.org/wiki/Cross-site_request_forgery и способе предотвращения.

1 голос
/ 31 января 2012

Вы, возможно, могли бы проверить ссылку на http на стороне сервера и предупредить пользователей, не приходящих из вашей формы входа в систему.

Редактировать:

На самом деле, ранее был задан примерно такой же вопрос, иполучил хорошее объяснение, почему реферер не является идеальным решением, а также предлагает альтернативное решение: Как проверить, поступает ли запрос с того же сервера или с другого сервера?

0 голосов
/ 31 января 2012

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

0 голосов
/ 31 января 2012

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

...