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