Bar*_*man 9 html javascript desktop web-applications
我有一个很多非技术用户使用的Web应用程序.我发现其中一些用户正在将应用程序的登录页面保存到他们的桌面(这也保存了相关的CSS和JS文件).然后,要开始使用该应用程序,他们双击该桌面图标,该图标使用file:// protocol显示本地副本.
这可能会导致以后出现问题,例如,如果我更改登录表单或发布的URL等,此外,某些javascript实用程序(例如PIE.htc)无法使用file://协议.
显然他们应该做的是保存浏览器书签/收藏夹,我正在寻找一种方法来检测和警告这些用户,而不会混淆其他用户.我一直在使用一些JavaScript来警告这些用户:
if (top.location.protocol == 'file:') {
alert('This application is not designed to be accessed from a desktop copy...')
}
Run Code Online (Sandbox Code Playgroud)
但是这只会警告已经保存桌面副本的用户,因为我添加了这段javascript.
有没有其他人有这个问题,并提出他们想分享的聪明的解决方案?
谢谢
更新:
最后,我决定通过在登录页面请求时设置带有nonce值的cookie,并在表单中存储与隐藏字段相同的值.然后,在表单提交处理程序中,检查两者是否相同,如果没有则显示错误消息.可以将nonce存储在会话中而不是cookie中,但我不想创建不必要的会话.
如果用户已在本地保存了登录页面,则与cookie相比,它们在保存的表单中可能具有不同的nonce值(如果他们根本没有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.
也许饼干?如果站点正在运行,file:\\则请求中可能没有任何 cookie。(当然,现在您应该在登录页面上添加一些 cookie(会话数据)。
另外,请阅读有关 CSRF http://en.wikipedia.org/wiki/Cross-site_request_forgery和预防方法的信息。