安全基础 --- html标签 + 编码

html标签

(1)detail标签

<details>标签用来折叠内容,浏览器会折叠显示该标签的内容。

<1> 含义:

<details>
这是一段解释文本。
</details>

用户点击这段文本,折叠的文本就会展开,显示详细内容。

▼ 详细信息
这是一段解释文本。

<2> 例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- on:js事件 --><details ontoggle="alert(1)"><!-- 标签进行切换时,会出发某个函数 -->这是一个details标签</details> <p>hello</p><!-- 等同于html的实体编码 --><p>&#104;&#101;&#108;&#108;&#111;</p><!-- &lt;和&gt; === <>  html将<>的编码解析,在页面展现。因为<>被html编码,所以无法执行-->&lt;script&gt; alert(1); &lt;/script&gt;
</body>
</html>

(2)iframe标签

<iframe>标签用于在网页里面嵌入其他网页。

<1> 基本用法

<iframe>标签生成一个指定区域,在该区域中嵌入其他网页。它是一个容器元素,如果浏览器不支持<iframe>,就会显示内部的子元素。

例:iframe嵌入bilibili

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>iframe</title>
</head>
<body><iframe src="http://www.bilibili.com" width="500" height="500" frameborder="0" allowfullscreen sandbox><!-- 功能:将其他网页嵌入到本网页 --><!-- sandbox:沙箱模式。 --><p><a href="http://www.bilibili.com">点击打开嵌入页面</a></p></iframe>
</body>
</html>

<2> sandbox属性

允许设置嵌入的网页的权限,等同于提供了一个隔离层,即“沙箱”。

【1】使用方法

[1] 可当布尔类型使用,打开所有限制

<iframe src="https://www.example.com" sandbox>
</iframe>

[2] 设置具体值,表示打开某项限制,未设置表示无此权限

原则:最小权限原则

【2】例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>iframe</title>
</head>
<body><iframe src="./img.html" width="500" height="500" frameborder="0" allowfullscreen sandbox="allow-modals allow-scripts"><!-- 功能:将其他网页嵌入到本网页 --><!-- sandbox:沙箱模式。 --><p><a href="./img.html">点击打开嵌入页面</a></p></iframe>
</body>
</html>

编码

(1)ASCII码

ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0

(2)unicode编码

一种所有符号的编码,规模可以容纳100多万个符号

存在问题:

  1. 如何区别 unicode 和 ASCII 码?
  2. 英文字母是一个字节,别的字符 2-3 字节,若规定用 3-4 个字节表示,英文字母会存储浪费

结果:1) 出现许多种不同的存储方式;2) 无法推广

(3)UTF-8

UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示)

<1> 特点

变长的编码方式,使用 1-4 个字节表示一个符号,根据不同符号变化字节长度

<2> 规则

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
  • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码
Unicode符号范围     |        UTF-8编码方式
(十六进制)          |          (二进制)
----------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0-127
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
128-2047
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
2048-65535
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

<3> 例

汉字`中`为例,展现UTF-8编码

ord("中") --- 3个字节
20013
bin(20013)
'0b 100 111000 101101'1110    0100    10    111000    10    101101
1110    xxxx     10    xxxxxx     10     xxxxxxhex(0b11100100)
'0xe4'
hex(0b10111000)
'0xb8'
hex(0b10101101)
'0xad'e4b8ad

(4)html实体编码

<1> 实体表示法

实体的写法是&name;,其中的name是字符对应的实体。

<p>hello</p>
<!-- 等同于 -->
十进制
<p>&#104;&#101;&#108;&#108;&#111;</p>
ord('h') -> 114(在ascii表中,h对应104这个数字)<!-- 等同于 -->
十六进制
<p>&#x68;&#x65;&#x6c;&#x6c;&#x6f;</p>
hex(104) -> 68(x代表16进制,16进制下,104 == x68)

<2> 常用特殊字符

  • <:&lt;
  • >:&gt;
  • 空格:&nbsp;

(5)urlcode编码

