XSS攻击简单介绍

之前由我负责维护的一个项目被检测出存在可能被XSS攻击的漏洞。

吓得我赶紧恶补了下XSS。

XSS,全称为Cross Site Script,跨站脚本攻击,是WEB程序中一种常见的漏洞。其主要的攻击手段是在在利用网站上的可由用户输入信息的地方,恶意注入含有攻击性的脚本,达到攻击网站或者窃取用户cookied等隐私信息的目的。

XSS漏洞主要分为两种类型,一种是Stored XSS, 另一种是反射型 XSS。

第一种举个简单的例子就是BBS网站,黑客可以利用留言的功能,发表以下内容:

<script type="text/javascript"> alert("surprise") </script>

  对系统而言,它认为这和其他的留言一样都只是字符串。但是当有用户访问到这个页面时,浏览器会把这段留言当成html内容来解析。因此就执行了其中的js脚本。

而反射型 XSS则是利用点击链接或是提交一些内容来达到攻击的目的。

比如我有以下一个页面:

<form  name="formsearch" method="get">
        <div class="form">
           <input name="q" type="text" class="search-keyword" id="search-keyword"  />
          <button type="submit" class="search-submit blue-button">搜索</button>
        </div>
        </form>

  当用户在input框中输入:    "<script type="text/javascript"> alert(“surperise”) " 时。他也向浏览器插入了自己的JS脚本。

  当表单被提交时,输入的字符串被作为参数放在了URL中,传到下一个页面。

  当下一个页面需要显示这些内容,字符串中包含的攻击脚本也就被浏览器解释了出来。

  

  当然这段脚本只能在自己的浏览器执行,可能没有什么攻击性,但是黑客们会想尽办法伪装页面达到攻击的目的。

  总之,XSS攻击就是想办法让你的浏览器去执行他的脚本。

  那么XSS攻击该如何方法呢。

  既然是通过输入字符串达到植入脚本的目的,那么我们只要对用户输入的字符串进行一个处理就好了。

  我们可以利用org.apache.commons.lang3.StringEscapeUtils(注:3.6版本起,用commons-text包下的StringEscapeUtils代替)这个类对输入的参数进行html转义。

  

  可以定义一个过滤器,然后转义HttpServletRequest中的参数值。

  代码如下:

  定义拦截器

 1 import java.io.IOException;
 2
 3 import javax.servlet.Filter;
 4 import javax.servlet.FilterChain;
 5 import javax.servlet.FilterConfig;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.ServletRequest;
 8 import javax.servlet.ServletResponse;
 9 import javax.servlet.http.HttpServletRequest;
10
11 public class XSSFilter implements Filter {
12     @Override
13     public void init(FilterConfig filterConfig) throws ServletException {
14
15     }
16
17     @Override
18     public void doFilter(ServletRequest request, ServletResponse response,
19       FilterChain chain) throws IOException, ServletException {
20             chain.doFilter(new XSSHttpServletRequestWrapper((HttpServletRequest) request), response);
21     }
22
23     @Override
24     public void destroy() {
25
26     }
27
28
29 }

由于原生的HttpServletRequest不支持你直接修改参数,因此我们定义了一个包装类,在获取参数的时候对参数进行转义。

 1 package com.jspxcms.core.support;
 2
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletRequestWrapper;
 5
 6 import org.apache.commons.lang3.StringEscapeUtils;
 7
 8 public class XSSHttpServletRequestWrapper extends HttpServletRequestWrapper {
 9
10     public XSSHttpServletRequestWrapper(HttpServletRequest request) {
11         super(request);
12     }
13
14     @Override
15     public String getHeader(String name) {
16         return StringEscapeUtils.escapeHtml4(super.getHeader(name));
17     }
18
19     @Override
20     public String getQueryString() {
21         return StringEscapeUtils.escapeHtml4(super.getQueryString());
22     }
23
24     @Override
25     public String getParameter(String name) {
26         return StringEscapeUtils.escapeHtml4(super.getParameter(name));
27     }
28
29     @Override
30     public String[] getParameterValues(String name) {
31         String[] values = super.getParameterValues(name);
32         if(values != null) {
33             int length = values.length;
34             String[] escapseValues = new String[length];
35             for(int i = 0; i < length; i++){
36                 escapseValues[i] = "1";
37             }
38             return escapseValues;
39         }
40         return super.getParameterValues(name);
41     }
42 }

  

  最后我们在web.xml中配置我们的拦截器即可(将XXXX换成类的全限定名)。 

