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

news/2024/12/27 22:54:44/

错误信息如下:

 

 解决方案:

原因:未对用户输入正确执行危险字符清理
未检查用户输入中是否包含“…”(两个点)字符串,比如 url 为 /login?action=…/webapps/RTJEKSWTN26635&type=randomCode
cookie为Cookie: JSESSIONID=…/webapps/RTJEKSWTN26241;
测试返回为200

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

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

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

web.xml 配置拦截器

    <filter><filter-name>InjectFilter</filter-name><filter-class>com.fh.filter.InjectFilter</filter-class></filter>

 创建拦截器

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 = "\\.\\./";@Overridepublic 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);}}@Overridepublic 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;}
}

 


http://www.ppmy.cn/news/1050353.html

相关文章

python绘制谷歌地图

谷歌地图 更多好看的图片见pyecharts官网 import pyecharts.options as opts from pyecharts.charts import MapGlobe from pyecharts.faker import POPULATIONdata [x for _, x in POPULATION[1:]] low, high min(data), max(data)c (MapGlobe().add_schema().add(mapty…

【【萌新的STM32学习-13之GPIO寄存器的用法】】

萌新的STM32学习-13之GPIO寄存器的用法 从外部来看我们有很多个GPIO 分为ABCDEF等等 每个GPIO都有&#xff11;&#xff16;个引脚 每个引脚的名字是PA&#xff10;到PA&#xff11;&#xff15; 这是外部的看法 对于内部 引脚自然会有引脚的功能传入的模式 状态 频率 等…

【Leetcode Sheet】Weekly Practice 3

Leetcode Test 833 字符串中的查找与替换(8.15) 你会得到一个字符串 s (索引从 0 开始)&#xff0c;你必须对它执行 k 个替换操作。替换操作以三个长度均为 k 的并行数组给出&#xff1a;indices, sources, targets。 要完成第 i 个替换操作: 检查 子字符串 sources[i] 是否…

卷积神经网络——下篇【深度学习】【PyTorch】

文章目录 5、卷积神经网络5.10、⭐批量归一化5.10.1、理论部分5.10.2、代码部分 5.11、⭐残差网络&#xff08;ResNet&#xff09;5.11.1、理论部分5.11.2、代码部分 话题闲谈 5、卷积神经网络 5.10、⭐批量归一化 5.10.1、理论部分 批量归一化可以解决深层网络中梯度消失和…

AlpacaFarm: A Simulation Framework for Methods that Learn from Human Feedback

本文是LLM系列文章&#xff0c;针对《》的翻译。 AlpacaFarm:从人类反馈中学习方法的模拟框架 摘要1 引言2 背景与问题描述3 构造AlpacaFarm4 验证AlpacaFarm模拟器5 AlpacaFarm的基准参考方法6 相关工作7 不足和未来方向 摘要 像ChatGPT这样的大型语言模型由于能够很好地遵循…

用java语言写一个网页爬虫 用于获取图片

以下是一个简单的Java程序&#xff0c;用于爬取网站上的图片并下载到本地文件夹&#xff1a; import java.io.*; import java.net.*;public class ImageSpider {public static void main(String[] args) {// 确定要爬取的网站URL和本地保存目录String url "https://www.…

Electron+Vue3+TS 打包exe客户端

Electron Vue3 TS 实战 - 掘金 如果报错loaderContext.getOptions is not a function ts-loader版本不一致导致的问题。 解决方案&#xff1a;npm install ts-loader8.0.0 --save

R package org.Hs.eg.db to convert gene id

文章目录 install使用org.Hs.egENSEMBL将Ensembl id convert to gene idorg.Hs.egGENENAME 将Ensembl id convert to gene nameorg.Hs.egSYMBOL 将 gene symbol convert to gene id我现在有一些ensembl id 如何转为 gene name注意你会遇到一些record不全的情况&#xff0c;gtf文…