CSRF安全漏洞修复

这篇具有很好参考价值的文章主要介绍了CSRF安全漏洞修复。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:csrf漏洞原理

使用burp进行拦截请求 然后使用csrf伪造进行请求伪造。

二:csrf修复原理

在每个请求中增加referer字段,如果没有这个字段则说明是伪造的请求。然后判断referer字段的域名和request的请求域名是否相同,如果不同则说明是伪造的请求。

三:修复代码

本处判断只判断接口,对页面进行放行(判断是否为页面的依据是接口的controller和请求页面的controller的继承类不同,接口的集成的类是AbstractAPIController, 页面的集成类是 AbstractController,这两个类是自己写的。),

package com.newcapec.sd.pubauth.interceptor;

import com.newcapec.core.controller.AbstractAPIController;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;

public class RefererInterceptor extends HandlerInterceptorAdapter {

    private String[] refererDomain = new String[]{"www.baidu.com", "www.newcapec.com.cn"};

    private String[] refererDomain_url = new String[]{"/sd-loginthird/third/ssologin", "/sd-open-platform", "/ueditor/imgUpload", "/sd-qxjgl", "/sd-oa", "/sd-oa-plus","/sd-loginthird/dingyong/callback","/sd-yxxt/register_face/v1"};

    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
        String referer = req.getHeader("referer");
        String host = req.getServerName();
        String req_url = req.getRequestURI();
        if ("POST".equals(req.getMethod()) || "GET".equals(req.getMethod())) {
            if (referer == null ) {
                if ("GET".equals(req.getMethod())){
                    if(handler instanceof HandlerMethod){
                        HandlerMethod hm = (HandlerMethod) handler;
                        if(AbstractAPIController.class.isAssignableFrom(hm.getBean().getClass())){
                            if (refererDomain_url != null) {
                                for (String s : refererDomain_url) {
                                    //访问的url在白名单中
                                    if (req_url.contains(s)) {
                                        return true;
                                    }
                                }
                            }
                            // 状态置为404
                            resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
                            return false;
                        }else{
                            return true;
                        }
                    }else{
                        return true;
                    }
                } else {
                    if (refererDomain_url != null) {
                        for (String s : refererDomain_url) {
                            //访问的url在白名单中
                            if (req_url.contains(s)) {
                                return true;
                            }
                        }
                    }
                    // 状态置为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(url.getHost())) {
                            return true;
                        }
                    }
                }
                //20210907看看是否在白名单url中
                if (refererDomain_url != null) {
                    for (String s : refererDomain_url) {
                        //访问的url在白名单中
                        if (s.equals(req_url)) {
                            return true;
                        }
                    }
                }
                return false;
            }
        }
        return true;
    }
}

除了这些还需要拦截器配置文章来源地址https://www.toymoban.com/news/detail-562233.html

package com.newcapec.sd.pubauth.interceptor;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.newcapec.core.utils.StringUtils;

@Component
public class InterceptorConfiguration extends WebMvcConfigurerAdapter {

    /** csrf请求白名单,在此白名单中的不进行拦截 */
    @Value("${com.newcapec.login.interceptor.exclude:}")
    private String exclude;
    
    
    /**只要涉及到菜单查询,该值就不能为空*/
    @Value("${com.newcapec.sd.default.systemcode:}")
    public String systemcode;

    /*是否开启 拦截器 ,默认 不开启 */
    @Value("${newcapec.multi.login.limited:false}")
    public boolean multiLoginLimited;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        RefererInterceptor refererInterceptor = new RefererInterceptor();
        // 设置是否进行拦截
        refererInterceptor.setMultiLoginLimited(multiLoginLimited);

        // Referer
        InterceptorRegistration ir3 = registry.addInterceptor(refererInterceptor);
        // 配置拦截的路径
        ir3.addPathPatterns("/**");
        if(StringUtils.hasText(exclude)){
            String[] exs =exclude.split(",");
            for(String e :exs){
                if(StringUtils.notText(e)){
                    continue;
                }
                ir3.excludePathPatterns(e);
            }
        }

    }
}