1     <filter>
2         <filter-name>XssEscape</filter-name>
3         <filter-class>XXXXX.XSSFilter</filter-class>
4     </filter>
5     <filter-mapping>
6         <filter-name>XssEscape</filter-name>
7         <url-pattern>/*</url-pattern>
8         <dispatcher>REQUEST</dispatcher>
9     </filter-mapping>  

 

  简单的XSS防御就完成了。

时间: 2024-10-24 23:02:24

XSS攻击简单介绍的相关文章

转:前段安全之XSS攻击

前端安全 原文链接:https://www.freebuf.com/articles/web/185654.html 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XSS.CSRF 等安全问题之外,又时常遭遇网络劫持.非法调用 Hybrid API 等新型安全问题.当然,浏览器自身也在不断在进化和发展,不断引入 CSP.Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁

xss原理及简单介绍

XSS简单介绍-Web攻击 一 ·基础介绍 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制. 二·分类 (一)持久型/存储型 非持久型xss攻击是一次性的,仅对当次的页面访问产生影响.非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的. 例一:

(转)SQL盲注攻击的简单介绍

转:http://hi.baidu.com/duwang1104/item/65a6603056aee780c3cf2968 1 简介     1.1 普通SQL注入技术概述     目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]:     (1) 脚本注入式的攻击     (2) 恶意用户输入用来影响被执行的SQL脚本     根据Chris Anley的定义[2], 当一个攻击者通过在查询语句中插入一系列的SQL语句来将数据写入到应用程序中,这种方法就可以定义

XSS攻击介绍

一.概念 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,也是web中最主流的攻击方式是指恶意攻击者利用网站没有多用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中而盗取用户资料 二.XSS攻击的危害 1.盗取各类用户帐号,如机器登录帐号.用户网银帐号.各类管理员帐号2.控制企业数据,包括读取.篡改.添加.删除企业敏感数据的能

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发

防御XSS攻击的七条原则

本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS Attack><DOM Based XSS> 攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它.对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用的敏感

WEB安全实战(三)XSS 攻击的防御

前言 上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响.那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全漏洞. 由于公司用的是 SpringMVC,因此,这次就主要基于 SpringMVC 来解决这些漏洞.当然,其实这些解决方案都是大同小异,对于什么环境来说根本无所谓.了解了原理,什么环境.什么语言都可以运用自如了.废话就不多说了,直接上解决方案. 解决方案 方案一 方案一主要是利用了 SpringMVC

使用 PHP 构建的 Web 应用如何避免 XSS 攻击

本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态内容进行编码.以及在服务器端对输入进行检测两方面介绍如何避免恶意的 XSS 攻击. 使用 PHP 构建的 Web 应用如何避免 XSS 攻击 Web 2.0 的发展为网络用户的互动提供了更多机会.用户通过在论坛发表评论,或是在博客发表留言都可能有意或无意输入一些破坏性的内容,从而造成网页不能正常显示

新浪微博XSS攻击事件

http://blog.csdn.net/terryzero/article/details/6575078 6月28日20时14分左右开始,新浪微博出现了一次比较大的XSS攻击事件.大量用户自动发送诸如:“郭美美事件的一些未注意到的细节”,“建 党大业中穿帮的地方”,“让女人心动的100句诗歌”,“3D肉团团高清普通话版种子”,“这是传说中的神仙眷侣啊”,“惊爆!范冰冰艳照真流出了”等等 微博消息和私信,并自动关注一位名为hellosamy的用户. 事件的经过线索如下: 20:14,开始有大量