问题标签 [session-fixation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1172 浏览

session - 安全 SessionFixationProtectionStrategy 干扰会话范围的 bean

我正在使用 Spring 3.1.1.Release,Security 3.1.0.Release。

我已将登录/注销添加到我的 Web 应用程序,但是会话范围的 bean 无法正常运行。该 bean 用于连接到名为 CMSConnector 的 CMS。

为了对用户进行身份验证,我实现了一个 AuthenticationProvider,在 authenticate() 调用中,我获得了会话范围的 CMSConnector 并调用 CMSConnector.login()。如果 CMS 登录失败,则登录失败。

问题 -

如果登录成功,则在成功登录后立即调用@predestroy logout()。然后我发现它是 SessionFixationProtectionStrategy 正在调用无效的前一个会话并为其分配一个新会话。

invalidate() 在会话范围的 bean 上调用 @predestroy 方法。

所以我暂时删除了@predestroy 注释,使连接没有关闭。(非常糟糕的做法。)

解决问题的方法是什么?

我试图创建一个 @PostConstruct 并将登录过程放在那里,但是当 request.getSession(true) 被调用时,@PostConstruct 没有被调用。

谢谢!

杰森

0 投票
1 回答
133 浏览

php - 在数据库中存储会话是否可以防止劫持/修复

经过数小时的挫折后,我设法编写了一个将 PHP 会话存储在数据库中的脚本。我的问题是,这是否可以防止会话劫持和/或固定?

提前致谢。

0 投票
1 回答
1508 浏览

ruby - 防止 ruby​​ sinatra 中的会话固定

ruby 中的大多数会话固定主题大多与 Rails 相关。sinatra 中是否存在会话修复漏洞?在 Rails 中,我们主要建议在分配会话之前执行 reset_session。我们如何防止 sinatra 中的会话固定?

0 投票
2 回答
1467 浏览

jboss - Spring 的 SessionFixationProtectionStrategy 杀死了 JBoss / Weld 下的 CDI Conversation

我有一个标记为 @ConversationScoped 的对象,并在向导的许多步骤之间使用。

这完美地工作,除了当我的用户登录时,Spring 的 SessionFixationProtectionStrategy 调用 session.invalidate() 方法以重新创建具有新 ID 的新会话。然后,它将无效会话的属性重新附加到新会话。

问题是有一个 WeldListener 实例绑定到 sessionDestroyed 事件,这将杀死绑定到 HttpSession 对象的 @ConversationScoped 实例。

我已禁用 SessionFixationProtectionStrategy 并且现在使用 NullAuthenticatedSessionStrategy 什么都不做,但我仍然想保留 Session Fixation 策略以保护我的网站免受此影响。

关于如何解决这个问题的任何建议?

0 投票
2 回答
989 浏览

ruby-on-rails - Rails 3 与 Authlogic 并调用 reset_session

RoR 安全指南指出,您应该使用 reset_session 方法“发出新的会话标识符并在成功登录后声明旧的会话标识符无效”以对抗会话固定。

在使用 Authlogic 时,我无法找到有关调用 reset_session 的任何指导。是否只是将方法包含在控制器方法中(如下所示)的情况?

我只是担心会导致 Authlogic 出现问题,因为在调用 reset_session 之前,我可以在会话哈希中看到 user_credentials 和 user_credentials_id 键和值。

0 投票
1 回答
3423 浏览

jsf - 在不使用过滤器和包装器的情况下删除 URL 中的 JSESSIONID

我在Filter/* 的 url 模式上创建了一个监听,它用实现替换HttpServletRequestHttpServletRequestWrapper

我有一个Servlet并且在此Servlet用于h:graphicImage渲染从ApacheWeb 服务器获取的图像。

<h:graphicImage value="/locationInMyWebServer/myImage.jgp"></h:graphicImage>

当我点击访问此页面(包含图像)的 URL 时,图像没有显示为JSESSIONID附加到我的图像名称。正在形成的 URL 如下所示。

http:/myDomain/myServlet/../myImage.jpg;JSESSIONID=ABCDEFGHIJKLMM

因此,我使用了问题开头所述的Filter(有关此过滤器的更多详细信息,请参见此处)。

从这里Servlet有一个用于登录的链接。当用户登录时,JSESSIONID即使经过身份验证,也会保留相同的内容。由于 Session ID 在登录之前和用户登录之后是相同的,这导致了 Session-fixation 攻击。

如何避免使用此过滤器并解决我JSESSIONID在使用时附加到图像的问题h:graphicImage

PS:我不能使用<img src>,因为我h:graphicImage在里面h:commandLink

登录前和登录后的会话 ID 不同,在使用此之前Filter

我在下面添加了相关代码。

下面的代码来自我的web.xml其中有条目Filter

我的代码URLSessionFilter如下,

单击将显示哪个登录页面时,我的 Servlet 中有一个链接。代码如下,

myBean.myMethod,我正在做一些数据库清理活动并重定向到登录页面。

0 投票
1 回答
311 浏览

php - 为什么重新生成会话不是防止欺骗的解决方案?

经过数小时的阅读和尝试理解会议,这是我的一般结论/观点:

简单(和现实)的情况:

  • 攻击者获取现有网站 'website.example.com' 并将随机 SID 放在 URL '9gag.com/?SID=1234' 后面
  • 攻击者将此 URL 粘贴到“论坛”上,并附上以下文字:“9gag 为前 1000 次登录提供免费的东西!”
  • 受害者认出了该网站,因为他在那里有一个帐户,所以他很快点击了给定的 URL。
  • 受害者进入网站并登录。

因为受害者点击了“9gag.com/?SID=1234”并登录;他现在登录到 id=1234 的会话。请注意,每个会话都有一个唯一的 ID。这是服务器处理每个会话个体所必需的。虽然可以同时从多台计算机上进行相同的会话(具有相同的 id)。

  • 攻击者也访问了 '9gag.com/?SID=1234'。他现在与受害者在同一场会议上。这意味着他像受害者一样登录。他可以查看所有受害者帐户设置并进行更改。

为防止这种情况发生,本网站的主机可以使用以下 PHP 代码:

当initiated 为真时(所以当生成随机sessionID 时)不会生成新的sessionID。否则,生成新的 sessionID。因此,当受害者使用给定的 sessionID '1234' 登录时,它会将其丢弃并生成一个新的。现在攻击者无法获得与您相同的 sessionID,因为他不知道。

攻击者很聪明,并且知道另一种方式:

  • 攻击者访问该站点并登录。PHP 服务器已生成一个新的 sessionID。
  • 攻击者查看他的 COOKIES 以查看他收到的 sessionID。他发现 SID='412e11d5'
  • 攻击者执行与之前相同的步骤,但使用给定 ID 而不是“1234”。-> '9gag.com/?SID=412e11d5'

问题:这怎么可能?

  • $_SESSION['initiated'] 是否基于给定的 ID?所以'initiated == true'是因为它使用了id '412e11d5'的会话?
  • 攻击者先进行会话,否则无法生成 ID。那么受害者不应该进入攻击者会话(在他的帐户设置上,..)而不是反之亦然?
  • 看起来会话固定是基于很多运气。攻击者必须与受害者同时进入网站。我想我只是不明白这是如何工作的..

编辑:使用跨站点烹饪的攻击:

  • 攻击者创建了一个自己的网站“evil.example.com”,该网站将特定的 sessionID 存储在现有网站“9gag.com”的 COOKIE 中。
  • 受害者点击 URL 'evil.example.com' 就像在其他示例中一样。sessionID 已存储在他的“9gag.com”COOKIE 中。
  • 受害者当天晚些时候登录了“9gag.com”。
  • 攻击者现在可以使用固定会话标识符来使用受害者的帐户。

问题:再次,这怎么可能?:

  • 即使攻击者可以在另一个网站的 COOKIE 中存储一些东西。他如何/何时可以与受害者参加同一会议?他似乎不必同时登录?还是他可以通过其他方式(但使用 sessionID)获取受害者的私人数据?

请修改我的任何误解!提前致谢。

0 投票
2 回答
116 浏览

php - 这些关于会话固定的例子是什么意思?

第一个例子

第二个例子

我可以发现唯一不同的是,如果我使用两个不同的 URL(例如:http//localhost/test?PHPSESSID=123;http//localhost/test?PHPSESSID=456),第一个脚本将从零开始计数,但是第二个将继续计数

那么两个例子是什么意思呢?它想告诉我什么?

0 投票
1 回答
114 浏览

php - session fixation, still an issue with register_globals off?

I've been reading into some articles about PHP security, and I came across this article:
http://shiflett.org/articles/session-fixation

This article describes that one can easily fixate a session by passing the PHPSESSID variable in a url request (for example ?PHPSESSID=1234). However, it is my understanding (and please correct me if I am wrong) that PHP treats $_GET, $_SESSION and $GLOBALS as different types of variables when register_globals is set to off in php.ini, and therefor using ?PHPSESSID=1234 in a url request should not produce this problem.

I have tested the following script:

But I can't seem to reproduce the fixation of sessions on my server, and I assumed it is because I have register_globals set to off in my php.ini.
Am I wrong about this?
It seems important to know for sure.

0 投票
2 回答
679 浏览

php - 在 PHP 的登录脚本中放置 session_regenerate_id() 的位置

我正在创建一个登录脚本,当我想登录用户时,我需要知道我应该将 session_regenerate_id() 函数放在哪里。我这样做的方式是这样的:

登录函数基本上返回表中用户的自动增量 id,我将其存储在 $_SESSION 变量中,如上所示。我只展示了使用 Session 变量的逻辑部分,因为我只知道应该将 session_regenerate_id 放在哪里以避免会话固定攻击。在我赋值之前还是之后?

像这样:

或者之后,像这样:

谢谢你。