到了这里,关于CSRF安全漏洞修复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Goby 漏洞发布|天擎终端安全管理系统 YII_CSRF_TOKEN 远程代码执行漏洞

    奇安信天擎是奇安信集团旗下一款致力于一体化终端安全解决方案的终端安全管理系统(简称“天擎”)产品。奇安信天擎终端安全管理系统web部分使用yii框架 该版本框架自带反序列化入口点,攻击者可执行任意代码获取服务器权限。 奇安信天擎终端安全管理系统web部分使

    2024年02月16日
    浏览(51)
  • 24 WEB漏洞-文件上传之WAF绕过及安全修复

    safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些,在真实情况下现在很多网站都是用宝塔 Content-Disposition: 表单数据,一般可更改 name:表单参数值,不能更改,改完之后,数据包是有问题的,跟前端的表单值会对不上,这样后端会无法判断你上传的地方,如果要更改,那

    2024年02月10日
    浏览(50)
  • 跨站请求伪造 CSRF 漏洞原理以及修复方法

    漏洞名称 :跨站请求伪造(CSRF) 漏洞描述 : 跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CS

    2024年02月20日
    浏览(50)
  • Web网络安全-----Log4j高危漏洞原理及修复

    Web网络安全-----红蓝攻防之信息收集 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;

    2024年02月10日
    浏览(53)
  • 24 WEB漏洞-文件上传之WAF绕过及安全修复_阿里云盾waf绕过怎么修复

    目录 WAF绕过 上传参数名解析:明确哪些东西能修改? 常见绕过方法: `符号变异-防匹配(’ \\\" ;)` 数据截断-防匹配(%00 ; 换行) 重复数据-防匹配(参数多次) 搜索引擎搜索fuzz web字典 文件上传安全修复方案 WAF绕过 safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些,在真实情况下现

    2024年02月20日
    浏览(48)
  • 【web渗透】CSRF漏洞详细讲解

    💕💕💕 博主昵称:摆烂阳💕💕💕 🥰博主主页链接https://blog.csdn.net/qinshuoyang1?type=blog 👩‍💻 博主研究方向:web渗透测试 📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导 CSRF(Cross-Site Request Forgery),也被称为 one-click attack 或者 sess

    2023年04月08日
    浏览(32)
  • Web漏洞之CSRF(跨站请求伪造漏洞)详解

    我们知道了同源策略可以隔离各个站点之间的 DOM 交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了 Web。 这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三方资源 ,然后又引入 CSP 策略来加以限制;默认 X

    2024年02月03日
    浏览(58)
  • Web前端安全学习-CSRF

    今天下午上了一堂前端安全的课,挺有意思,记录下来。在上课之前,我对安全的概念是: 用户输入是不可信的,所有用户的输入都必须转义之后才入库。 然后,上面这个这种方式,仅仅是防止SQL注入攻击,避免业务数据库被渗入。 在数据库有了一层安全保护之后,攻击者

    2024年02月02日
    浏览(48)
  • 【Web 安全】CSRF 攻击详解

    文章目录(文章末尾有福利!!!) 一、CSRF 简介 二、CSRF 原理 三、CSRF 的危害 四、CSRF 的攻击类型 1. GET型 2. POST型 五、CSRF 的防御 1. 验证 HTTP Referer 字段 2. 在请求地址中添加 token 并验证 3. 在 HTTP 头中自定义属性并验证 六、WAF 防御 CSRF 参考链接 CSRF(Cross Site Request Forgery,

    2024年01月17日
    浏览(47)
  • 漏洞修复--Haxx curl 安全漏洞 (CVE-2020-8177)

    Haxxcurl是瑞典Haxx公司的一套利用URL语法在命令行下工作的文件传输工具。该工具支持文件上传和下载,并包含一个用于程序开发的libcurl(客户端URL传输库)。Haxxcurl7.20.0版本至7.71.0之前版本中存在安全漏洞。攻击者可利用该漏洞覆盖本地文件。 使用阿里云或者腾讯云的仓库

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包