gpt4 book ai didi

php - 如何防止在PHP中多次点击提交多个表单

转载 作者:IT王子 更新时间:2023-10-29 00:15:04 26 4
gpt4 key购买 nike

如何在PHP中防止多次点击提交多个表单

最佳答案

使用每次显示表单时生成的唯一 token ,并且只能使用一次;防止CSRF也很有用和 replay攻击。一个小例子:

<?php
session_start();

/**
* Creates a token usable in a form
* @return string
*/
function getToken(){
$token = sha1(mt_rand());
if(!isset($_SESSION['tokens'])){
$_SESSION['tokens'] = array($token => 1);
}
else{
$_SESSION['tokens'][$token] = 1;
}
return $token;
}

/**
* Check if a token is valid. Removes it from the valid tokens list
* @param string $token The token
* @return bool
*/
function isTokenValid($token){
if(!empty($_SESSION['tokens'][$token])){
unset($_SESSION['tokens'][$token]);
return true;
}
return false;
}

// Check if a form has been sent
$postedToken = filter_input(INPUT_POST, 'token');
if(!empty($postedToken)){
if(isTokenValid($postedToken)){
// Process form
}
else{
// Do something about the error
}
}

// Get a token for the form we're displaying
$token = getToken();
?>
<form method="post">
<fieldset>
<input type="hidden" name="token" value="<?php echo $token;?>"/>
<!-- Add form content -->
</fieldset>
</form>

将它与重定向相结合,这样您就可以保持完美的后退和前进行为。查看POST / redirect / GET模式以获取有关重定向的更多信息。

关于php - 如何防止在PHP中多次点击提交多个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com