关于thinkphp防止本地在提交时<form>中增加一个HASH值-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于thinkphp防止本地在提交时<form>中增加一个HASH值

为防止表单本地提交,thinkphp在每个form标签默认增加了一个32位的hash值,任何表单提交都要验证这个hash是否和服务器端的SESSION一致,但是,我如果采用的是Ajax怎么办?!该怎样防止用户本地提交恶意参数。
另外,thinkphp这种方式在验证完hash和SESSION一致后,立即销毁SESSION并重新生成一个新SESSION和hash值,那这种方法是不是对于GET方式的请求再刷新一次就无效了,比如一个网站的站内搜索功能:以GET方式提交参数:http://www.example.com/search.php?query=最好看的电影&hash=jf75zg93s5su56si8d63hd8km01jf737ey ,我再刷新一次,HASH值没变,但服务器SESSION已变,是不是就阻止了?求达人,不胜感激

展开
收起
落地花开啦 2016-06-16 11:42:23 2060 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    hash 应该是CSRF Token,只需要在ajax请求发送之前,即用绑定beforeSend事件处理,把token加到header里。

    比如:

    当使用ajax请求时,要在http头部设置’X-CSRF-Token’,值为服务端生成的token,比如

    jquery中发ajax并设置’X-CSRF-Token’

    $.ajax({
                type: "POST",
                url: _node.attr('href'),
                beforeSend: function(req) {
                  req.setRequestHeader('X-CSRF-Token', "#{csrf_token}")
                },
    //后边的省略
     });
    2019-07-17 19:40:39
    赞同 展开评论 打赏
问答分类:
相关产品:
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载