springMVC Unix 文件参数变更漏洞修复

错误信息如下:

解决方案:

原因:未对用户输入正确执行危险字符清理

未检查用户输入中是否包含"..."(两个点)字符串,比如 url 为 /login?action=.../webapps/RTJEKSWTN26635&type=randomCode

cookie为Cookie: JSESSIONID=.../webapps/RTJEKSWTN26241;

测试返回为200

解决办法:通过建立过滤器方法,增加对所有用户输入信息中是否包含".."(两个点)字符串进行清理过滤。

使用AppScan扫描之后可以通过这样的方式进行指定问题手动测试

使用过滤器过滤参数以及cookie中的.../

web.xml 配置拦截器

XML 复制代码
    <filter>
        <filter-name>InjectFilter</filter-name>
        <filter-class>com.fh.filter.InjectFilter</filter-class>
    </filter>

创建拦截器

java 复制代码
package com.fh.filter;

import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class InjectFilter implements Filter {
    private static Logger log = LoggerFactory.getLogger(InjectFilter.class);
    private static final String REG_EXP = "\\.\\./";
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain filterchain) throws IOException, ServletException {
        //判断是否有注入攻击字符
        HttpServletRequest req = (HttpServletRequest) request;
        boolean flag = injectInput(req, response);
        if (!flag) {
            return;
        } else {
            filterchain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {

    }

    /**
     * 判断request中是否含有注入攻击字符
     *
     * @param request
     * @return
     */
    public boolean injectInput(ServletRequest request, ServletResponse response) throws IOException {
        Enumeration e = request.getParameterNames();
        String attributeName;
        String attributeValues[];
        HttpServletRequest req = (HttpServletRequest) request;
        String cookie = req.getHeader("Cookie");
        if (!isSpecialChar(cookie, response)){
            return false;
        }
        while (e.hasMoreElements()) {
            attributeName = (String) e.nextElement();
            //不对密码信息进行过滤,一般密码中可以包含特殊字符
            if (attributeName.equals("username") || attributeName.equals("password")) {
                continue;
            }
            attributeValues = request.getParameterValues(attributeName);
            for (int i = 0; i < attributeValues.length; i++) {
                if (attributeValues[i] == null || attributeValues[i].equals(""))
                    continue;
                boolean flag = isSpecialChar(attributeValues[i], response);
                if (!flag){
                    return flag;
                }
            }
        }
        return true;
    }

    /**
     * 判断字符串中是否含有注入攻击字符
     */
    private boolean isSpecialChar(String value, ServletResponse servletResponse) throws IOException {
        Pattern pattern = Pattern.compile(REG_EXP);
        if (value == null) {
            return true;
        }
        Matcher matcher = pattern.matcher(value);
        if (matcher.find()) {
            log.info("入参中有非法字符: " + value);
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            Map<String, Object> responseMap = new HashMap<>();
            // 匹配到非法字符,立即返回
            responseMap.put("code", 500);
            responseMap.put("msg", "入参中有非法字符");
            response.setContentType("application/json;charset=UTF-8");
            response.setStatus(HttpStatus.OK.value());
            PrintWriter writer = response.getWriter();
            writer.write(JSON.toJSONString(responseMap));
            writer.flush();
            writer.close();
            return false;
        }
        return true;
    }
}
相关推荐
终端安全笔记1 小时前
配置锁状态那一栏查的是什么:报告里几项各自指向什么风险
android·前端·安全·ios
是真的小外套1 小时前
第19章:操作系统安全防护
安全
山东科恩光电2 小时前
安全触边缓冲防撞技术原理及其在AGV与工业移动设备中的应用解析
安全
EasyGBS10 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
迪康Defender11 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
jimmyleeee12 小时前
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南
人工智能·深度学习·安全
AI行业应用研究13 小时前
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性
大数据·人工智能·安全·小程序·架构·pdf
Mr.朱鹏13 小时前
科技周报(第2026-10-10期):GPT6与安全
科技·安全·chatgpt
看着博客敲代码13 小时前
No space left on device:服务器被 SSH 爆破到日志写满的完整排查与止血
linux·运维·服务器·安全·ssh
anxiao_m14 小时前
内外网文件交换如何兼顾安全与效率?2026企业工具选型攻略
运维·服务器·安全