Web安全漏洞分析-XSS(上)

news2025/1/18 16:59:36

        随着互联网的迅猛发展,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)

<?php

session_start0;

$usr = $_POSTTusername'];

$pwd = $_POSTI'password'];

if($usr==='admin'&&$pwd==='admin'){

echo'登录成功';

$_SESSION["admin"]=1;

var_dump($_SESSION);

}else{

echo登录失败';

}?>

②、后端代码 (check.php)

<?php

session_start0);

var_dump($_SESSION);

if($_SESSION["admin"]==1){

echo"没错你就是管理员",

}else{

echo"我不知道你是谁",

}?>

③、后端代码 (unset.php)

<?php

session_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的选项。

开启方法为:

<?php

setcookie("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本地存储方式

浏览器本地存储方式:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1269558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次Apollo Client升级导致的生产404 Not Found问题排查记录

概述 本文记录一次升级Apollo Client组件到1.7.0后遇到的重大生产事故。只想看结论的&#xff0c;可直接快进到文末。实际上&#xff0c;第一句话就是一个结论。 另&#xff0c;本文行文思路事后看起来可行略显思路清晰&#xff0c;实际上排查生产问题时如无头苍蝇&#xff0…

初学者如何入门深度学习:以手写数字字符识别为例看AI 的学习路径,一图胜千言!

文章大纲 深度神经网络机器学习,深度学习,数据发掘之间的关系理解深度神经网络最好的可视化工具深度学习基础概念能解决神马种类的问题?卷积池化以手写字符识别为例讲述深度学习的分类问题MNIST 数据集简介初学者入门 :生成式 AI -- generative-ai-for-beginners参考文献与…

【Web端CAD/CAE文字标注】webgl+canvas 2d实现文字标注功能

一、需求背景 在CAD/CAE领域经常会遇到显示节点编号这种需求&#xff0c;效果如下图&#xff1a; 本文介绍如何在WebGL中实现文字的显示&#xff0c;对于如何在OpenGL中实现请绕路。 二、实现原理 Canvas是HTML5提供的元素&#xff0c;用于在网页上绘制图形&#xff0c;其支…

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…

Unity版本使用情况统计(更新至2023年10月)

本期UWA发布的内容是第十三期Unity版本使用统计&#xff0c;统计周期为2023年5月至2023年10月&#xff0c;数据来源于UWA网站&#xff08;www.uwa4d.com&#xff09;性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势&#xff0c;了解近半年来哪些Unity版本的使用概率更…

Steps步骤条(antd-design组件库)简单用法

1.Steps步骤条 引导用户按照流程完成任务的导航条。 2.何时使用 当任务复杂或者存在先后关系时&#xff0c;将其分解成一系列步骤&#xff0c;从而简化任务。 组件代码来自&#xff1a; 步骤条 Steps - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-…

11.兔子生崽问题【2023.11.26】

1.问题描述 有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问 第二十个月的兔子对数为多少对&#xff1f; 2.解决思路 3.代码实现 #include<stdio.h> int mai…

单相直流电表和单相智能电表有哪些区别?

在众多的智能电表中&#xff0c;单相智能电表已成为家庭用电、工业用电等领域的重要组成部分。与此同时&#xff0c;单相直流电表也因其特性在某些特定场合受到关注。下面就来讲讲两者都有哪些区别&#xff0c;一起来看下吧&#xff01; 一、工作原理及性能差异 1.单相直流电表…

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题&#xff0c;去微信公众平台&#xff08;小程序&#xff09;上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件&#xff0c;就会发现控制台报错了&#xff0c;会提示一个https什么不在ip白名单&#xff0c;复制那个网址 2、…

5 面试题--redis

伪客户端&#xff1a; 伪客户端的 fd 属性值为 -1&#xff1b;伪客户端处理的命令请求来源于 AOF ⽂件或者 Lua 脚本&#xff0c;⽽不是⽹络&#xff0c;所以这种客户端不需要套接字连接&#xff0c;⾃然也不需要记录套接字描述符。⽬前 Redis 服务器会在两个地⽅ ⽤到伪客户端…

西工大网络空间安全学院计算机系统基础实验一(9, 10, 11, 12, 13)

还是那句话&#xff0c;专心做好你自己的&#xff0c;老老实实把基础打好&#xff0c;不要被其他人带跑节奏&#xff0c;不要跟他打&#xff0c;跟着这系列博客&#xff0c;稳扎稳打一步一步来。即使你VMware workstation没下载好&#xff0c;即使你Ubuntu虚拟机没配好&#xf…

nacos配置变更导致logback日志异常

问题背景: 线上的服务突然内存爆满&#xff0c;查服务器突然发现&#xff0c;日志全部打印到了/tmp/tomcat.xxx.port目录下&#xff0c;后来对应操作时间&#xff0c;和nacos修改配置是同一时间发生的&#xff0c;但是疑惑的点是&#xff0c;nacos配置变更为什么会引起logback的…

MySQL与其他数据库产品的比较,优势在哪里?

作为数据库管理领域的博主作家&#xff0c;我深知数据库在软件开发和数据管理中的重要性。在当今众多的数据库产品中&#xff0c;MySQL作为一种流行的开源关系型数据库管理系统&#xff0c;具有许多优势和特点。下面&#xff0c;我将通过对与其他数据库产品的比较以及MySQL的优…

【华为数通HCIP | 网络工程师】821刷题日记-IS-IS(2)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

mac截图Snagit 中文介绍

1.超越普通的屏幕截图 TechSmith Snagit 是唯一具有内置高级图像编辑和屏幕录制功能的屏幕捕获软件。因此&#xff0c;您可以在一个程序中轻松创建高质量的图像和视频。 2.最后&#xff0c;屏幕捕获软件可以完成您所做的一切 快速解释一个过程如果您正在努力清楚地沟通&…

电子学会C/C++编程等级考试2022年12月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:鸡兔同笼 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。 时间限制:1000 内存限制:65536输入 一行,一个正整数a (a < 327…

HarmonyOS——UI开展前的阶段总结

当足够的了解了HarmonyOS的相关特性之后&#xff0c;再去介入UI&#xff0c;你会发现无比的轻松&#xff0c;特别当你有着其他的声明式UI开发的经验时&#xff0c;对于HarmonyOS的UI&#xff0c;大致一扫&#xff0c;也就会了。 如何把UI阐述的简单易懂&#xff0c;又能方便大…

全局异常处理类

全局异常处理类 创建步骤 定义一个自己的全局错误处理类GlobalExceptionHandler创建一个ExceptionHandler类&#xff0c;主要是用ControllerAdvice和 ExceptionHandler处理错误信息 以下说明各个注解的作用&#xff1a; ControllerAdvice(annotations {RestController.class…

【C++】单链表——单链表的基本操作

1、单链表的定义 由于顺序表的插入删除操作需要移动大量的元素&#xff0c;影响了运行效率&#xff0c;因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素&#xff0c;不需要使用地址连续的存储单元&#xff0c;因此它不要求在逻辑…

Mysq8l在Centos上安装后忘记root密码如何重新设置

场景 Mysql8在Windows上离线安装时忘记root密码&#xff1a; Mysql8在Windows上离线安装时忘记root密码-CSDN博客 如果是在Windows上忘记密码可以参考上面。 如果在Centos中安装mysql可以参考下面。 CentOS7中安装Mysql8并配置远程连接和修改密码等&#xff1a; CentOS7中…