首页 > 后端开发 > php教程 > ajax - 关于thinkphp防止本地在提交时<form>中增加一个HASH值

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

WBOY
发布: 2016-06-06 20:48:11
原创
1261 人浏览过

为防止表单本地提交,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’

<code>$.ajax({
            type: "POST",
            url: _node.attr('href'),
            beforeSend: function(req) {
              req.setRequestHeader('X-CSRF-Token', "#{csrf_token}")
            },
//后边的省略
 });
</code>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板