<1> URL

URL 是“统一资源定位符”(Uniform Resource Locator),表示各种资源的互联网地址。

出现位置:url地址栏

URL 字符转义的方法是,字符的十六进制 ASCII 码前面加上百分号%

【1】 网址的组成部分

https://www.example.com/path/index.html

协议:常用(http、https)。ftp、telnet

对应端口:

http -- 80

https -- 443

ftp -- 20 21

telnet -- 23

ssh -- 22

DNS -- 53

dhcp -- 67  68

smtp -- 25(邮件协议)

pop3 -- 110(邮件协议)

ladp -- 389(域控制器)

mysql -- 3306

sqlserver -- 1433(C#语言用得多)

oracle -- 1521

windows远程连接端口 -- 3389

redis(nosql数据库) -- 6379

【2】状态码

  • request是代表Http请求信息的对象
  • response对象是代表Http响应信息的对象(返回含有状态码)
2开头:访问成功
200 OK:请求成功,服务器正常响应。3开头:重定向(较多用于登录)
300 Multiple Choices:客户端请求的资源有多个可供选择,需要进一步确定。
301 Moved Permanently:被请求的资源已永久移动到新的URL,客户端应该使用新的URL发起请求。(永久转移)
302 Found:被请求的资源已暂时移动到新的URL,客户端应该继续使用原始URL。(临时转移)
303 See Other:客户端应该使用另一个URL来获取资源。
304 Not Modified:客户端的缓存资源仍然有效,可以直接使用缓存的副本。
307 Temporary Redirect:请求的资源暂时移动到其他URL,客户端应该继续使用原始URL。(与302基本一致)
308 Permanent Redirect:请求的资源永久移动到其他URL,客户端应该使用新URL。4开头:
400 Bad Request:请求错误,服务器无法理解或处理请求。
401 Unauthorized:未授权,需要进行身份验证或登录。
403 Forbidden:禁止访问,服务器拒绝请求。
404 Not Found:资源未找到,服务器无法找到请求的资源。5开头:
500 Internal Server Error:服务器内部错误,无法完成请求。

<2> 编码表示(英文字母不解析)

  • !:%21

  • #:%23(相当于注释)

  • $:%24

  • &:%26

  • ':%27

  • (:%28

  • ):%29

  • *:%2A

  • +:%2B

  • ,:%2C

  • /:%2F

  • ::%3A

  • ;:%3B

  • =:%3D

  • ?:%3F

  • @:%40

  • [:%5B

  • ]:%5D

  • 空格:%20

例:在url地址栏输入?id=1' order by 3 --+

url地址栏会将其解析为:?id=1%27%20order%20by%203%20--+


附:

  • ord() --- unicode编码
  • hex() --- 16进制
  • oct() --- 8进制
  • int() --- 10进制
  • bin() --- 二进制

img标签实现绕过

基本用法

<img>标签用于插入图片。它是单独使用的,没有闭合标签。

 <img src="foo.jpg">

例:

[1] img标签加载图片

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>img</title>
</head>
<body><img src="1111" alt="图片加载失败" width="300px" height="300px" onerror="alert(1)"><!-- 加载失败,触发onerror事件 -->
</body>
</html>

图片加载出现错误

[2] php文件

<?php
header('X-XSS-Protection:0');//通过php代码关闭浏览器的防御措施
$xss = isset($_GET['xss'])? $_GET['xss'] : '';// 三元运算符
$xss = str_replace(array("(",")","&","\\","<",">","'"),'',$xss);// replace函数,替换()<>'&\\,全部替换为''
// 过滤大小括号,使其无法执行函数
// &:防止使用html实体编码
// \:防止使用\u,unicode编码
// <>:防止使用标签
echo "<img src=\"{$xss}\">";//打印
?>

1) 反引号实现绕过:http:127.0.0.1/php/xss.php?xss=1" οnerrοr="alert`1`

2) 过滤反引号后,进行绕过

【1】实验:将()在urlcode编码中,写为:%28和%29。xss=1" οnerrοr="alert%281%29

