欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

ajax - 关于thinkphp防止本地在提交时
中增加一个HASH值

程序员文章站 2022-05-04 20:05:54
...
为防止表单本地提交,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已变,是不是就阻止了?求达人,不胜感激

回复内容:

为防止表单本地提交,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已变,是不是就阻止了?求达人,不胜感激

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}")
            },
//后边的省略
 });
相关标签: php ajax