我有这样的令牌功能:
public static function create() {
$int = random_int(8, 64);
$ssl = openssl_random_pseudo_bytes(32);
$base64 = base64_encode($ssl);
return Session::put(Config::get('session/token_name'), trim($base64, '='));
}
我的令牌功能正在运行,当我现在在多个forms
上尝试它时会出现问题注意:同一页
这是我的表单(例如,我只更改了名称,但是我的代码名称):
<form method="post">
<input type="hidden" name="t_sample1" value="<?php echo Token::make(); ?>">
<button name="btn1">sample1</button>
</form>
<form method="post">
<input type="hidden" name="t_sample2" value="<?php echo Token::make(); ?>">
<button name="btn2">sample2</button>
</form>
<form method="post">
<input type="hidden" name="t_sample3" value="<?php echo Token::make(); ?>">
<button name="btn3">sample3</button>
</form>
<form method="post">
<input type="hidden" name="t_sample4" value="<?php echo Token::make(); ?>">
<button name="btn4">sample4</button>
</form>
然后,我只是尝试这种令牌风格,因为我改变了我的令牌功能md5(uniqid())
样式,因为他们说它不安全,我读了很多专家提示,然后说openssl
然后{ {1}}它。这是用于确定是否点击了哪种表单的base64_encode
代码。
php
}
现在问题是,当我尝试点击按钮 sample1-sample3 时,我的if(Input::exists()) {
if(Token::check(Input::get('t_sample1'))) {
$echo = 'sample1';
}
if(Token::check(Input::get('t_sample2'))) {
$echo = 'sample2';
}
if(Token::check(Input::get('t_sample3'))) {
$echo = 'sample3';
}
if(Token::check(Input::get('t_sample4'))) {
$echo = 'sample4';
}
为false,但只有sample4执行token::check
实现。似乎只有最后一个token::check
才会有正确的form
。所以我正在寻找帮助如何弄明白如何使token
下的其他样本(1-3)成为现实,顺便提一下token::check
令牌功能。