热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Springboot对应XSS漏洞类配置处理

前言:SpringBoot防Xss攻击,这几天自己学习了一下SpringBoot项目怎么预防Xss攻击,这里记录一下怎么防止Xss攻击的代

前言:SpringBoot防Xss攻击,这几天自己学习了一下SpringBoot项目怎么预防Xss攻击,这里记录一下怎么防止Xss攻击的代码,等以后有需要用到的话,自己可以快速找到

1. 什么是 XSS 漏洞?

XSS 攻击:跨站脚本攻击(Cross Site Scripting),为不和 前端层叠样式表(Cascading Style Sheets)CSS 混淆,故将跨站脚本攻击缩写为 XSS。

XSS(跨站脚本攻击)是指恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页时,嵌入其中 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。类似于 sql 注入。是目前最普遍的 Web 应用安全漏洞,也是 Web 攻击中最常见的攻击方式之一。

XSS( 跨站脚本攻击)攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 Javascript,但实际上也可以包括 Java、 Vbscript、ActiveX、 Flash 或者甚至是普通的 HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和 COOKIE 等各种内容。

2. XSS 漏洞攻击原理及攻击手段

HTML 是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是 HTML 标签的开始,之间的字符是页面的标题等等。

当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了 HTML 标签,当这些 HTML 标签引入了一段 Javascript 脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生 XSS 漏洞。

常用的 XSS 攻击手段和目的有:

1、盗用 COOKIE,获取敏感信息。

2、利用植入 Flash,通过 crossdomain 权限设置进一步获取更高权限;或者利用 Java 等得到类似的操作。

3、利用 iframe、frame、XMLHttpRequest 或上述 Flash 等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。

4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

5、在访问量极大的一些页面上的 XSS 可以攻击一些小型网站,实现 DDoS 攻击的效果。

最简单的 XSS 示例


复制

3. XSS 分类如下:


分类

主要特点

存储型 XSS

经过后端服务处理,数据存储在数据库端

反射型 XSS

经过后端服务处理,不存储数据库

DOM型 XSS

不经过后端服务处理,不存储数据库

4. XSS 漏洞分析

4.1 存储型 XSS

通过网页注入的代码最终会存储在数据库或其他物理文件中,在某个页面中注入的代码会被浏览器成功执行,该类型的漏洞存在持久性的特点。

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;public class XssStringJsonDeserializer extends JsonDeserializer {public XssStringJsonDeserializer() {}public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {String source = p.getText();if (StringUtils.isNotBlank(source)) {source = this.xssScriptReplace(source);return source;} else {return source;}}public String xssScriptReplace(String value) {if (value != null) {List regexList = new ArrayList();regexList.add("alert\\s*\\((.*?)\\)");regexList.add("expression\\s*\\((.*?)\\)");regexList.add("");regexList.add("");regexList.add("");regexList.add("");regexList.add("|(.*?)");regexList.add("eval\\s*\\((.*?)\\)");regexList.add("\\&#39;Javascript(\\s*):(.*?)\\&#39;|\\\"Javascript(\\s*):(.*?)\\\"");regexList.add("\\&#39;Vbscript(\\s*):(.*?)\\&#39;|\\\"Vbscript(\\s*):(.*?)\\\"");regexList.add("");regexList.add("(\\s+)onmouseover\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onmouseover\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onmouseout\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onmouseout\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onmousedown\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onmousedown\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onmouseup\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onmouseup\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onmousemove\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onmousemove\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onclick\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onclick\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)ondblclick\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)ondblclick\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onkeypress\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onkeypress\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onkeydown\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onkeydown\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onkeyup\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onkeyup\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)ondragstart\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)ondragstart\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onerrorupdate\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onerrorupdate\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onhelp\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onhelp\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onreadystatechange\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onreadystatechange\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onrowenter\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onrowenter\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onrowexit\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onrowexit\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onselectstart\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onselectstart\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onload\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onload\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onunload\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onunload\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onbeforeunload\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onbeforeunload\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onblur\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onblur\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onerror\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onerror\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onfocus\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onfocus\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onresize\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onresize\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onscroll\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onscroll\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)oncontextmenu\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)oncontextmenu\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onbounce\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onbounce\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onfinish\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onfinish\\s*=(\\s*)\\\"(.*?)\\\"");regexList.add("(\\s+)onstart\\s*=(\\s*)\\&#39;(.*?)\\&#39;|(\\s+)onstart\\s*=(\\s*)\\\"(.*?)\\\"");Pattern scriptPattern;for(Iterator var3 = regexList.iterator(); var3.hasNext(); value = scriptPattern.matcher(value).replaceAll(" ")) {String regex = (String)var3.next();scriptPattern = Pattern.compile(regex, 42);}}return value;}
}

推荐阅读
  • 跨站的艺术XSS Fuzzing 的技巧
    作者|张祖优(Fooying)腾讯云云鼎实验室对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做F ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 2月4日每日安全热点节日期间某企远程办公遭XRed攻击 ... [详细]
  • 通过存储型XSS漏洞获取目标用户本地私钥信息
    运维|安全存储型XSS漏洞,目标用户,本地,私钥信息运维-安全舍得网源码,vscode代码检查工具,ubuntu壁纸修改,tomcat网页部署项目,爬虫枯木,php采集文件,马鞍山 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • OWASP(安全防护、漏洞验证工具)开放式Web应用程序安全项目(OWASP,OpenWebApplicationSecurityProject)是一个组织 ... [详细]
author-avatar
Eosven_119
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有