2011-02-08 68 views
1

我目前使用的会话来处理用户的数据,例如:会话重新生成的好处?

  • 用户名
  • 密码
  • 名称
  • 权限

我想知道是一回事,如果数据在发送到会话之前被加密,会重新生成毫无意义?我目前已设置从TMP删除旧会话并创建一个新会话。

是否有人可以解释它是如何使我受益的?我发现他们喜欢使功能看起来非常重要,他们很赞赏文档! :)

+3

为什么要首先更改会话标识符或手动删除会话? PHP自己处理这个就好了... – 2011-02-08 04:24:29

回答

5

session_regenerate_id()实际上并没有防止会话固定。但是,至少应该在用户登录时调用它,以防止“通用”会话修复攻击(1,2)无法工作。

  1. 攻击者包括在URL中PHPSESSID=参数他发送到用户,设置(“行了吧”)浏览器的会话ID到一个已知的值。或者他可以从其他子域中设置会话cookie(例如,通过上传带有嵌入式JavaScript的HTML文件来实现)。
  2. 他等待用户在该会话下登录。
  3. 他使用已知的会话ID来劫持用户的帐户。

调用session_regenerate_id()可防止步骤3成功,因为攻击者在该点不再知道会话ID。

此外,由于子域可以为父域(也发送给其他子域)设置cookie,因此建议您将任何不受信任的内容托管在众所周知的TLD(如.com)中完全独立的域名上, .net.org。浏览器包含防止为这些TLD设置Cookie的黑名单(例如Public Suffix List)。

例如,exampleusercontent.com上的内容无法设置将发送到example.com的Cookie。