防止一次提交多个文件laravel

7dl7o3gd  于 2023-02-10  发布在  其他
关注(0)|答案(4)|浏览(149)

在我提出这个问题之前,我使用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没有客户端的情况下,有没有其他方法可以防止?

vh0rcniy

vh0rcniy1#

保证表单提交唯一性的最直接方法(从阻止某人mashing submit两次的意义上来说)是生成一个随机令牌并将其存储在会话AND隐藏字段中。
如果不匹配,则拒绝表单,如果匹配,则接受表单并删除会话密钥。

强制Laravel在每次令牌被正确验证后重新生成一个新的会话令牌。
要实现这一点,在app/Http/Middleware/VerfiyCsrfToken.php中创建一个新函数tokensMatch()(它将覆盖继承的函数)。

protected function tokensMatch($request)
{
    $tokensMatch = parent::tokensMatch($request);

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

    return $tokensMatch;
}

如果您验证了表单,但是验证失败了,那么旧的数据将被传递回表单,因此您需要确保不传递回旧的令牌,方法是将_token添加到app/Exceptions/Handler.php中的$dontFlash数组
protected $dontFlash = ['password', 'password_confirmation', '_token'];

dojqjjoe

dojqjjoe2#

步骤1:在表单标签Exp中写入一个类名:“防止多次提交”

<form class="pt-4 from-prevent-multiple-submits" action="{{ route('messages.store') }}" method="POST">
            @csrf

第二步:在button区写一个类

<button type="submit" id="submit" class="btn btn-primary from-prevent-multiple-submits">{{ translate('Send') }}</button>

步骤3:编写此脚本代码

<script type="text/javascript">
(function(){
$('.from-prevent-multiple-submits').on('submit', function(){
    $('.from-prevent-multiple-submits').attr('disabled','true');
})
})();
</script>
8zzbczxx

8zzbczxx3#

给予ID以提交按钮

<input class="main-btn" id="register" type="submit" value="Make Appointment">

给予id

<form id="appointment_form" method="post" action="{{route('appointment')}}">

在您js中添加以下内容

$('#appointment_form').on('submit', function () {
   $('#register').attr('disabled', 'true'); 
});
368yc8dk

368yc8dk4#

步骤1:为表单给予ID

<form action="{{ route('web.reports.store') }}" method="POST" enctype="multipart/form-data" id="kt_stepper_form">

第二步:给予id或添加类提交按钮

<button type="submit" class="btn btn-primary submit-btn" data-kt-stepper-action="submit">
    <span class="indicator-label">
        Submit
    </span>
    <span class="indicator-progress">
        Please wait... <span
            class="spinner-border spinner-border-sm align-middle ms-2"></span>
    </span>
</button>

第3步:然后,您可以添加一些jquery脚本,如下所示

$('#kt_stepper_form').on('submit', function(){
    $('.submit-btn').attr('disabled', true);
    $('.indicator-label').hide();
    $('.indicator-progress').show();
});

使用上面的代码,按钮将被禁用,并在用户单击按钮时显示指示器进度

相关问题