CSRF是什么?html
CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登陆目标网站以后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操做的请求,达到攻击目的。前端
开发实例浏览器
修改系统中遗留信息cookie
修改路径:http://xxx.xxx.xxx/member/editReservedInformation.jhtmlsession
参数:reservedInformation:'123'post
csrf攻击示例:网站
test.html.net
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是网站B</h1>
<form method="post" action="http://xxx.xxx.xxx/member/member/member/editReservedInformation.jhtml">
<input type="text" name="reservedInformation" value="999999">
<input type="submit" value="修改">
</form>
</body>
</html>3d
在攻击者获取到cookie时,经过test页面可用直接修改遗留信息orm
解决方案
1. 用户访问某个表单页面。
2. 服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。
3. 在页面表单附带上Token参数。
4. 用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。
这个Token的值必须是随机的,不可预测的。因为Token的存在,攻击者没法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽可能把敏感操做由GET改成POST,以form或AJAX形式提交,避免Token泄露。
注意:
CSRF的Token仅仅用于对抗CSRF攻击。当网站同时存在XSS漏洞时候,那这个方案也是空谈。因此XSS带来的问题,应该使用XSS的防护方案予以解决。
具体实现代码:
1.生产随机token值,并存入session
2.将token传给前端
3.修改信息时验证token