模拟登陆 ajax post请求 403错误

今天发现用ajax post提交数据的时候报了一个 403的错误,

前台 : 

$.ajax({
		        type: "post",
				cache: false,
		        url: ctx + "/base/alter",
		        data:$('#registerForm').serialize(),
		        success: function(data) {
		            alert(data);
					window.location.reload();
		        },
		        error: function() {		        	
		        alert("服务器异常");
		        }
		        
		    });

 

后台:

	@RequestMapping(value = "/alter",method= RequestMethod.POST)
	@ResponseBody
	public JSONObject alterMember(@ModelAttribute("member") Member member) {
       
       return null;
	}

然后自己用chrome 跟踪了下,

121956_2w2T_2483310.png

122019_O7ci_2483310.png

122056_Q36c_2483310.png

发现参数信息都没错

继续跟踪

122811_Md7v_2483310.png

标红的提示,立刻就知道问题所在了 。

然后百度下 csrf科普了下自己的知识

CSRF 是什么?
Cross-site request forgery 跨站请求伪造,也被称为 “one click attack” 或者 session riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用。CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。

CSRF 攻击类似 XSS 攻击,都是在页面中嵌入特殊部分引诱或强制用户操作从而得到破坏等的目的,区别就是迫使用户 访问特定 URL / 提交表单 还是执行 javascript 代码。

为什么叫 跨站请求 攻击?
从字面意思就可以理解:当你访问 fuck.com 黑客页面的时候,页面上放了一个按钮或者一个表单,URL/action 为 http://you.com/delete-myself,这样引导或迫使甚至伪造用户触发按钮或表单。在浏览器发出 GET 或 POST 请求的时候,它会带上 you.com 的 cookie,如果网站没有做 CSRF 防御措施,那么这次请求在 you.com 看来会是完全合法的,这样就会对 you.com 的数据产生破坏。

如何防止 CSRF ?
CSRF 主流防御方式是在后端生成表单的时候生成一串随机 token ,内置到表单里成为一个字段,同时,将此串 token 置入 session 中。每次表单提交到后端时都会检查这两个值是否一致,以此来判断此次表单提交是否是可信的。提交过一次之后,如果这个页面没有生成 CSRF token ,那么 token 将会被清空,如果有新的需求,那么 token 会被更新。

攻击者可以伪造 POST 表单提交,但是他没有后端生成的内置于表单的 token,session 中有没有 token 都无济于事。

解决方法:

 jsp  页面中加上

<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>

js 中加上

$(function () {
	var token = $("meta[name='_csrf']").attr("content");
	var header = $("meta[name='_csrf_header']").attr("content");
	$(document).ajaxSend(function(e, xhr, options) {
		xhr.setRequestHeader(header, token);

	});
});

 

 

 

 

 

转载于:https://my.oschina.net/hetianqi/blog/709526

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值