用于令牌的openssl + random int,在表单操作方面存在问题

时间:2016-06-06 05:56:03

标签: php antiforgerytoken

我有这样的令牌功能:

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令牌功能。

0 个答案:

没有答案