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;
    }
}
相关推荐
优质网络系统领域创作者15 分钟前
思科(Cisco ASA/Firepower)、华三(H3C)、华为(Huawei USG)防火墙 的基础配置
安全
AORO_BEIDOU39 分钟前
防爆手机与普通手机有什么区别
人工智能·5g·安全·智能手机·信息与通信
码农飞哥41 分钟前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·数据库·spring boot·安全·微服务·消息队列·互联网医疗
AORO_BEIDOU2 小时前
遨游5G-A防爆手机:赋能工业通信更快、更安全
5g·安全·智能手机
Waitccy3 小时前
Linux 系统安全基线检查:入侵防范测试标准与漏洞修复方法
linux·运维·网络·安全·系统安全·等保
鸿蒙布道师4 小时前
宇树科技安全漏洞揭示智能机器人行业隐忧
运维·网络·科技·安全·机器学习·计算机视觉·机器人
神经毒素14 小时前
WEB安全--RCE--webshell bypass2
安全·web安全
Johnstons16 小时前
AnaTraf:深度解析网络性能分析(NPM)
前端·网络·安全·web安全·npm·网络流量监控·网络流量分析
网络空间小黑16 小时前
常见WEB漏洞----暴力破解
计算机网络·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
JoySSL证书厂商17 小时前
访问网站提示“不安全”“有风险”怎么办?
安全