gpt4 book ai didi

php - 防止一键式 Laravel 多次提交

转载 作者:行者123 更新时间:2023-12-04 00:04:39 27 4
gpt4 key购买 nike

在我提出这个问题之前,我使用 javascript 方法来防止在我的 Blade 模板上多次提交。但我知道客户端仍然可能受到攻击。

这是我的 javascript 代码

<script>
function submitForm(btn) {
// disable the button
btn.disabled = true;
// submit the form
btn.form.submit();
}
</script>

<input id="submitButton" type="button" value="Submit" onclick="submitForm(this);" />

我的问题是,是否有另一种方法可以防止在 laravel 中没有客户端?

最佳答案

保证表单提交唯一性的最直接方法(在阻止某人两次提交两次的意义上)是生成一个随机 token 并将其存储在 session 和隐藏字段中。

如果不匹配,则拒绝该表单,如果匹配,则接受该表单并取消 session key 。

或者

每次正确验证 token 后,强制 Laravel 重新生成新的 session token 。 (简单的办法)

为此,创建一个新函数 tokensMatch()app/Http/Middleware/VerfiyCsrfToken.php (这将覆盖继承的)。像这样的东西:

protected function tokensMatch($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

if (!$token && $header = $request->header('X-XSRF-TOKEN')) {
$token = $this->encrypter->decrypt($header);
}

$tokensMatch = hash_equals($request->session()->token(), $token);

if($tokensMatch) $request->session()->regenerateToken();

return $tokensMatch;
}

如果您验证表单并且验证失败,旧数据将被传递回表单。因此,您需要确保不要通过添加 _token 来回传旧 token 。到 $dontFlash app/Exceptions/Handler.php 中的数组
protected $dontFlash = ['password', 'password_confirmation', '_token'];

关于php - 防止一键式 Laravel 多次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50421591/

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