Web安全漏洞分析-XSS(上)
随着互联网的迅猛发展,Web应用的普及程度也愈发广泛。然而,随之而来的是各种安全威胁的不断涌现,其中最为常见而危险的之一就是跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS攻击一直以来都是Web安全领域的重点关注对象,其危害程度不可小觑。
在此篇博客中,我将深度剖析XSS攻击,从其基本原理到实际案例,探讨其可能带来的后果以及如何有效地防范。通过对XSS攻击的全面解析,我们希望读者能够更全面地了解这一Web安全漏洞,并采取相应的措施保护自己的Web应用。
一、会话管理
1、WEB会话管理概述
(1)、为什么需要会话管理
http是无状态的,一次请求结束,连接断开服务器再收到请求,无法识别此连接是哪个用户为了需要辨别访问用户,需要一种记录用户的方式
(2)、web应用会话管理的方式
session的管理方式
cookie的管理方式
token的管理方式
2、SESSION管理方式
(1)、认证过程
①、服务端session是用户第一次访问应用时,服务器就会创建的对象。
②、服务器并为每一个session都分配一个唯一的sessionid。
③、服务器在创建完session后,会把sessionid通过cdokie返回给用户所在的浏览器
④、当用户第二次向服务器发送请求的时候,就会通过cookie把sessionid传回给服务器
⑤、用户再次请求,服务器能够根据sessionid找到与该用户对应的session信息。
(2)、认证过程

(3)、相关问题
①、这种方式将会话信息存储在web服务器里面,当用户同时在线量比较多时,这些会话信息会占据比较多的内存;
②、当应用采用集群部署的时候,会遇到多台web服务器之间如何做session共享的问题
③、多个应用要共享session时,还会遇到跨域问题
(4)、实验代码逻辑

(5)、前端代码
<html><meta charset="utf-8"><form action="login.php" method="POST">username:<br><input type="text" name="username"><br>password:<br><input type="text" name="password"><br><input type="submit" value="Submit"></form></html>

