在我提出这个问题之前,我使用javascript方法来防止在我的刀片模板上多次提交。但我知道它的客户端仍然有可能受到攻击。
这是我的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没有客户端的情况下,有没有其他方法可以防止?
4条答案
按热度按时间vh0rcniy1#
保证表单提交唯一性的最直接方法(从阻止某人mashing submit两次的意义上来说)是生成一个随机令牌并将其存储在会话AND隐藏字段中。
如果不匹配,则拒绝表单,如果匹配,则接受表单并删除会话密钥。
或
强制Laravel在每次令牌被正确验证后重新生成一个新的会话令牌。
要实现这一点,在
app/Http/Middleware/VerfiyCsrfToken.php
中创建一个新函数tokensMatch()
(它将覆盖继承的函数)。如果您验证了表单,但是验证失败了,那么旧的数据将被传递回表单,因此您需要确保不传递回旧的令牌,方法是将
_token
添加到app/Exceptions/Handler.php
中的$dontFlash
数组protected $dontFlash = ['password', 'password_confirmation', '_token'];
dojqjjoe2#
步骤1:在表单标签Exp中写入一个类名:“防止多次提交”
第二步:在button区写一个类
步骤3:编写此脚本代码
8zzbczxx3#
给予ID以提交按钮
给予id
在您js中添加以下内容
368yc8dk4#
步骤1:为表单给予ID
第二步:给予id或添加类提交按钮
第3步:然后,您可以添加一些jquery脚本,如下所示
使用上面的代码,按钮将被禁用,并在用户单击按钮时显示指示器进度