XSS 存储漏洞修复

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

收到检查报告,说是有xss 存储型漏洞,百度看了很多资料总结两句话
1、保存数据库内容需要过滤

2、设置过滤器

思路:我们需要一个过滤前在Controller方法调用前对所有参数进行检查,过滤替换。

过滤》替换非法参数》继续Controller调用。

网上得思路基本是替换,没看到拒绝请求,因为过滤得检查很多很容易被拒绝非常不友好

做法spring拦截器:检查非法内容或特定内容拒绝请求,使用sprintboot得做法很简单,做一个aop切面定义一个定义一个拦截器

        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.iwater.ishuidi.interceptor.EncodingInterceptor"/>
        </mvc:interceptor>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 字符集拦截器
 * 
 * @author victor
 * 
 */
public class EncodingInterceptor implements HandlerInterceptor
{
    
    /**
     * 在controller后拦截
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
        Exception exception)
        throws Exception
    {
    }
    
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object,
        ModelAndView modelAndView)
        throws Exception
    {
    }
    
    /**
     * 在controller前拦截
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object)
        throws Exception
    {
        这里检查判断,非法返回false、正常返回true继续
        return true;
    }
}

方法2过滤器过滤非法内容,三步处理:

步骤一、定义XssRequestWrappers类用来过滤请求非法内容

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
 
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class XssRequestWrappers extends HttpServletRequestWrapper {
    private CommonsMultipartResolver multiparResolver = new CommonsMultipartResolver();
 
    public XssRequestWrappers(HttpServletRequest request) {
        super(request);
 
        String type = request.getHeader("Content-Type");
        if (!StringUtils.isEmpty(type) && type.contains("multipart/form-data")) {
            MultipartHttpServletRequest multipartHttpServletRequest = multiparResolver.resolveMultipart(request);
            Map<String, String[]> stringMap = multipartHttpServletRequest.getParameterMap();
            if (!stringMap.isEmpty()) {
                for (String key : stringMap.keySet()) {
                    String value = multipartHttpServletRequest.getParameter(key);
                    striptXSS(key);
                    striptXSS(value);
                }
            }
            super.setRequest(multipartHttpServletRequest);
        }
    }
 
    @Override
    public String[] getParameterValues(String parameter) {
        String[] values = super.getParameterValues(parameter);
        if (values == null) {
            return null;
        }
        int count = values.length;
        String[] encodedValues = new String[count];
        for (int i = 0; i < count; i++) {
            encodedValues[i] = striptXSS(values[i]);
        }
        return encodedValues;
    }
 
    @Override
    public String getParameter(String parameter) {
        String value = super.getParameter(parameter);
        return striptXSS(value);
    }
 
    @Override
    public String getHeader(String name) {
        String value = super.getHeader(name);
        return striptXSS(value);
    }
 
    @Override
	public Map<String, String[]> getParameterMap() {
		Map<String, String[]> map1 = super.getParameterMap();
		Map<String, String[]> escapseMap = new HashMap<String, String[]>();
		Set<String> keys = map1.keySet();
		for (String key : keys) {
			String[] valArr = map1.get(key);
			if (valArr != null && valArr.length > 0) {
				String[] escapseValArr = new String[valArr.length];
				for (int i = 0; i < valArr.length; i++) {
					String escapseVal = striptXSS(valArr[i]);
					escapseValArr[i] = escapseVal;
				}
				escapseMap.put(key, escapseValArr);
			}
		}
 
		return escapseMap;
	}
	
    public static String striptXSS(String value) {
        if (value != null) {
 
            value = value.replaceAll("", "");      
            Pattern scriptPattern = Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("</script>", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
            value = scriptPattern.matcher(value).replaceAll("");
            scriptPattern = Pattern.compile(".*<.*", Pattern.CASE_INSENSITIVE );
            value = scriptPattern.matcher(value).replaceAll("");
        }
        return value;
    }
    
}

步骤二、定义过滤器监听XSSFilter 重写Filter

import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
public class XSSFilter implements Filter {
 
    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
 
    @Override
    public void destroy() {
    }
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(new XssRequestWrappers((HttpServletRequest) request), response);
 
    }
    
}

步骤三、配置web.xml 用于监听

  	<!-- 解决xss漏洞 -->
  <filter>
     <filter-name>xssFilter</filter-name>
     <filter-class>com.iwater.ishuidi.interceptor.XSSFilter</filter-class>
  </filter>

  <!-- 解决xss漏洞 -->
  <filter-mapping>
    <filter-name>xssFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>

以上三步完成启动测试,输入测试内容postman测试接口对非法字符得过滤结果

输出接口拿到得参数,看看非法参数是否没了文章来源地址https://www.toymoban.com/news/detail-458544.html

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

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

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

相关文章

  • 信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

    信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复) 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级) 信息服务上线渗透检测网络安

    2024年02月12日
    浏览(21)
  • 实战SRC|北京、上海等27省某x电力xx中心存在存储XSS漏洞

    实战SRC-存储XSS漏洞 不秃头的安全 我们在日常挖洞过程中,会遇到需要填写一堆个人或企业信息的页面,大多数情况下我们都会嫌麻烦,怕填写了半天最后也没挖到洞,从而忽略这种网站。其实这种网站恰恰更有可能存在漏洞,因为大多数渗透人员都嫌麻烦继而放弃,导致这

    2023年04月23日
    浏览(50)
  • Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞

    Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞 经过验证的攻击者可利用该漏洞在受攻击的设备上注入恶意软件并远程访问文件 Western Digital 感谢 Positive Technologies 专家 Nikita Abramov 发现 Western Digital NAS 固件中的一个漏洞。该漏洞可能导致在存

    2024年02月09日
    浏览(16)
  • 【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞

    分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全笔记 以pikachu靶场为例子进行讲解,pikachu靶场的搭建请参考以下博客; 【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)_网络安

    2024年02月08日
    浏览(18)
  • 【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

    常见概念 POC:全称 ’ Proof of Concept \\\',中文 ’ 概念验证 ’ ,常指一段漏洞证明的代码。 EXP:全称 ’ Exploit \\\',中文 ’ 利用 \\\',指利用系统漏洞进行攻击的动作。 Payload:中文 ’ 有效载荷 \\\',指成功exploit之后,真正在目标系统执行的代码或指令。 Shellcode:简单翻译 ’ she

    2024年02月05日
    浏览(24)
  • 【XSS漏洞-01】XSS漏洞原理和危害及验证与分类

    跨站脚本攻击——XSS(Cross Site Scripting),本应该缩写为CSS,但是该缩写已被层叠样式脚本Cascading Style Sheets所用,所以改简称为XSS。也称跨站脚本或 跨站脚本攻击 。指攻击者通过在web页面中写入恶意脚本,进而在用户浏览页面时,控制用户浏览器进行操作的攻击方式。假设

    2024年02月12日
    浏览(19)
  • xss跨站之waf绕过及安全修复(28)

    手工探针xss绕过waf规则 打开靶场  写入跨站测试语句发现拦截  这里就做一个最经典的方法,做一个拆分来确立拦截的是什么东西。 去掉最后字符串,访问还是拦截,再去掉alert(1),访问还是拦截,再去掉尖括号里面一个字符。留下scrtp在访问一下,还是拦截了,拿

    2024年02月13日
    浏览(20)
  • 修复富文本编辑器引起的XSS安全问题

    在平时使用的富文本编辑器中也会存在恶意输入JS脚本 使用js-xss 对文本进行过滤,删除掉可能存在的脚本 安装 NPM Bower 使用 在Node中使用 浏览器中使用 语法 xss 接收两个参数,第一个参数 HtmlString 需要被处理的 html 字符串,第二个参数 options 如何处理 hmtl 的配置项 项目中使

    2024年02月11日
    浏览(17)
  • XSS攻击(1), 测试XSS漏洞, 获取cookie

    一, 概念: XSS(Cross-Site Scripting), 跨站攻击脚本, XSS漏洞发生在前端, 依赖于浏览器的解析引擎, 让前端执行攻击代码. XSS其实也算注入类的攻击, XSS代码注入需要有JavaScript编程基础. 二, 目的: XSS(跨站脚本)攻击的目的多种多样,攻击者可以利用这种漏洞实施各种恶意行为。以下

    2024年02月07日
    浏览(27)
  • 【XSS漏洞-02】XSS的构造、变形及防御

    测试网站是否存在xss都是看是否能够让网站进行弹窗,所以我们得 构造特殊的语法 进行弹窗。 可以利用[]构造HTML标签和script标签, 使用JavaScript:伪协议的方式构造XSS,javascript:js代码 提交参数[ a href=\\\"javascript:alert(/xss/)\\\"touch me!/a ],点击超链接,即可触发XSS 修改参数[ a href=\\\"java

    2024年02月03日
    浏览(19)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包