Как предотвратить доступ пользователей к веб-приложению с локально сохраненной страницы входа Html?

У меня есть веб-приложение, которое используется многими нетехническими пользователями. Я обнаружил, что некоторые из этих пользователей сохраняют страницу входа в приложение на своем рабочем столе (что также сохраняет связанные с ней файлы 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 со значением nonce при запросе страницы входа и сохранив это значение в скрытом поле формы. Затем, в обработчике отправки формы, проверить, что эти два значения одинаковы и показать сообщение об ошибке, если это не так. Можно хранить nonce в сессии вместо cookie, но я не хочу создавать лишние сессии.

Если пользователь сохранил страницу входа локально, он, скорее всего, будет иметь другие значения nonce в сохраненной форме по сравнению с 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.

9
задан Barry Pitman 31 January 2012 в 20:24
поделиться