我已经使用PHP创建了一个登录和注册系统.我打算使用随机数来防止重播攻击.到目前为止,我所拥有的是,使用(uniqid(mt_rand(),true))生成一个随机数;然后将其存储在数据库中,并将相同的数据在隐藏字段中传递给客户端,然后在单击登录按钮时将其发送回服务器端.如果它与数据库中的on匹配,则将用户重定向到私有页面,然后在数据库中生成并更新一个新的现时值.
这就是我打算实现的方式.但是我对执行情况不太确定.
解决方法:
<?PHP
session_start();
//Check nonce against session
if(isset($_POST) && $_POST["nonce"] === $_SESSION["csrf"]){
//save data
//redirect
}
//generate new nonce for form
$_SESSION["csrf"] = uniqid(mt_rand(),true);
?>
<form method="post" action="<?PHP echo $_SERVER['REQUEST_URI'] ?>">
<input type="hidden" name="nonce" value="<?PHP echo $_SESSION['csrf']; ?>"/>
<!-- other form fields -->
<!-- submit button -->
</form>