首页 > 其他分享 >跨站请求伪造(CSRF)攻击原理及预防手段

跨站请求伪造(CSRF)攻击原理及预防手段

时间:2024-07-09 16:58:45浏览次数:14  
标签:跨站 请求 攻击 用户 网站 Token CSRF 伪造

1、什么是跨站请求伪造?


CSRF(Cross-site Request Forgery,跨站请求伪造)攻击是一种常见的Web攻击,它利用用户在登录某个网站后的有效session来发送恶意请求。攻击者通过引导用户访问恶意网站,将用户的数据提交到目标网站,欺骗目标网站相信该请求是用户发送的。

CSRF攻击的关键是攻击者可以在不知情的情况下利用用户当前已登录的Web应用程序身份进行操作,而简单的身份验证只能证明请求是来自某个特定的用户,但无法证明请求是该用户自愿发出的,这是CSRF攻击能够成功的因素之一。

相比较XSS攻击而言,XSS攻击主要是通过向目标网站中注入恶意的脚本代码,利用用户对该网站的信任来获取用户数据。因此,它们之间的攻击方式确实有很大区别。

 

2、基本原理

举一个最简单的CSRF攻击例子:
用户A登录某在线电商网站B,保留cookie。
A在网站B上添加了一件价格为100元的商品到购物车,但是没有结账。
攻击者E诱导A访问危险网站C。
危险网站C上有一个表单,里面的“提交”按钮实际上是发起了向网站B的购物车结账请求,请求购买了一件价格为1000元的商品。
由于A的浏览器上有cookie,这样浏览器发出的结账请求就能得到响应执行。
这样A最终支付了1000元,而且她自己并不知情,这就是一个CSRF攻击的例子。
3、CSRF攻击的对象和预防思路
简单来说,为了防范CSRF攻击,我们需要保护那些可以对数据进行增删改操作的服务,比如说银行转账、添加商品到购物车、发表评论等。而对于那些只涉及数据读取、展示的服务,则不需要进行CSRF的保护。
在进行防范时,关键之处在于如何在请求中放入黑客所不能伪造的信息,以保证该请求来源的可靠性。常用的防范策略包括随机Token机制、Referer检查、限制HTTP方法等。这些策略旨在在请求中加入黑客难以制造的信息,让服务端能够验证请求的来源合法性并拒绝不合法的请求,从而有效防止CSRF攻击的发生。
4、预防手段介绍
随机化Token(CSRF Token):Token是用于验证网站请求者身份的一种机制,可以防止CSRF攻击。该Token会在每次访问页面时刷新,以确保每次请求都需要新的Token。例如,在web应用程序中,可以通过hidden field的方式将Token加入到表单中,提交时验
Referer检查:在服务端校验请求头中的Referer字段,确保请求是来自合法的来源页面,常用于辅助Token机制的验证。
Cookie SameSite 属性:应用于Cookie,防止跨站请求伪造攻击,避免恶意网站使用认证(sso)cookie 访问目标网站或者欺骗cookie 窃取用户数据。
限制cookies操作:不能在cookie中加入用户敏感信息,避免cookie的信息外泄。
明确HTTP方法:在服务端校验HTTP请求方法,确保请求的HTTP方法是明确的GET或POST,避免利用浏览器默认采用GET方法提交表单的漏洞情况的出现;
5、Referer检查简单实现

/**
 * CSRF - Referer 拦截器
 */
@Component
public class RefererInterceptor extends HandlerInterceptorAdapter {
    /**
     * 白名单 指定信任的地址
     */
    private String[] refererDomain = new String[]{"http://127.0.0.1:8080/","https://www.baidu.com/"};
    /**
     * 是否开启referer校验
     */
    private Boolean check =true;
 
 
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        if (!check) {
            return true;
        }
        String referer = req.getHeader("referer");
        String host = req.getServerName();
        // 可以设置判断过滤get或post请求等
        //if (!"GET".equals(req.getMethod())) {
            if (referer == null) {
                // 状态置为404
                resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
                return false;
            }
            java.net.URL url = null;
            try {
                url = new java.net.URL(referer);
            } catch (MalformedURLException e) {
                // URL解析异常,也置为404
                resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
                return false;
            }
            // 首先判断请求域名和referer域名是否相同
            if (!host.equals(url.getHost())) {
                // 如果不等,判断是否在白名单中
                if (refererDomain != null) {
                    for (String s : refererDomain) {
                        if (s.equals(String.valueOf(url))) {
                            return true;
                        }
                    }
                }
                return false;
            }
        //}
        return true;
    }
}

