2012-04-05 51 views
0

我目前正在构建自己的登录脚本,并且注意到大多数将会话ID或类似登录页面追加为get变量。为什么PHP登录脚本使用GET ID登出?

他们为什么这样做?

只是破坏logout.php上的会话并且不传入任何ID,这不仅仅是安全吗?

+1

你确定他们只在退出时执行此操作吗?大多数网站将sessid附加到获取请求上,以确保用户的会话在他们禁用(或不允许)cookie的情况下永久保存。 – 2012-04-05 16:10:52

+0

如果它不仅仅是注销页面,还包括所有页面,那么这是缓解跨站点脚本伪造风险的措施。在这里了解更多信息:http://en.wikipedia.org/wiki/Cross-site_request_forgery – Sahand 2012-04-05 16:11:50

回答

1

我想不出为什么他们需要添加一个get param只有在注销时才有任何理由。

向URL添加一些令牌可以用于prevent abuse或当会话ID被添加到url以使cookie在客户端出现disbled时也可以工作。

更新

linked article

但是,该文件的快速视图显示了一个相当有趣的问题。它要求通过登录计算的签名呈现给用户以提交到登录页面。 推测这是作为CSRF保护的一种形式完成的。 但是,它也泄漏了接收会话给用户所需的数据。因此,我们来到了我们11 漏洞至今:

UPDATE2

我问ircmaxell in chat。而且这是因为CSRF保护。

+0

示例将是这个人正在审查的一个: - http://blog.ircmaxell.com/2011/08/security-review -creating-secure-php.html – 2012-04-05 16:15:27

+0

@StephenAdrianRathbone他在[聊天](http://chat.stackoverflow.com/rooms/11/php)中闲置,为什么你不直接去源:) – PeeHaa 2012-04-05 16:22:56