我想知道这是否是一种设置令牌的安全方式,除非实际存在令牌,我生成一个令牌,并在整个应用程序和那些表单中使用它.每个会话一个令牌?
if (!isset($_SESSION['token'])) {
$data['token'] = uniqid(rand(), true);
session_regenerate_id();
$_SESSION['token'] = $data['token'];
}
Run Code Online (Sandbox Code Playgroud)
是否有必要在提交的表单上清除令牌?或者只是坚持下去,即使我提交了表格?
Ben*_*aap 10
我个人会为我想要显示的每个表单生成一个新令牌.如果你这样做,只要会话保持活动状态,有人只需要一个会话cookie来读取你的令牌并使用它.
在我的应用程序中,我为每个表单显示生成一个令牌,如下所示
<?php
$token = uniqid(rand(), true);
$_SESSION['csrf_tokens'][$token] = true;
Run Code Online (Sandbox Code Playgroud)
HTML
<form>
<input type="hidden" name="token" value="<?php echo $token ?>" />
</form>
Run Code Online (Sandbox Code Playgroud)
在表单验证时,我检查这个令牌是这样的:
if (isset($_SESSION['csrf_tokens'][$token]) && $_SESSION['csrf_tokens'][$token] === true) {
unset($_SESSION['csrf_tokens'][$token]);
// additional code here
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
999 次 |
最近记录: |