【发布时间】:2016-11-09 06:41:14
【问题描述】:
我目前有这两个功能,一个是生成token,一个是检查有效性:
function getToken() {
if(isset($_SESSION['token'])) {
return $_SESSION['token'];
} else {
$token = //random key generator goes here;
$_SESSION['token'] = $token;
return $token;
}
}
function validateToken($token) {
if ($token == getToken()){
return true;
} else {
return false;
}
}
我的注册表包含这个隐藏的输入:
<input type="hidden" name="token" value="<?php echo getToken(); ?>">
这样安全吗?我在问,因为如果合法用户的会话过期,然后他们在此注册表单中获得 CSRF,并且令牌由恶意站点/iframe 本身生成,因为会话中尚不存在令牌,因此验证就好了?
假设用户因为 cookie 而保持登录状态。
我在这里理解错了吗?像 iframe 这样的远程链接不能在您的后端生成会话吗?
【问题讨论】:
-
而且...会话比这更不安全,因为...?
-
@Machavity 抱歉,无法理解您要说的内容。我要问的是我的方法是否安全,因为我认为在与表单相同的页面中生成令牌有点违背目的,不是吗?
-
"在与表单相同的页面中生成令牌" --- 这是什么意思? CSRF 令牌必须是无法猜测的。这是对它的唯一要求。
标签: php session token csrf csrf-protection