搜索

首页  >  问答  >  正文

ajax - 关于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已变,是不是就阻止了?求达人,不胜感激

大家讲道理大家讲道理2830 天前477

全部回复(1)我来回复

  • 阿神

    阿神2017-04-10 14:37:25

    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}")
                },
    //后边的省略
     });
    

    回复
    0
  • 取消回复