繁体   English   中英

如何防止用户从本地保存的Html登录页面访问Web应用程序?

[英]How to prevent users from accessing a web application from a locally saved Html login page?

我有一个很多非技术用户使用的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...')
}

但是这只会警告已经保存桌面副本的用户,因为我添加了这段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

我认为你最好的选择是教育用户使用书签而不是保存物理文件。

除此之外,可能有一种方法可以创建URL的快捷方式,也许是在登录期间?

您可以检查服务器端的http referrer,并警告用户不是来自您的托管登录表单。

编辑:

实际上,之前已经提出了一个模糊相似的问题并得到了一个很好的解释,为什么referrer不是一个理想的解决方案,并提供了另一种解决方案: 如何检查来自同一服务器或不同服务器的请求?

也许饼干? 如果站点正在运行file:\\\\ ,则请求中可能没有任何cookie。 (当然,现在您应该在登录页面上添加一些cookie(会话数据)。

另外,请阅读CSRF http://en.wikipedia.org/wiki/Cross-site_request_forgery和预防方法。

为什么,不是你,而不是警报,重定向到你的页面?

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

或者您也可以使用window.location.reload();强制重新加载window.location.reload();

您可以将用户重定向到具有登录表单的真实页面,而不是显示消息,或显示帮助框,以解释用户应以这种方式保存页面。

您可以设置一个在表单中设置为隐藏变量的会话变量。 如果不存在,则重定向到您的登录表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM