一、XSS简介

  XSS (Cross Site Scripting)是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。

二、XSS分类

  第一种:反射型XSS

  反射型XSS是最简单的XSS,即输入XSS脚本或输入XSS脚本点击按钮即可完成XSS攻击,同时也称作非持久型XSS。漏洞主要存在于URL地址栏,搜索框等。

  第二种:存储型XSS

  存储型XSS主要是将用户输入的“数据”存储在服务器端,该类型的攻击比较稳定,只要用户访问该数据就会被攻击,所以存储型XSS也叫做持久型XSS。该类型的漏洞主要存在于发帖,回帖评论等模块,以及用户注册等模块。跨站脚本

  第三种:DOM Based XSS

  通过修改页面的DOM节点来进行XSS。

三、XSS原理

  1.反射型XSS

  基本的检测脚本为“<script>alert(1)</script>”,或者为加上简单的HTML闭合语句如类似“><script>alert(1)</script><”的形式。

  主要存在漏洞的位置:

  (1)、URL地址栏

  如URL为“http://www.test.com/test.php?id=123”的形式,可能存在XSS,可以用加上检测语句如“<script>alert(1)</script>”、“><script>alert(1)</script><” 、“’><script>alert(1)</script><’”等来进行XSS检测。

  (2)、搜索框

  搜索框的检测方式同URL地址栏的检测方式基本一致,但是其中有一点不同就是如果需要闭合HTML标签时的语句有一些不一样。需要改变成类似“%'><script>alert(1)</script><'%'='”的语句,因为搜索框的闭合方式同一般的闭合有所差别。

  (3)、登录框

  登录框基本和URL地址栏是相同的,语句基本一致,如果不需要闭合标签则可直接输入“<script>alert(1)</script>”验证,如需要闭合标签则加上对应的闭合标签即可。

  2.存储型XSS

  存储型的XSS主要体现为论坛等地方,攻击者可以在论坛中发表包含有XSS代码的文章,用户一旦访问该文章就会遭受到攻击,所以这种攻击方式也被称为持久型攻击,存储型XSS的重点以及难点在于如何构造form表单,以及如何闭合form表单。

  简单的存储型XSS如在留言板中进行,如果不需要闭合标签,就可以直接用“<script>alert(1)</script>”这样的语句来进行验证,如果需要闭合,则可用类似“’><script>alert(1)</script><’”来进行验证。

  3.DOM Based XSS

  DOM Based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如URI ,location等。客户端脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM Based XSS漏洞。

  DOM Based XSS攻击源于DOM相关的属性和方法,被插入用于XSS攻击的脚本。一个典型的例子如下:

  HTTP请求"http://www.test.com/hello.html?name=test"使用以下的脚本打印出登录用户test的名字,即

  <SCRIPT>

    var pos=docmnent.URL.indexOf(“name=”)+5;

    document.write(document.URL.substring(pos,document.URL.length));

  </SCRIPT>

  如果这个脚本用于请求http//www.test.com/hello.html?name=<script>alert(1)</script>时,就导致XSS攻击的发生。当用户点击这个链接,服务器返回包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的document对象URL属性的值就是当前页而的URL。在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本却是JavaScript脚本,这使得<script>alert(1)</script>成为页面最终显示的HTML文本,从而导致DOM Based XSS攻击发生。

三、XSS防御

  1.启用HttpOnly

  启用HttpOnly并不能防止XSS,但可以有效的解决XSS攻击之后的cookie劫持问题。

  但是在Apache中支持的一个header是TRACE,可以绕过HttpOnly。

  2.输入检查

  常见的web漏洞如SQL注入,XSS都是攻击者构造一些特殊的字符,然后进行攻击,而这些字符正常用户是不会用到的。所以要对用户输入的数据进行过滤。比如注册时的电话,邮箱,生日等要有一定的规范。

  可以利用黑名单或白名单的方式。

  3.输出检查

  一般来说,除了富文本的输出之外,在变量输出到HTML页面之前,可以使用编码或转义的方式来防御XSS攻击。

  可以采用安全的编码函数、多种编码方式并存等方式来防御XSS。

  4.正确的预防XSS

  想要正确的预防XSS,必须要了解XSS的成因,造成XSS的罪魁祸首是变量,变量可以存在的场景有:在HTML标签中输出、在HTML属性中输出、在<script>标签中输出、在事件中输出、在CSS中输出、在地址中输出等。

  要严格检查这些地方的变量,以此来正确的预防XSS。

  5.处理富文本

  富文本主要是用户自定义的HTML代码,这种代码风险性比较高,处理富文本时,主要用到输入检查。而且在检查时应该使用白名单,避免使用黑名单。

  (通过学习和理解整理了关于XSS的知识,记录下来)

信息安全学习笔记--XSS的更多相关文章

  1. Web安全学习笔记 XSS上

    Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...

  2. Web For Pentester 学习笔记 - XSS篇

    XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...

  3. 信息安全学习笔记--CSRF

      一.CSRF简介   CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者“session riding”,通常缩写为CS ...

  4. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  5. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  6. ASP.Net开发基础温故知新学习笔记

    申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...

  7. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  8. 两千行PHP学习笔记

    亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...

  9. 20145330第八周《Java学习笔记》

    20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...

随机推荐

  1. Angular 动态组件

    Angular 动态组件 实现步骤 Directive HostComponent 动态组件 AdService 配置AppModule 需要了解的概念 Directive 我们需要一个Directi ...

  2. eclipse中添加配置文件夹config

    1. 在项目上右键->Build path->Configure Build Path->Source下的Add Folder,如图 2. 在弹出框中,Create New Fold ...

  3. JAVA相关概念(一)

    依赖注入和控制反转 首先,这两个词是同一个概念的不同角度的说法,依赖注入感觉是对描述了如何实现,而控制反转则像是描述了一种思想. 依赖注入的流行可以说是由spring的流行带动的,只要是做过sprin ...

  4. C语言中变量名及函数名的命名规则与驼峰命名法

    一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error  ...

  5. Windows下python 3.0版本django的安装、配置、与启动

    使用的环境是Windows操作系统,python的环境是3.6,django是官网上最新的版本1.10.6,本文介绍从安装python之后怎样用过pip管理工具安装django,以及django的项目 ...

  6. python中文档IO的读写

    首先明确一点,现代计算机的操作系统都不允许程序直接操作磁盘的,所以读取文件和写入文件都是有操作系统提供的提供的接口完成的,每一种编程语言都会把操作系统提供的低级C接口封装起来方便使用,Python也不 ...

  7. MT【148】凸数列

    (2018浙江省赛13题) 设实数$x_1,x_2,\cdots,x_{2018}$满足$x_{n+1}^2\le x_nx_{n+2},(n=1,2,\cdots,2016)$和$\prod\lim ...

  8. AGC019

    质量果然挺高的. A 贪心. ll Q,H,S,D,N; int main() { cin>>Q>>H>>S>>D>>N; H=min(H, ...

  9. PHP获取IP地址的方法,防止伪造IP地址注入攻击

    PHP获取IP地址的方法 /** * 获取客户端IP地址 * <br />来源:ThinkPHP * <br />"X-FORWARDED-FOR" 是代理 ...

  10. Android中View绘制优化

    1.优化布局层次 http://www.2cto.com/kf/201209/154108.html 2.使用<include />标签复用布局文件 http://www.2cto.com ...