【问题标题】:Security question: Using ajax and events to keep session alive安全问题:使用 ajax 和事件保持会话活动
【发布时间】:2021-09-01 22:23:52
【问题描述】:

我知道一些网站(例如我的银行和学校)在闲置一段时间后会终止会话。据我了解,会话活动是由用户点击链接决定的,或者至少是由某种活动交互决定的,比如通过 ajax 更新表单。基本上,服务器在会话期间收到执行某些操作的请求,然后继续将会话时间再延长 15 分钟。

但在某些情况下,我在填写文本框或阅读一些长长的说明时会浪费大量时间和信息。

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

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

我能想象的唯一有风险的是猫的随机行为、附近的振动电子设备或超级孩子。

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

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

【问题讨论】:

    标签: javascript ajax security session dom-events


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我曾经在一家公司工作,该公司举办了很多在线比赛,用户必须输入论文内容以及较短的数据块;我们曾经在用户点击“冗长”页面时为用户的会话修改会话超时“session.setMaxInactiveInterval()”,以便他们有更多时间进行编辑,然后我们将其设置为正常后提交。

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

      祝你好运。

      【讨论】:

      • 这已经很老了,但我认为这是最好的解决方案。我运行一个网站,该网站当前使用 JavaScript 间隔计时器来例行 ping 服务器,以在打开浏览器时保持会话处于活动状态。我已经部署了这个设置一年多了,我还没有遇到任何问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多