漏洞之CSRF攻击

本文深入解析了CSRF(跨站请求伪造)攻击的原理及防范措施。CSRF是一种利用受信任用户身份发起恶意请求的安全威胁,不同于XSS攻击,它通过伪造受信任用户的请求来利用网站。文章详细介绍了CSRF的工作流程,包括如何通过恶意站点触发受信任网站上的敏感操作,并提出了多种防御策略,如检验Referer、使用token校验、限制HTTP方法和设置cookie为HttpOnly。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSRF (跨站请求伪造)

1. 什么是CSRF

CSRF,  跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性, 两者区别于CSRF是跨站请求, XSS是跨站攻击。但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。

CSRF通过伪装来自受信任用户的请求来利用受信任的网站。通俗的说就是攻击者利用了你的身份,发送了恶意请求。就好比黑客盗用了你的qq然后假装是你,骗你朋友要钱。(也可以理解为钓鱼网站)

 

2. CSRF原理

如上图所示,用户先登录网站A,然后访问恶意站点B,用户在恶意站点B中点击了一个链接,这个链接跳转回A网站的同时发送了一个恶意get请求,类似 http://www.***.com/test.php?para=***(恶意请求)。除了get请求外,webB也可以伪造post请求。

当个比方:

1)  假设某人A用支付宝向B付款的数据包为: 

     http://www.alipay.com/pay.php?name=sh&account=123456@qq.com&money=100

2)  而A正在阅览hacker伪造的博客, 博客首页中有代码:

     <script scr="http://www.alipay.com/pay.php?name=sh&account=123456@qq.com&money=100"></script>

3)  当A正在访问该伪造的博客, 且他的支付宝已处于登录状态, 会发生什么?

4)  结果是,  A会给用户sh的账号123456@qq.com转账100元  (当然支付宝不可能会出现这种漏洞, 这里只是打个比方)

也就是说,  当管理员正在登录且操作后台的时候,  这时候访问了某个网站,  这个网站中带有一些后台操作的数据包, 那么这时候就会已管理员的权限去操作后台。

 

3. 防范

  • 通过检验网页的来路:

        即Referer, 当网站A检测到当前Referer不是A的时候, 拒绝请求。在php中, 通过 $_SERVER[''SERVER_REFERER"]检          测来源

  • tolen校验:

       比如用户在访问webA时,会生成一个随机的token(保存在 Session 中),以后每次访问网站A时都带上token,服务端校         验token是否合法。因为token具有随机性,所以网站B就不能用普适的方法来伪造A的请求。token有各种实现方式,可         以放在请求参数中也可以放在请求头中。

  • 尽量使用post, 少用get:

        GET接口太容易被拿来做CSRF攻击,看上面示例就知道,只要构造一个img标签,而img标签又是不能过滤的数据。            接口最好限制为POST使用,GET则无效,降低攻击风险。
        当然POST并不是万无一失,攻击者只要构造一个form就可以,但需要在第三方页面做,这样就增加暴露的可能性。

  • 设cookie为httpOnly:

        CRSF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设                              置“HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造                  cookie的情况出现。
        比如, 在Java的Servlet的API中设置cookie为HttpOnly的代码如下:
    response.setHeader( "Set-Cookie", "cookiename=cookievalue;HttpOnly");

 

参考:

安全|常见的Web攻击手段之CSRF攻击

XSS攻击与CSRF攻击比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值