1,XSS 攻击

  1. XSS攻击使用Javascript脚本注入进行攻击
  2. 例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端。
  3.  
  4. <script>alert('sss')</script>
  5. <script>window.location.href='http://www.itmayiedu.com';</script>
  6. 对应html源代码: &lt;script&gt;alert('sss')&lt;/script&gt;

因为浏览器默认支持脚本执行,提交表单时候,如果有脚本语言,可能就浏览器就直接执行了。

index.ftl:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="postIndex" method="post">
  9. 输入内容: <input type="text" name="name"> <br> <input
  10. type="submit">
  11. </form>
  12. </body>
  13. </html>

forward.ftl:

  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="postIndex" method="post">
  9. 输入内容: <input type="text" name="name"> <br> <input
  10. type="submit">
  11. </form>
  12. </body>
  13. </html>

controller:

  1. @Controller
  2. public class Index {
  3. @RequestMapping("/index")
  4. public String index() {
  5. return "index";
  6. }
  7.  
  8. // 接受頁面 參數
  9. @RequestMapping("/postIndex")
  10. public String postIndex(HttpServletRequest request) {
  11. request.setAttribute("name", request.getParameter("name"));
  12. return "forward";
  13. }
  14. }

当调用index 的方法,进入到index.ftl ,提交表单,进去到postIndex 的方法,找到forward 页面,页面渲染。

但是如果如果提交是脚本语言,可能就浏览器就直接执行了

 

解决方式:通过过滤器(拦截器),对请求进行拦截,然后对其中的参数中的特别字符进行特别转换成html 语言

例如:

<script>alert('sss')</script> 转成 &lt;script&gt;alert('sss')&lt;/script&gt 这样浏览器就不会把他们当成标签

重新封装HttpServletRequestWrapper,用来获取HttpServletRequest 请求的参数等

  1. /**
  2. * 功能说明:
  3. * 功能作者:
  4. * 创建日期:
  5. * 版权归属:每特教育|蚂蚁课堂所有 www.itmayiedu.com
  6. */
  7. package com.aiyuesheng.http;
  8.  
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletRequestWrapper;
  11. import org.apache.commons.lang.StringEscapeUtils;
  12. import org.apache.commons.lang.StringUtils;
  13.  
  14. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
  15. private HttpServletRequest request;
  16.  
  17. /**
  18. * @param request
  19. */
  20. public XssHttpServletRequestWrapper(HttpServletRequest request) {
  21. super(request);
  22. this.request = request;
  23. }
  24.  
  25. @Override
  26. public String getParameter(String name) {
  27. // 获取之前的参数
  28. String olValue = super.getParameter(name);
  29. System.out.print("原来参数:" + olValue);
  30. if (!StringUtils.isEmpty(olValue)) {
  31. olValue = StringEscapeUtils.escapeHtml(olValue);
  32. System.out.println("转换后" + olValue);
  33. }
  34. System.out.println();
  35. return olValue;
  36. }
  37.  
  38. }

过滤器:

  1. package com.aiyuesheng.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.annotation.WebFilter;
  12. import javax.servlet.http.HttpServletRequest;
  13.  
  14. import com.aiyuesheng.http.XssHttpServletRequestWrapper;
  15.  
  16. @WebFilter(filterName = "xssFilter", urlPatterns = "/*")
  17. public class XssFilter implements Filter {
  18.  
  19. public void init(FilterConfig filterConfig) throws ServletException {
  20.  
  21. }
  22.  
  23. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  24. throws IOException, ServletException {
  25. // 程序防止XSS攻击原理
  26. // 1. 使用过滤器拦截所有参数
  27. HttpServletRequest req = (HttpServletRequest) request;
  28. // 2.重新getParameter方法
  29. XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(req);
  30. // 放行程序,继续往下执行
  31. chain.doFilter(xssHttpServletRequestWrapper, response);
  32. }
  33.  
  34. public void destroy() {
  35.  
  36. }
  37.  
  38. }

启动类上加上@ServletComponentScan

在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.boot.web.servlet.ServletComponentScan;
  4.  
  5. @SpringBootApplication
  6. @ServletComponentScan
  7. public class App {
  8. public static void main(String[] args) {
  9. SpringApplication.run(App.class, args);
  10. }
  11. }

