当前位置: 首页 > 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就能够很好…...

1-Python与设计模式--单例模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

Rust之构建命令行程序(一):接受命令行参数

开发环境 Windows 10Rust 1.73.0 VS Code 1.84.2 项目工程 这次创建了新的工程minigrep. IO工程&#xff1a;构建命令行程序 这一章回顾了到目前为止你所学的许多技能&#xff0c;并探索了一些更标准的库特性。我们将构建一个与文件和命令行输入/输出交互的命令行工具&#…...

Go 谈论了解Go语言

一、引言 Go的历史回顾 Go语言&#xff08;通常被称为Go或Golang&#xff09;由Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计&#xff0c;并于2009年正式公开发布。这三位设计者都曾在贝尔实验室工作&#xff0c;拥有丰富的编程语言和操作系统研究经验。Go的诞生…...

《C++PrimerPlus》第9章 内存模型和名称空间

9.1 单独编译 Visual Studio中新建头文件和源代码 通过解决方案资源管理器&#xff0c;如图所示&#xff1a; 分成三部分的程序&#xff08;直角坐标转换为极坐标&#xff09; 头文件coordin.h #ifndef __COORDIN_H__ // 如果没有被定义过 #define __COORDIN_H__struct pola…...

uniapp上架app store详细攻略

目录 uniapp上架app store详细攻略 前言 一、登录苹果开发者网站 二、创建好APP 前言 uniapp开发多端应用&#xff0c;打包ios应用后&#xff0c;会生成一个ipa后缀的文件。这个文件无法直接安装在iphone上&#xff0c;需要将这个ipa文件上架app store后&#xff0c;才能通…...

面试:线上问题处理

文章目录 在处理线上问题时&#xff0c;你的排查思路和步骤是什么线上偶发性问题如何处理和跟踪当系统出现大量错误日志时&#xff0c;你会如何分析和解决问题在高并发场景中&#xff0c;如何排查和解决线程安全问题当系统出现大规模的故障时&#xff0c;你的应急处理和恢复策略…...

Vue3中快速Diff算法

在Vue3中&#xff0c;快速Diff算法主要用于优化虚拟DOM的更新过程&#xff0c;减少不必要的DOM操作&#xff0c;提高性能。以下是对Vue3源码中快速Diff算法的解读&#xff1a; 首先&#xff0c;我们需要引入Vue3的相关包&#xff1a; import { reactive, toRefs, watch } fro…...

ROS2+STM32小车红外对射光电计数器模块资料

数据&#xff1a;一个周长内有20个孔洞或者20个分隔。外径&#xff1a;6.8cm 图片不是实物图&#xff0c;是示意图 因为没有串口&#xff0c;所以不可能会发送出数字的&#xff0c;就是通过电压变化次数来计算距离或者其他数据 有遮挡时&#xff0c;输出高电平&#xff0c;无遮…...

Android设计模式--桥接模式

闻正言&#xff0c;行正道&#xff0c;左右前后皆正人 一&#xff0c;定义 将抽象部分与实现部分分离&#xff0c;使它们都可以独立地进行变化 二&#xff0c;使用场景 从模式的定义中&#xff0c;我们大致可以了解到&#xff0c;这里的桥接的作用其实就是连接抽象部分与实现…...

1、分布式锁实现原理与最佳实践(一)

在单体的应用开发场景中涉及并发同步时&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中&#xff0c;就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题&…...