2

当要求将来自 facebook sdk 的登录 urlstate保存在会话中以防止 CSRF 时,这是在FacebooksetPersistentData($key, $value)方法中完成的:

$session_var_name = $this->constructSessionVariableName($key);
$_SESSION[$session_var_name] = $value;

在那之后,我做了一个var_dump$_SESSION确保exit;它在那里并且没有任何东西可以改变$_SESSION数组。瞧,它就在那里:

...
'fb_451994004840680_state' => string '6de843508d52d3d4926275ab49280cef' (length=32)
...

所以我将index.php文件更改为

session_start();
var_dump($_SESSION);
exit;

并刷新。所有先前设置的会话元素都在那里,但不是 facebook state

所以我尝试了以下方法:我在setPersistentData($key, $value)方法中添加了另一个(虚拟状态)键:

$_SESSION[$session_var_name] = $value;
$_SESSION['fb_1234567890_state'] = '848a87592acd';
var_dump($_SESSION);
exit;

并且两者都直接在 var_dump 之后设置:

'fb_451994004840680_state' => string '6de843508d52d3d4926275ab49280cef' (length=32)
'fb_1234567890_state' => string '848a87592acd' (length=12)

在 index.php 中刷新和 var 转储后,只存在虚拟键:

'fb_1234567890_state' => string '848a87592acd' (length=12)


这怎么可能???

4

0 回答 0