安全问题:使用ajax和事件来保持会话活跃

时间:2009-12-11 22:17:59

标签: ajax security session javascript-events

我知道有几个人(比如我的银行和我的学校)在他们闲置了一段时间之后杀了一个会话。我的理解是,会话活动由用户遵循链接或至少来自某种活动交互来确定,例如通过ajax更新表单。基本上,服务器在会话期间获得执行某些操作的请求,然后继续并将会话时间再延长15分钟。

但在某些情况下,我在填写文本框或阅读一些长篇说明的过程中丢失了大量的时间和信息。

那么为什么没有一个ajax脚本来监听键盘活动和鼠标移动,并让服务器知道用户仍然在那里并且活动,即使他们没有点击提交按钮或链接?

我想知道是否有人知道已经做到这一点的受尊敬的网站,或者我是否因为这个想法而忽略了一些重大的安全隐患。

我唯一想象的就是猫的随机行为,附近的振动电子设备或超级孩子。

但是在上述所有情况中,用户最有可能在家中 - 除非他们试图被利用 - 可能最小化窗口,因此这些事情不太可能作为事件触发。

有人看到任何其他重大风险吗?

2 个答案:

答案 0 :(得分:2)

无论如何,典型的AJAX网站都会将帖子发回服务器。这些事件已经在更新用户会话。

如果您通过键盘或鼠标点击这些事件,您要将多少次发布到服务器?如果我正在输入像我现在这样的表单字段,这意味着您可能会为我输入的每个字母ping服务器;不是非常有效的解决方案。另一方面,如果您的用户只是坐在他们的阅读或使用外部文本编辑器键入他们的文本并稍后将其复制到您的表单,该怎么办?

我认为更典型的解决方案是提供一个友好的用户界面,以便长时间的帖子不会因为会话过期而被删除,这就是使用自动保存功能。 Google文档可以做到这一点。每隔几秒钟/几分钟,他们就会将编辑器的内容发回服务器,而无需用户实际点击“保存/提交”。另一种选择是通知用户他们的会话即将到期(可以通过javascript超时完成)。提供ping服务器以更新会话的链接。

您的解决方案也会遇到同样的问题:您依赖于用户行为。在第一种情况下,在页面之间导航,在第二种情况下,鼠标单击。

答案 1 :(得分:1)

我曾经为一家公司工作,这家公司做了大量的在线竞赛,用户必须输入论文内容以及更短的数据块;当用户会话点击“啰嗦”页面以便他们有更多时间进行编辑时,我们习惯将会话时间修改为“session.setMaxInactiveInterval()”,然后我们会将其设置回正常状态。提交。

后来在那家公司和我工作的其他几个人我提出了类似于你所描述的解决方案,但出于各种原因它从未被接受过。它从来没有被认为是一个坏主意,只是我们选择的不是。基本上它将是一个定时器上的ajax调用,因此在会话超时之前,它将触发轻量级的ajax“ping”并且只要该页面打开就保持会话处于活动状态。我从来没有机会在“现实世界”中实现它,所以也许有一些我没有想过的消极因素。

祝你好运。