hardywen/cookie-csrf

laravel4 自定义filter,用于防止表单多次提交及跨域提交表单

v0.2.1 2015-05-19 03:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:39:54 UTC


README

####改写laravel的csrf filter。原来的方式需要将token放入表单字段中一起提交,比较麻烦。重新改写一个cookie-csrf filter,功能如下: #####1. 将token放在cookie中(cookie_csrf_token)。不需要在每个表单中添加token字段,更方便使用。 #####2. 使用token后立即重新生成一个新的token,可以有效防止重复提交。

#安装

"hardywen/cookie-csrf": "v0.2.1" 添加到composer.json中

运行 composer update 命令进行安装

#配置 默认配置是:

//路由白名单,pattern通过的就调用此filter,用于设定哪些链接调用
    'white_list' => array(
        '*'
    ),

    //路由黑名单,pattern通过的就【不】调用此filter,用于排除哪些链接调用
    'black_list' => array(
        'orders/notify/*' // 支付回调之类的外站调用本站接口链接
    ),

    'method' => array(
        'post',
        'put',
        'delete'
    )

即所有路径的post、put、delete方法都进行cookie-csrf过滤。

你可以运行 php artisan config:publish hardywen/cookie-csrf 复制出配置文件,然后根据需要来配置。

route=>''时,则不自动使用cookie-csrf,你可以按需手动调用cookie-csrf过滤。

#其他

除了服务端进行防止重复提交之外,前端也应该使用js防止表单重复提交的设置。例如,防止jQuery ajax重复提交可以按照以下方式配置:

//setup ajax default options
        var formSubmitting = false; // 防止ajax重复提交
        $.ajaxSetup({
            beforeSend: function () {
                if (formSubmitting) {
                    return false;
                } else {
                    formSubmitting = !formSubmitting;
                }
            },
            complete: function (xhr, status) {
                formSubmitting = !formSubmitting;
            }
        });

jQuery的ajax配置,在每次进行ajax之前需要判断是否正在处理表单,如果是formSubmitting为true,则不再提交。等ajax完成后,再将formSubmitting改回false。

防止直接提交表单的方法如下(点击submit按钮后将其disable,就不能再次点击了):

//防止重复提交表单
        $("form").submit(function () {
            $(":submit", this).attr("disabled", "disabled");
        });
        ```