常见Web安全漏洞--------XSS 攻击的更多相关文章

  1. 【OWASP TOP10】2021年常见web安全漏洞TOP10排行

    [2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...

  2. 安全学习笔记-web安全之XSS攻击

    web安全之XSS攻击 XSS 即跨站脚本攻击,是 OWASP TOP10 之一.它的全称为 Cross-site scripting,因为 CSS 这个简称已经被占用表示为前端三剑客之一的CSS,所 ...

  3. 几个常见的漏洞(xss攻击 cookie未清除 nginx信息泄露)与处理方法

    项目在安全检查中发现很多问题,要求整改,其中就有最常见的xss攻击 漏洞描述 渗透测试人员检测到网站筛选框均存在反射型跨站脚本攻击,例如: "><script>alert( ...

  4. WEB安全测试之XSS攻击

    目录结构 1.背景知识 2.XSS漏洞的分类 3.XSS防御 4.如何测试XSS漏洞 5.HTML Encode 6.浏览器中的XSS过滤器 7.ASP.NET中的XSS安全机制 一.背景知识 1.什 ...

  5. Web 安全之 XSS 攻击与防御

    前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...

  6. 常见Web安全漏洞

    1.web安全常见攻击手段     xss  sql注入  防盗链  csrf  上传漏洞 2. 信息加密与漏洞扫描   对称加密 非对称加密 3. 互联网API接口安全设计 4. 网站安全漏洞扫描与 ...

  7. 记一次JAVA WEB项目解决XSS攻击的办法(亲测有效)

    什么是XSS攻击 简单来说,XSS 攻击是页面被注入了恶意的代码,度娘一大堆的东西,不想说 系统架构主要是SSM框架,服务层另外使用了DubboX.   为啥说这个,因为SpringMVC对于Xss攻 ...

  8. web安全之xss攻击

    xss攻击的全称是Cross-Site Scripting (XSS)攻击,是一种注入式攻击.基本的做法是把恶意代码注入到目标网站.由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会 ...

  9. web安全之XSS攻击原理及防范

    阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...

随机推荐

  1. jvm的运行参数

    1.我们为什么要对jvm做优化? 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负 ...

  2. 后渗透阶段之基于MSF的路由转发

    目录 反弹MSF类型的Shell 添加内网路由 MSF的跳板功能是MSF框架中自带的一个路由转发功能,其实现过程就是MSF框架在已经获取的Meterpreter Shell的基础上添加一条去往“内网” ...

  3. 用table类型布局一个新闻网页

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  4. 从零开始打造 Mock 平台 - 核心篇

    前言 最近一直在捣鼓毕设,准备做的是一个基于前后端开发的Mock平台,前期花了很多时间完成了功能模块的交互.现在进度推到如何设计核心功能,也就是Mock数据的解析. 根据之前的需求设定加上一些思考,用 ...

  5. 对于页面适配,你应该使用px还是rem

    css中的单位很多,%.px.em.rem,以及比较新的vw.vh等.每个单位都有特定的用途,比如当需要设置一个矩形的宽高比为16:9,并且随屏幕宽度自适应时,除了用%,其他单位是很难做到的.所以不存 ...

  6. Python学习之布尔和数字

    布尔有True和Flase两种值 数字0.None,以及元素为空的容器类对象都可视为False,反之为Ture.

  7. 学会了这些redis知识点,面试官会觉得你很nb(转自十年技术大牛)

    是数据结构而非类型 很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义.redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们 ...

  8. 死磕Lambda表达式(三):更简洁的Lambda

    我们都是阴沟里的虫子,但总还是得有人仰望星空.--<三体> 在之前的文章中介绍了Lambda表达式的基本语法和正确使用姿势,这次我来介绍一些Lambda更简洁的用法. 欢迎关注微信公众号: ...

  9. ajax4

    用jquery实现json jquery.ajax([settings]) type类型使用“POST”或者“GET”,默认使用get URL:发送请求地址 data:是一个对象,连同请求发送到服务器 ...

  10. XiaoQi.Study项目(二)

    一.EF Core 使用的补充 1) 创建 接口 IEFCoreService 2)   实现 接口 EFCoreService 3) 在Startup.cs 中注册 ef 服务 并在控制器中注入使用 ...