【2】实验:在urlcode编码中,%25为%。xss=1 οnerrοr="alert%25281%2529

由于js中无法编码符号,所以显示为直接输出,过滤失败

【3】实验:使用location。xss=1" οnerrοr="javascript:alert%25281%2529

js中有个好用的特性:location这个函数,可以把右边所有的东西变为一个变量值,对于变量而言,js可以随意编码,最终实现绕过。

<a href="javascript:alert(1)"></a>

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

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

相关文章

MySQL_2.6【高级查询2】详细讲解

目录 一、多表查询 1、笛卡尔积现象 2、等值连接查询 3、自连接查询 4、内连接查询 5、外连接 二、子查询 1、单列子查询 2、单行子查询 3、多行子查询 4、多列子查询 5、关联子查询【了解】 6、子查询的综合应用 加油&#xff01;&#xff01;&#xff01; 一、多…

Sklearn学习-iris数据集学习

Sklearn学习-逻辑回归&#xff08;iris数据集&#xff09; 使用load_iris加载数据集&#xff0c;查看包含的keys查看数据的列名&#xff0c;分类目标的名称获取data和target&#xff0c;并打印各自的shape拆分训练集和测试集使用逻辑回归训练。在测试集上计算准确率在测试集上实…

【云原生】Docker容器资源限制(CPU/内存/磁盘)

目录 ​编辑 1.限制容器对内存的使用 2.限制容器对CPU的使用 3.block IO权重 4.实现容器的底层技术 1.cgroup 1.查看容器的ID 2.在文件中查找 2.namespace 1.Mount 2.UTS 3.IPC 4.PID 5.Network 6.User 1.限制容器对内存的使用 ⼀个 docker host 上会运⾏若⼲容…

React几种避免子组件无效刷新的方案

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 前言 一个很常见的场景&#xff0c;React中父组件和子组件在一起&#xff0c;子组件不依赖于父组件任何数据&#xff0c;但是会一起发生变化。 在探究原…

平面设计软件都有哪些?推荐这7款

优秀的平面广告设计可以给产品带来良好的效益&#xff0c;正确传播品牌的价值和色调&#xff0c;而功能强大、使用方便的平面广告设计软件是创造优秀平面广告设计的关键。本文推荐7款备受好评的平面广告设计软件&#xff0c;易于使用&#xff01; 1.即时设计 即时设计是国内一…

如何通过企业工商信息初步判断企业是否靠谱?

银行、投资机构等对企业进行融资、授信、合作时&#xff0c;需要如何评估企业的可靠性。企业工商信息作为企业的基础信息&#xff0c;是初步判断企业是否靠谱的重要依据之一&#xff0c;通过对企业工商信息的综合分析&#xff0c;我们可以了解企业的经营状况、财务实力、法律风…

Bug记录: CUDA error_ device-side assert triggered

Bug记录&#xff1a; CUDA error: device-side assert triggered 在接触AIGC算法的过程中偶尔会遇到这样的bug&#xff1a;RuntimeError: CUDA error: device-side assert triggered return torch._C._cuda_synchronize() RuntimeError: CUDA error: device-side assert trig…

python在不同坐标系中绘制曲线

文章目录 平面直角坐标系空间直角坐标系极坐标地理坐标 平面直角坐标系 回顾我们的数据可视化的学习历程&#xff0c;其实始于笛卡尔坐标系的创建&#xff0c;并由此建立了数与形的对应关系。在笛卡尔坐标系中随便点上一点&#xff0c;这个点天生具备坐标&#xff0c;从而与数…

CloudDriver一款将各种网盘云盘挂在到电脑本地变成本地磁盘的工具 教程

平时我们的电脑可能由于大量的文件资料之类的导致存储空间可能不够&#xff0c;所以我们可以选择将网盘我们的本地磁盘用来存放东西。 CloudDrive 是一款可以将 115、阿里云盘、天翼云盘、沃家云盘、WebDAV 挂载到电脑中&#xff0c;成为本地硬盘的工具&#xff0c;支持 Window…

