之前由我负责维护的一个项目被检测出存在可能被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中的参数值。

  代码如下:

  定义拦截器

 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 filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new XSSHttpServletRequestWrapper((HttpServletRequest) request), response);
} @Override
public void destroy() { } }

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

 package com.jspxcms.core.support;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import org.apache.commons.lang3.StringEscapeUtils; public class XSSHttpServletRequestWrapper extends HttpServletRequestWrapper { public XSSHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
} @Override
public String getHeader(String name) {
return StringEscapeUtils.escapeHtml4(super.getHeader(name));
} @Override
public String getQueryString() {
return StringEscapeUtils.escapeHtml4(super.getQueryString());
} @Override
public String getParameter(String name) {
return StringEscapeUtils.escapeHtml4(super.getParameter(name));
} @Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if(values != null) {
int length = values.length;
String[] escapseValues = new String[length];
for(int i = 0; i < length; i++){
escapseValues[i] = "1";
}
return escapseValues;
}
return super.getParameterValues(name);
}
}

  

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

     <filter>
<filter-name>XssEscape</filter-name>
<filter-class>XXXXX.XSSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XssEscape</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

 

  简单的XSS防御就完成了。

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

  1. ddos cc攻击简单介绍(转)

    何为syn flood攻击: SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻 ...

  2. 前端安全系列(一):如何防止XSS攻击?

    原文:https://my.oschina.net/meituantech/blog/2218539 前端安全 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全 ...

  3. 转:前端安全之XSS攻击

    前端安全 原文链接:https://www.freebuf.com/articles/web/185654.html 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企 ...

  4. 如何防止XSS攻击?

    来自: https://www.freebuf.com/articles/web/185654.html 前端安全 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业 ...

  5. xss原理及简单介绍

    XSS简单介绍-Web攻击 一 ·基础介绍 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删 ...

  6. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  7. XSS(跨站脚本攻击)简单讲解

    1.1 XSS简介 跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞.这类漏洞能够使得攻击者嵌入恶意脚本代码(一般是JS代码)到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意 ...

  8. XSS攻击介绍

    一.概念 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞, ...

  9. bs4的简单应用之防止xss攻击和文本截断

    BeautifulSoup可以过滤html标签,根据这个功能我们可以防止xss攻击和进行文本过滤 1. 安装 pip install beautifulsoup4 2.导入.使用 from bs4 i ...

随机推荐

  1. 手动搭建I/O网络通信框架2:Socket和ServerSocket入门实战,实现单聊

    第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 在第一章中运用Socket和ServerSocket简单的实现了网络通信.这一章,利用BIO编程模型进行 ...

  2. python--django中一些有用的工具引入路径

    django.shortcuts render:渲染前端页面 redirect:跳转到其他页面 django forms:表单验证 # 定义 class Form(forms.Form): name ...

  3. 使用 python 进行身份证号校验

    使用 python 代码进行身份证号校验 先说,还有很多可以优化的地方. 1.比如加入15位身份证号的校验,嗯哼,15位的好像没有校验,那就只能提取个出生年月日啥的了. 2.比如判断加入地址数据库,增 ...

  4. 过滤器filter学习进度一

    过滤器filter他的理解是: filter是对客户端访问资源的过滤,符合条件放行,不符合条件的不放行,并且可以对目标资源访问的前后进行逻辑处理. 快速入门: 1.编写一个过滤器的类实现filter接 ...

  5. Exercise 1测试

    此篇博客旨在测试Exercise 1,发现其中问题并解决. 首先,我们使用codeblocks对Exercise 1进行编译.结果如下: 可以发现经编译后的Exercise 1并无编译错误,只有两个w ...

  6. JAVA中使用使Math 类操作数据

    转自:https://www.imooc.com/code/2342 侵删! Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用 ...

  7. Windows下Python3.6.2+Django-1.11.5+httpd-2.4.27-win64-VC14部署网站

    最近项目组正在上python+django.现在将部署过程总结下,相关文件也备份下,面得每次都要弄半天.网上很多不靠谱的做法,让我反复试错,浪费不少时间. 原材料: Python3.6.2 httpd ...

  8. 1.Git 安装

    Git的安装 阿里云镜像去下载 阿里云的镜像地址 卸载Git 1.首先在系统环境变量->path->里面去清理掉git相关的环境变量 2.然后控制面板卸载 安装Git 一直下一步即可 使用 ...

  9. Nexus3 集成 crowd 插件

    公司使用的软件开发和协作工具为 Atlassian 系列软件,所以统一使用 crowd 来实现统一登录(SSO). crowd 配置 具体操作细节见我之前写的 Atlassian 系列软件安装(Cro ...

  10. 2019CCPC-江西省赛(重现赛)- 感谢南昌大学

    A题: 题意: 给你两棵树,然后用一条边将这两棵树连接起来,然后计算 每两点之间的距离,然后求和,问这个和的最小值. 思路:根据重心的性质,树上的所有点到重心的距离最短,因此我们找到两棵树的重心,然后 ...