安全扫描问题——csrf跨站点请求伪造

CSRF是什么?

CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

开发实例

修改系统中遗留信息

修改路径:http://xxx.xxx.xxx/member/editReservedInformation.jhtml

参数:reservedInformation:'123'

csrf攻击示例:

test.html

<!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>

 

在攻击者获取到cookie时,通过test页面可用直接修改遗留信息

 

解决方案

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

 

 

 

posted @ 2019-10-29 15:35  ZMJ笔记  阅读(304)  评论(0编辑  收藏  举报