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

Javascript 如何防止用户从本地保存的Html登录页访问web应用程序?,javascript,html,web-applications,desktop,Javascript,Html,Web Applications,Desktop,我有一个web应用程序,它被许多非技术用户使用。我发现其中一些用户正在将应用程序的登录页面保存到他们的桌面上(这也保存了相关的CSS和JS文件)。然后,要开始使用应用程序,他们双击桌面图标,该图标显示使用file://协议的本地副本 这可能会导致以后出现问题,例如,如果我更改登录表单或它发布到的URL等。此外,某些javascript实用程序(例如PIE.htc)无法使用file://协议工作 显然,他们应该做的是保存一个浏览器书签/收藏夹,我正在寻找一种在不混淆其他用户的情况下检测和警告这些用

我有一个web应用程序,它被许多非技术用户使用。我发现其中一些用户正在将应用程序的登录页面保存到他们的桌面上(这也保存了相关的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之后已经保存桌面副本的用户

有没有其他人遇到过这个问题,并提出了他们愿意分享的聪明的解决方案

谢谢

更新:

最后,我决定在登录页面请求时设置一个带有nonce值的cookie,并在表单中存储与隐藏字段相同的值。然后,在表单提交处理程序中,检查两者是否相同,如果不相同,则显示错误消息。可以将nonce存储在会话中而不是cookie中,但我不想创建不必要的会话

如果用户在本地保存了登录页面,则与cookie相比,他们在保存的表单中可能具有不同的nonce值(如果他们有cookie)


通常情况下,人们不会在登录表单中添加CSRF保护(这是一种保护),但它满足了我的要求。我在注册表上读到这项技术,谷歌对他们的登录表单实施了类似的保护,以防止伪造登录请求

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

编辑:


事实上,之前有人问过一个模糊不清的类似问题,很好地解释了为什么推荐人不是一个理想的解决方案,并提供了另一个解决方案:

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

我认为最好的办法是教育用户使用书签,而不是保存物理文件


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

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


另外,请阅读有关CSRF和预防方法的信息。

为什么不将警报改为重定向到页面

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

或者,您也可以使用
window.location.reload();

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

我已经尝试过,这似乎是理想的解决方案,但IE和Chrome(我测试过的那些)似乎是从文件转到时不要发送推荐人http://Isn“如果用户没有更改浏览器的默认行为,那么就可以假定没有空推荐人的请求不会来自您的登录表单,这难道不安全吗?如果您担心会惹恼您的用户,您可以在他们确认理解后再警告他们一次,永远不要警告他们。”暗示。好主意,检查没有推荐人可能会起作用(但也会导致一些误报,例如用户登录后键入URL),不幸的是,我在使用这个应用程序时遇到了问题-许多用户坐在公司防火墙后面,在任何情况下都会将引用头作为安全措施。如果我不明白这一点,我会接受你的回答。这是个好主意,我看到过有“添加书签”链接的网站(可能使用javascript)。我可能会实现此功能,但此时我需要警告已执行此操作的现有用户。确实,保存的副本上不会有任何cookie。因此,我可以在登录表单上设置cookie,并在登录后在菜单页面上检查其存在性,很好!您是否建议使用从登录页面t提交的依赖时间的CSRF令牌o登录处理程序?我想,就像CSRF保护一样,我正在尝试检测不是来自我的应用程序的请求,因此这可能也会起作用。我将尝试您的建议并报告。问题说明HTML页面已由客户端保存,因此无法修改。我希望检测我们需要的用户通过本地保存的副本重新访问瞄准具。此外,重新加载文件://页面只会重新加载本地副本