当前位置: 首页 > news >正文

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(上)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…...

MVCC多版本并发控制相关面试题整理

多版本并发控制是一种用于支持并发事务的数据库管理系统技术&#xff0c;它允许多个事务同时访问数据库&#xff0c;而不会相互干扰或导致数据不一致。MVCC通过在数据库中维护不同版本的数据来实现这一目标&#xff0c;从而允许每个事务看到一致的数据库快照。 并发导致的问题…...

02-鸿蒙学习之4.0todoList练习

02-鸿蒙学习之4.0todoList练习 代码 /*** 1:组件必须使用Component装饰* 2.Entry 装饰哪个组件&#xff0c;哪个组件就呈现在页面上* 3.被Entry 装饰的入口组件。build&#xff08;&#xff09;必须有且仅有一个根 ** 容器 ** 组件* 其他的自定义组件&#xff0c;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. 打开命令行&#xff0c;切换到管理者权限 2. 安装依赖 3. 下载Google浏览器的安装包 4. 安装Google Chrome 三、yum更新 四、Apache安装 安装Apache 启动Apac…...

麒麟操作系统网桥配置

网桥概念&#xff1a; Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备&#xff0c;其功能可 以简单的理解为是一个二层交换机或者 Hub&#xff1b;多个网络设备可以连接 到同一个 Bridge&#xff0c;当某个设备收到数据包时&#xff0c;Bridge 会将数据转发 给其他设备。…...

禁奥义·SQL秘籍

sql secret scripts sql 语法顺序、执行顺序、执行过程、要点解析、优化技巧。 1、语法顺序 如上图所示&#xff0c;为 sql 语法顺序与执行顺序对照图。其具体含义如下&#xff1a; 0、select&#xff1a; 用于从数据库中选取数据&#xff0c;即表示从数据库中查询到的数据的…...

浅谈用户体验测试的主要功能

用户体验(User Experience&#xff0c;简称UX)在现代软件和产品开发中变得愈发重要。为了确保产品能够满足用户期望&#xff0c;提高用户满意度&#xff0c;用户体验测试成为不可或缺的环节。本文将详细探讨用户体验测试的主要功能&#xff0c;以及它在产品开发过程中的重要性。…...

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性

全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性 1. 基本思想 大型语言模型(LLMs)具有出色的能力,但由于完全依赖其内部的参数化知识,它们经常产生包含事实错误的回答,尤其在长尾知识中。 为了解决这一问题,之前的研究人员提出了…...

句子相似度计算

文章目录 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2 这里使用预训练的 nreimers/MiniLM-L6-H384-uncased 模型&#xff0c;并在 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命名空间是一种用于避免名称冲突的机制。它允许在多个文件中定义相同的函数、类或变量&#xff0c;而不会相互干扰。 1.2 命名空间的定义 namespace是命名空间的关键字&#xff0c;后面是命名空间的名字&#xff0c;然后后面一对 {},{}中即…...

【加密相册】 隐私协议

【加密相册】隐私协议 1.个人信息的收集和使用 我们的应用程序不会收集用户的个人信息&#xff0c;包括姓名、地址、电子邮件地址、电话号码等。我们不会追踪用户的位置信息或共享用户的个人信息。 2. 非个人化信息的收集和使用 我们的应用程序可能会收集一些非个人化信息&a…...

超越基础:释放 Systemd 的全部潜力【systemd 二】

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 超越基础&#xff1a;释放 Systemd 的全部潜力【systemd 二】 前言第一&#xff1a;系统服务高级管理高级服务配置&#xff1a;环境变量设置&#xff1a;服务单元文件的高级选…...

Flask学习二:项目拆分、请求与响应、cookie

教程 教程地址&#xff1a; 千锋教育Flask2框架从入门到精通&#xff0c;Python全栈开发必备教程 老师讲的很好&#xff0c;可以看一下。 项目拆分 项目结构 在项目根目录下&#xff0c;创建一个App目录&#xff0c;这是项目下的一个应用&#xff0c;应该类似于后端的微服…...

6、Qt延时的使用

一、sleep() 1、说明 QThread类中如下三个静态函数&#xff1a; QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单&#xff0c;但是会阻塞线程&#xff0c;有界面时界面会卡死&#xff0c;一般在非GUI线…...

《Effective C++》条款26

尽可能延后变量定义式的出现时间 string test(const string& passwd) {string s;if (s.size() < MinLenth){throw logic_error("passwd is too short");} } 这段代码的问题是&#xff1a;如果抛出了异常&#xff0c;那么定义的string对象将面临毫无意义的构造…...

np.random.uniform() 采样得到的是一个高维立方体,而不是球体,为什么?

在代码中&#xff0c;采样是通过以下方式完成的&#xff1a; samples self.center np.random.uniform(-self.radius, self.radius, (num_samples, len(self.center))) 这里&#xff0c;np.random.uniform函数在每个维度独立地生成了一个介于-self.radius和self.radius之间的…...

1 时间序列模型入门: LSTM

0 前言 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种用于处理序列数据的神经网络。相比一般的神经网络来说&#xff0c;他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义&#xff0c;RNN就能够很好…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...