У меня есть функция токенов, как это:
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
затем base64_encode
Это. Это php
код для определения, если какая форма нажата.
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';
}
}
Теперь проблема в том, когда я пытаюсь нажать на кнопку sample1-sample3 мой token::check
ложно, но только sample4 делает token::check
иди правда. Кажется, что только последний form
будет иметь только правильный token
, Поэтому я ищу помощь, как выяснить, как заставить другой образец (1-3) стать правдой под token::check
Кстати md5(uniqid())
Функция токенов работает.
Задача ещё не решена.
Других решений пока нет …