sql-从一个或多个表中向一个表中插入 多行

INSERT还可以将SELECT语句查询的结果插入到表中&#xff0c;此时不需要把每一条记录的值一个一个输入&#xff0c;只需 要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入 多行。 基本语法格式如下&#xff1a; INSERT INTO 目标表…

短视频平台视频怎么去掉水印?

短视频怎么去水印&#xff0c;困扰很多人&#xff0c;例如&#xff0c;有些logo水印&#xff0c;动态水印等等&#xff0c;分享操作经验&#xff1a; 抖音作为中国最受欢迎的社交娱乐应用程序之一&#xff0c;已成为许多人日常生活中不可或缺的一部分。在使用抖音过程中&#x…

数据结构--基础知识

数据结构是什么&#xff1f; 数据结构是计算机科学中研究数据组织、存储和管理的方法和原则。它涉及存储和操作数据的方式&#xff0c;以便能够高效地使用和访问数据。 相关内容 基本组成 数组&#xff08;Array&#xff09;&#xff1a;数组是一种线性数据结构&#xff0c;…

K8S暴露pod内多个端口

K8S暴露pod内多个端口 一、背景 公司统一用的某个底包跑jar服务&#xff0c;只暴露了8080端口 二、需求 由于有些服务在启动jar服务后&#xff0c;会启动多个端口&#xff0c;除了8080端口&#xff0c;还有别的端口需要暴露&#xff0c;我这里就还需要暴露9999端口。 注&a…

matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

Vue 基础语法(二)

一、背景&#xff1a; 我们对于基础语法&#xff0c;说白了就是实现元素赋值&#xff0c;循环&#xff0c;判断&#xff0c;以及事件响应即可&#xff01; 二、v-bind 我们已经成功创建了第一个 Vue 应用&#xff01;看起来这跟渲染一个字符串模板非常类似&#xff0c;但是 V…

vue中在使用keep-alive时,会出现在页面跳转后el-tooltip或el-dropdown不消失的问题以及解决方法

一、 问题复现 跳转前&#xff1a; 跳转后&#xff1a; 二、分析 由于在vue中使用了keep-alive&#xff0c;页面在切换时&#xff0c;上一个页面的实例被缓存了&#xff0c;跳转后并没有销毁&#xff0c;所以才会残留 tooltip或dropdown&#xff0c;所以有以下解决思路&am…

[运维|系统] Centos设置本地编码

以下是在CentOS上更改系统编码的一般步骤&#xff1a; 使用locale命令查看当前的系统编码&#xff1a; locale如果需要更改系统编码&#xff0c;可以使用类似下面的命令来生成相应的locale设置&#xff08;以UTF-8为例&#xff09;&#xff1a; sudo localedef -i en_US -f …

这就是ChatGPT,走进我们的生活!

这就是ChatGPT&#xff0c;走进我们的生活&#xff01; 早在年初&#xff0c;合作导师将我叫过去&#xff0c;让我了解学习一下ChatGPT&#xff0c;看能不能对我们的生活有所帮助。一直使用着国内镜像&#xff0c;五月份我才注册了OpenAI的账户。如今&#xff0c;打开购物商城购…

docker小记-容器中启动映射端口号但访问不到

在docker容器中是每一个容器隔离分开的。 每个容器视为一个独立的环境&#xff0c;当在外部环境访问不到的时候就是说明端口号还是没映射到。 之前使用的映射说白了就是将docker中的独立的ip地址端口号映射到主机的ip地址和端口号。这一步没有成功。 docker inspect 容器名 …

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU2

KPU的基础架构 让我们回顾下经典神经网络的基础运算操作&#xff1a; 卷积&#xff08;Convolution&#xff09;:1x1卷积&#xff0c;3x3卷积&#xff0c;5x5及更高的卷积 批归一化&#xff08;Batch Normalization&#xff09; 激活&#xff08;Activate&#xff09; 池化&…