(6)、后端代码
①、后端代码(login.php)
<?phpsession_start0;$usr = $_POSTTusername'];$pwd = $_POSTI'password'];if($usr==='admin'&&$pwd==='admin'){echo'登录成功';$_SESSION["admin"]=1;var_dump($_SESSION);}else{echo登录失败';}?>②、后端代码 (check.php)<?phpsession_start0);var_dump($_SESSION);if($_SESSION["admin"]==1){echo"没错你就是管理员",}else{echo"我不知道你是谁",}?>③、后端代码 (unset.php)<?phpsession_start0;unset($_SESSIONTuser']);session_destroy();?>
3、COOKIE管理方式
(1)、Cookie基础
①、Cookie是由HTTP服务器设置的
②、Cookie信息保存在浏览器中
(2)、Cookie和Session最大区别:
①、Cookie将数据存储客户端
②、Seesion将数据存储在服务器端
(3)、认证过程
①、用户发起登录请求,服务端根据传入的用户密码之类的身份信息。
②、服务端验证用户是否满足登录条件,如果满足,就根据用户信息创建一个登录凭证
③、服务端把上一步创建好的登录凭证,先对它做数字签名,然后再用对称加密算法做加密处理。
④、将签名、加密后的字串,写入cookie。cookie的名字必须固定。
⑤、用户登录后发起后续请求,服务端根据上一步存登录凭证的cookie名字,获取到相关的cookie值。
(4)、认证过程
(5)、相关问题
①、实现了服务端无状态化
②、cookie有大小限制,存储不了大多数据
③、每次传送cookie,增加了请求的数量,对访问性能也有影响
④、同样存在跨域问题(不同域名无法互相读取cookie)
4、TOKEN管理方式
(1)、token管理方式
①、流程和实现上跟cookie-based基本无区别。
②、cookie-based里面写到cookie里面的ticket,此情景称为token。
③、token在请求都必须通过url参数或者是http header的形式,主动带上token。
(2)、认证过程
二、Session攻击
1、关于session攻击
(1)、主要攻击方式
首先通过捕获或者固定合法用户的session,然后冒充该用户来访问系统
(2)、三种方式来获取一个有效的session标识符
①、预测 ②、捕获 (劫持) ③、固定
2、认证凭证预测
(1)、原理
预测需要攻击者猜测出系统中使用的有效的session标识符,类似暴力破解
(2)、目前Session安全
①、PHP生成随机的session id极其复杂的并且难于被预测出来
②、PHP生成session字符串无任何规律和顺序
3、会话劫持
(1)、含义
①、会话劫持 (Session hijacking).
②、通过窃取合法用户Session ID后,使用该Session ID登录目标账号的攻击方法。
③、会话劫持最重要的部分是取得一个合法的会话标识来伪装成合法用户
(2)、攻击步骤
①、目标用户需要先登录站点
②、登录成功后,该用户会得到站点提供的一个会话标识SessionID
③、攻击者通过某种攻击手段捕获Session ID
④、击者通过捕获到的Session ID访问站点即可获得目标用户合法会话
(3)、会话劫持过程

(4)、攻击者获取Session ID的方式有多种
①、暴力破解:尝试各种SessionID,直到破解为止
②、预测: 如果SessionID使用非随机的方式产生,那么就有可能计算出来
③、窃取: 使用网络嗅探,XSS攻击等方法获得
(5)、XSS攻击:
①、跨站脚本 (Cross-Site Scripting,XSS)攻击者利用网站漏洞把恶意的脚本代码注入到网页之中
②、当其他用户浏览这些网页时,就会执行其中的恶意代码。
③、主要对受害用户采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击
(6)、中间人攻击:
中间人 (MITM)
攻击者将它自己放到两方之间,通常是客户端和服务端通信线路的中间通过破坏原始频道之后拦截一方的消息并将它们转发给另一方来实现。

4、会话固定
(1)、什么是会话固定
①、会话固定 (Session fixation)
②、诱骗受害者使用攻击者指定的会话标识 (SessionID)的攻击手段
③、这是攻击者获取合法会话标识的最简单的方法。
(2)、攻击步骤
①、攻击者通过某种手段重置目标用户的SessionID,然后监听用户会话状态
②、目标用户携带攻击者设定的Session ID登录站点;
③、攻击者通过Session ID获得合法会话;
(3)、会话固定过程

(4)、重置cookie的方式
①、使用客户端脚本来设置Cookie到浏览器
<script> document.cookie='PHPSESSID=99999';</script>
(5)、防御方案
①、开启Httponly阻止攻击者读取Cookie
但有少数低版本浏览器存在漏洞,即使设置了HttpOnly,也可以重写Cookie

(6)、重置cookie的方式
①、HTML的<META>标签加Set-Cookie属性
<meta http-equiv=Set-Cookie'content=PHPSESSID=23333'>

三、Cookie安全
1、Cookie安全
(1)、Cookie字段
- [name][value][domain][path][expires][httponly][secure]
- 依次是: 名称、值、域名、相对根路径、过期时间、是否有httponly标志、是否有secure标志
(2)、子域Cookie
①、domain字段,设置cookie时如不指定则默认是本域
例如www.360.com通过javaScript设置一个cookie:document.cookie=“test=1"
例如www.360.com通过javaScript设置一个父域:document.cookie=“test=1; domain=360.com”
(3)、路径Cookie
①、path字段,设置cookie时如不指定则默认是当前页面路径
例如www.360.com/admin/index.php页面设置一个cookiedocument.cookie=“test=1"
- Path值是/admin 只有该/admin/径下的页面才能读取到该cookie
2、HttpOnly
(1)、什么是HttpOnly
- HttpOnly是Cookie的一种属性
- 指示浏览器不要在除HTTP (和 HTTPS)请求之外暴露Cookie。
- PHP setCookie0最后一项
(2)、如何设置
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项。
开启方法为:
<?phpsetcookie("abc","test", NULL, NULL,NULL,NULL,TRUE);setrawcookie("abc","test", NULL,NULL, NULLNULL,TRUE);?>
(3)、相关函数
setcookie():
setcookie() 函数向客户端发送一个 HTTP cookie

(4)、设置httponly

(5)、读取HttpOnly Cookie
- Phpinfo()

②、CVE-2012-0053
Apache服务器2.2.0-2.2.21版本存在一个漏洞攻击者可通过给网站植入超大的Cookie,使得HTTP头超过apache的LimitRequestFieldSize (最大请求长度)4192字节,apache便会返回400错误并在返回信息中包含了http-onlycookies

3、Cookie存储
(1)、本地存储与内存存储
①、存储方式与过期时间 (expires) 相关。
②、没设置过期时间,则是内存Cookie,浏览器关闭cookie失效:
③、设置了时间点,cookie会以文本的形式保存在系统本地。
④、Document.cookie=expires=1;expires=Mon, 01 Jan 2020 00:00:00 GMT方式更安全
(2)、Cookie本地存储方式
浏览器本地存储方式:

相关文章:
Web安全漏洞分析-XSS(上)
随着互联网的迅猛发展,Web应用的普及程度也愈发广泛。然而,随之而来的是各种安全威胁的不断涌现,其中最为常见而危险的之一就是跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS攻击一直以来都是Web安全领…...
MVCC多版本并发控制相关面试题整理
多版本并发控制是一种用于支持并发事务的数据库管理系统技术,它允许多个事务同时访问数据库,而不会相互干扰或导致数据不一致。MVCC通过在数据库中维护不同版本的数据来实现这一目标,从而允许每个事务看到一致的数据库快照。 并发导致的问题…...
02-鸿蒙学习之4.0todoList练习
02-鸿蒙学习之4.0todoList练习 代码 /*** 1:组件必须使用Component装饰* 2.Entry 装饰哪个组件,哪个组件就呈现在页面上* 3.被Entry 装饰的入口组件。build()必须有且仅有一个根 ** 容器 ** 组件* 其他的自定义组件,build() 中…...
springsecurity5.7.x和springsecurity6.x配置文件对比
springsecurity5和springsecurity6如何要实现多种登录方式,自定义登录方式都是一样的操作步骤,主要有四个步骤。 一、自定义登录用户实体实现springsecurity中的UserDetails接口 二、自定义登录用户实现类实现springsecurity中的UserDetailsService接口 三、自定义登录用户au…...
brat文本标注工具——安装
目录 一、Linux系统安装 1. centOS系统 2. Ubuntu系统 3. macOS系统 4.说明 二、Google Chrome安装 1. 打开命令行,切换到管理者权限 2. 安装依赖 3. 下载Google浏览器的安装包 4. 安装Google Chrome 三、yum更新 四、Apache安装 安装Apache 启动Apac…...
麒麟操作系统网桥配置
网桥概念: Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能可 以简单的理解为是一个二层交换机或者 Hub;多个网络设备可以连接 到同一个 Bridge,当某个设备收到数据包时,Bridge 会将数据转发 给其他设备。…...
禁奥义·SQL秘籍
sql secret scripts sql 语法顺序、执行顺序、执行过程、要点解析、优化技巧。 1、语法顺序 如上图所示,为 sql 语法顺序与执行顺序对照图。其具体含义如下: 0、select: 用于从数据库中选取数据,即表示从数据库中查询到的数据的…...
浅谈用户体验测试的主要功能
用户体验(User Experience,简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望,提高用户满意度,用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能,以及它在产品开发过程中的重要性。…...
2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性
全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性 1. 基本思想 大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们经常产生包含事实错误的回答,尤其在长尾知识中。 为了解决这一问题,之前的研究人员提出了…...
句子相似度计算
文章目录 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2 这里使用预训练的 nreimers/MiniLM-L6-H384-uncased 模型,并在 1B 句对数据集上微调。 如果你使用 sentence-transformers pip install -U sentence-transformers可以这样使用模型 impor…...
高级IO select 多路转接实现思路
文章目录 select 函数fd_set 类型timeval 结构体select 函数的基本使用流程文件描述符就绪条件以select函数为中心实现多路转接的思路select 缺陷 select 函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); selec…...
C++学不会?一篇文章带你快速入门
1. 命名空间 1.1 命名空间的概念 C命名空间是一种用于避免名称冲突的机制。它允许在多个文件中定义相同的函数、类或变量,而不会相互干扰。 1.2 命名空间的定义 namespace是命名空间的关键字,后面是命名空间的名字,然后后面一对 {},{}中即…...
【加密相册】 隐私协议
【加密相册】隐私协议 1.个人信息的收集和使用 我们的应用程序不会收集用户的个人信息,包括姓名、地址、电子邮件地址、电话号码等。我们不会追踪用户的位置信息或共享用户的个人信息。 2. 非个人化信息的收集和使用 我们的应用程序可能会收集一些非个人化信息&a…...
超越基础:释放 Systemd 的全部潜力【systemd 二】
🎏:你只管努力,剩下的交给时间 🏠 :小破站 超越基础:释放 Systemd 的全部潜力【systemd 二】 前言第一:系统服务高级管理高级服务配置:环境变量设置:服务单元文件的高级选…...
Flask学习二:项目拆分、请求与响应、cookie
教程 教程地址: 千锋教育Flask2框架从入门到精通,Python全栈开发必备教程 老师讲的很好,可以看一下。 项目拆分 项目结构 在项目根目录下,创建一个App目录,这是项目下的一个应用,应该类似于后端的微服…...
6、Qt延时的使用
一、sleep() 1、说明 QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线…...
《Effective C++》条款26
尽可能延后变量定义式的出现时间 string test(const string& passwd) {string s;if (s.size() < MinLenth){throw logic_error("passwd is too short");} } 这段代码的问题是:如果抛出了异常,那么定义的string对象将面临毫无意义的构造…...
np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?
在代码中,采样是通过以下方式完成的: samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里,np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…...
1 时间序列模型入门: LSTM
0 前言 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...


