前言

以前都只是在各类文档中见到过XSS,也进行过相关的学习,但是都是一知半解,过了一段时间就忘了。

前几天我们收到了了一份标题为《XX账号昵称参数中存在存储XSS漏洞》的报告文档,来源是一个叫漏洞盒子的机构,看它的官方介绍,是一个互联网安全测试众测平台。

第一次在实际工作中遇到相关的问题,所以决定再系统的学习一下,此篇为学习记录。

XSS概念及分类

XSS 全称(Cross Site Scripting),直译过来就是跨站脚本攻击,是Web程序中最常见的漏洞。

有点类似于SQL注入,可以简单理解为“HTML注入”,把用户输入的数据当做脚本执行,进而达到想要的目的。而这种目的通常是恶意的,比如获取用户的Cookie,导航到恶意网站,携带木马等。

XSS攻击可以根据攻击发生的实时性分为以下几类:

反射型XSS(非持久性XSS)

简单说可充当执行脚本的恶意数据,由用户从“外部”输入,通过提交输入的方式“嵌入”到网页url中。

简单举例:

针对存在XSS攻击的某个网页输入框中输入“恶意数据”,并提交,通常,这类提交操作对应着一个get请求,当我们把这个请求发送给其他用户,并让用户在web浏览器中打开请求,这时就会把恶意数据当作脚本再次执行,比如发送cookie等信息到指定的邮箱等。

存储型XSS(持久型XSS)

类似反射型XSS,不同的是,其“恶意数据”本身就是包含在网页源码中、或者自动从服务器内部读取并“嵌入”网页中。

简单举例:

黑客在某个论坛写了一篇文章,并在文章中写入了用会充当脚本执行的数据,比如一段恶意javascript代码,这样所有浏览该文章的用户,都会自动在其浏览器中执行这段恶意代码。

非持久性XSS漏洞一般威胁的是用户个体,持久型XSS所威胁的对象可能是是大量的用户.

如何测试XSS漏洞

站在一个测试的角度,我们要怎么来对XSS漏洞进行测试呢?

方法一:

查看代码,查找关键的变量, 客户端将数据传送给Web 服务端一般通过三种方式 Querystring, Form表单,以及cookie. 例如在ASP的程序中,通过Request对象获取客户端的变量

<%
strUserCode = Request.QueryString(“code”);
strUser = Request.Form(“USER”);
strID = Request.Cookies(“ID”);
%>

假如变量没有经过htmlEncode处理, 那么这个变量就存在一个XSS漏洞

方法二:

准备测试脚本:

"/><script>alert(document.cookie)</script><!--
<script>alert(document.cookie)</script><!--
"onclick="alert(document.cookie)

在网页中的Textbox或者其他能输入数据的地方,输入这些测试脚本,看能不能弹出对话框,能弹出的话说明存在XSS漏洞

XSS漏洞修复

原则:不相信客户输入的数据

XSS之所以会发生, 是因为用户输入的数据变成了代码。所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号"、“单引号”、“引号”之类的特殊字符进行编码。

攻击代码不一定在<script></script>,所以要做好以下措施:

将重要的cookie标记为http only,  这样的话Javascript中的document.cookie语句就不能获取到cookie了.  

只允许用户输入我们期望的数据。
> 例如:年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。 对数据进行Html Encode 处理
过滤或移除特殊的Html标签,
> 例如: <script>, <iframe> , &lt; for <, &gt; for >, &quot for 过滤JavaScript 事件的标签。
> 例如 "onclick=", "onfocus" 等等。

处理建议

1、输入过滤:在用户输入的参数进行过滤,过滤掉’<’,’>’等符号,或者script,input,onerror等标签。

2、输出过滤:将用户输入内容作为页面内容的时候必须经过检测与过滤。使用HTMLEncode将以下特殊字符进行转码


参考资料:

https://github.com/yahoo/xss-filters

https://github.com/leizongmin/js-xss

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

http://blog.sina.com.cn/s/blog_13cc013b50102wm24.html

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞的更多相关文章

  1. 安全测试 web应用安全测试之XXS跨站脚本攻击检测

    web应用安全测试之XXS跨站脚本攻击检测 by:授客 QQ:1033553122 说明 意在对XSS跨站脚本攻击做的简单介绍,让大家对xss攻击有个初步认识,并能够在实际工作当中运用本文所述知识做些 ...

  2. XSS(跨站脚本攻击)漏洞解决方案

    首先,简单介绍一下XSS定义: 一 . XSS介绍 XSS是跨站脚本攻击(Cross Site Scripting)的缩写.为了和层叠样式表CSS(Cascading Style Sheets)加以区 ...

  3. 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击

    背景 这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧.主要分几个点来讲: 反射型 存储型 JSON XM 头部字段相关 分类介绍 反射型 在请求中构造了XSS的Payload,一般 ...

  4. Web攻防系列教程之跨站脚本攻击和防范技巧详解

    摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式.因为Web环境的复杂性以及XSS跨站脚本攻击的多变性,使得该类型攻击很 难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么 ...

  5. XSS (跨站脚本攻击) 的原理分析,测试 && 应对措施

    1 1 1 XSS (跨站脚本攻击) 的原理分析,测试 1 demo: <!DOCTYPE html> <html lang="en"> <head& ...

  6. web应用程序安全攻防---sql注入和xss跨站脚本攻击

    kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...

  7. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  8. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  9. xss(跨站脚本攻击),crsf(跨站请求伪造),xssf

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

随机推荐

  1. 最小树形图(poj3164)

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 12834   Accepted: 3718 ...

  2. oracle基础开发工具及常用命令

    oracle自带用户的讲解 1,oracle安装完毕创建数据库实例的时候会自动生成sys,system,scott 2,sys用户超级管理员,具有oracle的最高权限,具有sysdba角色,具有cr ...

  3. ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署

    堪称史上最详细的< ArcGIS forJavascript API 3.14本地部署>文档,有图有真相~~~ ---------环境:Windows server 2012R2,IIS ...

  4. CSRF攻击详解(转)

    原文:http://www.django-china.cn/topic/580/ 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称 ...

  5. 人人网张铁安:Feed系统架构分析(转)

    原文:http://www.csdn.net/article/2010-07-26/277273 继成功举办首期TUP活动后,日前在北京丽亭华苑酒店鸿运二厅,由CSDN和<程序员> 杂志联 ...

  6. java模拟网页http-url访问

    package com.iflytek; import java.io.InputStream; import java.net.HttpURLConnection; import java.net. ...

  7. [GDAL]编译64位GDAL1.10

    环境VS2010,swigwin-2.0.11 1. 打开nmake.opt文件,找到SWIG=swig.exe这一句,假如没有将swig的目录添加到环境变量中,那么将这句后面的swig.exe修改为 ...

  8. python 实现的比特币代码 及 加密货币学习线路图及书籍资料

    http://www.pycoind.org/ https://github.com/samrushing/caesure https://bitcointalk.org/index.php?topi ...

  9. Java系列介绍

    Java系列目录 重新编写equals()方法,hashCode()方法,以及toString(),提供自定义的相等标准,以及自描述函数 Java 7新增功能 Java应用程序中System.out. ...

  10. 史上最全的MonkeyRunner自动化测试从入门到精通(2)

    原文地址https://blog.csdn.net/liu_jing_hui/article/details/60955696 最基本脚本功能开始编写 (1)Monkeyrunner和Monkey的区 ...