信息安全学习笔记--XSS
一、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的更多相关文章
- Web安全学习笔记 XSS上
Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...
- Web For Pentester 学习笔记 - XSS篇
XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...
- 信息安全学习笔记--CSRF
一.CSRF简介 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者“session riding”,通常缩写为CS ...
- XSS漏洞学习笔记
XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- ASP.Net开发基础温故知新学习笔记
申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 两千行PHP学习笔记
亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...
- 20145330第八周《Java学习笔记》
20145330第八周<Java学习笔记> 第十五章 通用API 通用API 日志:日志对信息安全意义重大,审计.取证.入侵检验等都会用到日志信息 日志API Logger:注意无法使用构 ...
随机推荐
- DotNetty 跨平台的网络通信库
长久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点, ...
- Jvm dump介绍与使用(内存与线程)
很多情况下,都会出现dump这个字眼,java虚拟机jvm中也不例外,其中主要包括内存dump.线程dump. 当发现应用内存溢出或长时间使用内存很高的情况下,通过内存dump进行分析可找到原因. 当 ...
- Redis 基础:Redis 配置
Redis 配置 Redis的配置文件位于Redis安装目录下,文件名为redis.conf.可以通过CONFIG命令查看或设置配置项.其语法为: # Redis CONFIG命令格式如下: > ...
- PostgreSQL窗口函数
窗口函数允许在查询的SELECT列表和ORDER BY子句中使用. 如果有排序,要保证唯一,否则会有下面的错误: 修改方式是:保证唯一,修改方法如下:
- 深入理解JAVA虚拟机JVM
深入理解JAVA虚拟机JVM Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.java之所以能实现一次编写到处执行,也就是因为jVM.原理:编 ...
- 【刷题】BZOJ 3514 Codechef MARCH14 GERALD07加强版
Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...
- Shell中[]里面的条件判断
1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当 ...
- 一步步创建第一个Docker App —— 1. 背景介绍
原文:https://docs.docker.com/engine/getstarted-voting-app/#/docker-stacks-and-services 你将会学习什么 本文创建 ...
- 设置Linux终端字体颜色
系统启动后,环境变量加载的顺序为:/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → /etc/bashrc 想要修改 ...
- BZOJ 3098 Hash Killer II
3098: Hash Killer II Description 这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题: 给你一个长度为N的字符串S,求有多少个不同的长度为L的子串. 子串 ...