注册拦截器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Autowired
    private RefererInterceptor refererInterceptor;
    /**
     * 注册过滤器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(refererInterceptor).addPathPatterns("/**").excludePathPatterns("/", "/login", "/logout");
    }
}

 

标签:跨站,请求,攻击,用户,网站,Token,CSRF,伪造
From: https://www.cnblogs.com/chenxiaomeng/p/18292304

相关文章

  • Java token穷举id造假 jwt token伪造
    一、JWT简介1、简介JSONWebToken(JSONWeb令牌)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据 加密、签名......
  • 白帽工具箱:DVWA中CSRF攻击与防御的入门指南
    ......
  • DRF 前后端分离项目如何解决CSRF 数据交互
    ★背景说明在DjangoRESTframework(DRF)前后端分离项目中,解决CSRF问题通常有以下几种方法:1.禁用CSRF验证,但这会降低安全性。(不推荐)2.使用csrftokencookie3.在前端每次POST、PUT或DELETE请求前先发起一个GET请求(GET请求不需要经过CSRF检查)获取CSRFToken并将响......
  • CSRF攻击与修复
    基本原理受害者登录a.com,并保留了登录凭证(Cookie)。攻击者引诱受害者访问了b.com。b.com向a.com发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。a.com以受害者的名义执......
  • 什么是跨域请求未在攻击?浏览器在这方面做了哪些努力? 为什么随机UUID做token 可以解
    跨域请求伪造攻击(Cross-SiteRequestForgery,简称CSRF)是一种恶意攻击,其中攻击者诱使用户在已认证的会话中执行未授权的操作。通过在受害者访问的站点中嵌入恶意请求,攻击者可以利用用户的身份来执行一些用户未授权的操作,如转账、修改资料等。跨域请求伪造攻击(CSRF)攻击原理用户......
  • csrf跨站请求,钓鱼网站实现示例,CSRF校验,CSRF相关装饰器,Auth模块,扩展Auth表
    ⅠDjango框架之csrf跨站请求【一】跨站请求伪造介绍【1】引入CSRF(Cross-SiteRequestForgery)跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而......
  • flasksession伪造和jwt伪造
    flasksession伪造基本理论session是在服务端用来存储用户信息的,类似于来宾登记表,通过http报文中的cookie进行传递.由于flask轻量级的设计,因此session是存储在客户端的,因此也带来了flasksession伪造的风险.flask中的session通过app.secret_key=...来设置.flasksession通......
  • 20-OWASP top10--XXS跨站脚本攻击
    目录什么是xxs?XSS漏洞出现的原因XSS分类反射型XSS储存型XSSDOM型XSSXSS漏洞复现XSS的危害或能做什么?劫持用户cookie钓鱼登录XSS获取键盘记录 同源策略(1)什么是跨域(2)同源策略(3)同源策略修改(允许所有人跨域访问)XSS绕过简单的绕过方法 使用HTML进行编码绕......
  • 一封伪造电子发票的邮件攻击事件分析
    一、事件简述4月6日,收到一份邮件,来自名为:云发票<[email protected]>的邮件,主题为:***账户支取发票,邮件内容称寄来开具的充值电子发票,具体内容如下:尊敬的用户***你好您于2023年4月6日开具的充值电子发票,票据信息如下:開票日期:2023年4月6日發票金额:150.00¥发票代碼:1440......
  • 网络安全筑基篇——CSRF、SSRF
    前言本篇文章相对于来说比较水,大家看不懂的话,多去百度,去了解相关的知识大家一定要多去理解这个原理,理解的同时去打打靶场,就能很快上手啦什么是CSRF?CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面......