使用客户端空闲计时器/大型网络应用程序开发人员如何做到这一点有多安全?

时间:2013-06-10 09:04:00

标签: php javascript web-applications timeout idle-timer

我正在构建基于PHP的Web应用程序并实现了基于会话变量的登录方法。在加载任何内容之前,此方法会清除"登录"所有那些在网站上花费了X个时间而没有加载新页面或重新加载同一页面的状态。现在这工作得很好,但这只是在加载页面时检查并且没有查找鼠标/键盘活动(考虑填写长格式)。

类似的问题已经被问到here但是代码的安全漏洞从未被质疑过。我还发现Paul Irish's solution to this但是没有找到任何对安全性的引用。

在我保持"绝对超时的情况下,javascript代码可能会被取消激活/拦截,这是一种现实的恐惧吗?服务器端?其他大型网络应用程序设计师如何做到这一点?

1 个答案:

答案 0 :(得分:2)

这里有许多相互关联的问题。我的方法是,这可以完全在服务器端完成,然后在上面添加一个JavaScript改进,这样无论客户端的东西是否无法运行都无关紧要。

解决方案的核心是在用户登录时在服务器上设置last_seen时间。每当您检测到任何用户活动(页面呈现或AJAX响应)时,请检查此时间是否在您可接受的范围内,以及是否使用当前时间覆盖它。如果它超出当前范围,则销毁服务器端的会话,并使用适当的消息强制重定向到登录页面。

一旦你完成了这一点,就不可能修改服务器端的值,除非用户为了避免超时而无意地人为地刷新他们的页面 - 但在这种情况下,你将无法确定“真实”页面请求与仅用于重置会话计时器的页面请求之间的差异。如果您担心用户计算机上的恶意软件,或对用户连接的高级中间人攻击,那么您遇到的问题比会话超时还要大。

设置完成后,您可能希望使用JavaScript在每个自动显示自动注销消息的页面上运行计时器。只需将此计时器设置为与超时相同的时间长度,当然如果在页面上触发了AJAX操作,则重新启动它。您可以将此消息注入DOM,而不是重定向,因此如果用户填写表单,他们不会丢失工作。

正如您所说,您始终可以检测表单键击以重置计时器。为此,请向服务器发送一个AJAX操作,该操作以空回复回答 - 这将自动发送cookie - 只需确保您的标准会话代码也在此处运行。使用JavaScript计时器,以便每次按下都不发送AJAX操作 - 如果它有时比按键时间晚10秒,那么你不会压过连接,你将确保你的应用程序保持快速。< / p>