可以HttpOnly标志防止会话固定攻击吗?

时间:2017-07-13 14:45:41

标签: spring security spring-security session-cookies session-fixation

我需要在登录后保留会话ID。我的会话ID cookie被标记为HttpOnly。这样的设置绝对安全吗?如果我的会话cookie是HttpOnly,攻击者是否有可能执行会话固定攻击?

2 个答案:

答案 0 :(得分:0)

最好将会话cookie设为@SuppressWarnings("serial") public static class CustomeBorder extends AbstractBorder{ @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { super.paintBorder(c, g, x, y, width, height); Graphics2D g2d = (Graphics2D)g; g2d.setPaint(COLOR_BORDE_SIMPLE); Shape shape = new RoundRectangle2D.Float(0, 0, c.getWidth()-1, c.getHeight()-1,9, 9); g2d.draw(shape); } } ,因为它显然会使会话更安全。

避免会话固定漏洞的正确方法是在验证时为用户创建新会话。

查看有关session fixation的OWASP文章。它包含有关执行此类攻击的技术的信息。

答案 1 :(得分:0)

TLDR :是的,在PHP和Firefox中,可以添加第二个会话cookie,由于标题中的顺序,它比原始会话cookie更可取。 也可以,如果还有其他功能可以在服务器上设置会话ID。这取决于特定于应用程序的功能。

完整说明

取决于您网站上具有哪些其他功能来操纵会话。在极少数情况下,该应用程序允许用户通过HTTP请求设置会话。例如,通过GET参数。

我相信您想知道如果原始会话ID是通过HttpOnly标志在cookie中设置的,那么是否有可能修复会话ID。因此,我对正在进行渗透测试的PHP应用程序做了一个小测试。令人惊讶的是,您可以通过注入为XSS的JavaScript来设置新的PHPSESSID。如果已经存在带有HttpOnly标志的PHPSESSID cookie,则只需将其与另一个放在一起即可。就我而言,在Firefox中,在我尝试通过document.cookie =“ PHPSESSID = FIXATEDSESSIONID”设置PHPSESSID之后,它向服务器发送了以下Cookie:

Cookie: PHPSESSID=FIXATEDSESSIONID; __utma=139474299.465096418.1547461023.1548839033.1548851774.5; __utmz=139474299.1547461023.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); acceptCookies=true; 

因此,请求中现在有两个会话ID。在我的设置中,使用PHP 5.6.25,服务器使用 first cookie绑定会话。因此,对于Firefox和PHP 5.6.25,我可以通过JavaScript固定会话ID(FIXATEDSESSIONID)。原始会话ID仍在请求中,但服务器将忽略它。请注意,FIXATEDSESSIONID实际上是我注入的会话ID。因此,没有必要从PHP服务器获取合法的会话ID。