📈
kaka
  • Kaliphp
  • 编码规范
  • 目录结构
  • 调用关系
  • 环境配置
  • 框架安装
  • 基础用法
  • 框架路由
  • 异步请求
  • Restful
  • 权限验证
  • 配置
  • 数据库使用
  • 请求类
  • 数组操作类
  • 模型类
  • 页面渲染
  • 缓存
  • Session
  • Cookie
  • 反XSS注入
  • 事件
  • 表单验证
  • 语言包
  • 调试
  • 脚本执行
  • 定时任务
  • Socket框架
Powered by GitBook
On this page

Was this helpful?

异步请求

异步请求包含POST,ajax等多种请求方式,系统会自动进行异步验证(csrf)及处理,框架提供了一整套csrf验证机制,默认开启,可通过在config/config.php中将'csrf_token_on' => false关闭。

'request' => [
    'csrf_token_on'     => false,               // 是否开启令牌验证
    'csrf_token_name'   => 'csrf_token_name',   // 令牌验证的表单隐藏字段名称
    'csrf_token_reset'  => true,                // 令牌验证出错后是否重置令牌 默认为true
    'csrf_cookie_name'  => 'csrf_cookie_name',  // 令牌存放的cookie名称
    'csrf_expire'       => 86400,               // 令牌过期时间,一天
    'csrf_white_ips'    => [                    // csrf IP白名单
        '127.0.0.1/24'
    ],
    'csrf_exclude_uris' => [                    // csrf URL白名单
    ], 
]

当csrf验证开启时,前端ajax请求需要预先加载引用static/frame/js/main.js文件,ajax提交时,系统会在请求头自动加上验证字段。

//ajax.js
jQuery(document).ajaxSend(function(event, xhr, settings) {
    function getCookie(name) {
        var reg = new RegExp("(^| )" + name + "(?:=([^;]*))?(;|$)"),
            val = document.cookie.match(reg);
        return val ? (val[2] ? unescape(val[2]) : "") : null;
    }
    if (typeof xhr.setRequestHeader == "function") {
        if (getCookie('csrf_cookie_name')) {
            xhr.setRequestHeader('X-CSRF-TOKEN', getCookie('csrf_cookie_name'));
        }
    }
});

POST请求同样也会触发csrf验证,需要在form中添加如下数据字段:

<!-- 加在form中提交 -->
<input type="text" name="_csrf" hidden value="<{form_token type="token"}>"/>
<!-- 或直接传form参数通过smarty生成一个完整的input -->
<{form_token type="form"}>

同样也可以在js中获取(前提是引用static/frame/js/main.jsJS文件),加在POST参数中即可。

var _csrf = getCookie('csrf_cookie_name');
Previous框架路由NextRestful

Last updated 4 years ago

Was this helpful?