https原理+http状态码+html5 --网络安全基础

目录

网页元素的属性

全局属性(global attributes)----是所有元素都可以使用的属性,可以加在任意一个网页元素上面

id----元素在网页内唯一标识符

class---用来对网页元素进行分类

tabindex

HTML字符编码/HTML实体编码

字符的数字表示法:

字符的实体表示法:

html实体编码运用的例子:

1、( )括号      --- 为了让xss漏洞不执行    

2、限制&符     ---防止实体编码转义、把实体编码过滤了,没有&符实体编码就不成立

3、限制 \        ---因为Unicode编码一般 \u 、限制了 \ 则Unicode编码也转义不了

4、限制大小于号      

5、限制 '  (单引号)    ---不让英文执行

img标签

链接标签

a

href

svg

网址的组成部分

URL 字符转义的方法

https:http + tls / ssl

dns的工作原理

域名服务器​编辑dns几个记录类型                 

递归查询和迭代查询

dns分级查询过程

https原理--RSA密钥协商算法

http安全上存在以下三个风险

https在http与tcp层之间加入了tls协议

以加密的方式来传输必须解决的问题

TLS握手过程

clientHello包---TLS的第一次握手

ServerHello包---TLS的第二次握手

签名

加密

证书签名及客户端校验过程

RSA密钥协商握手过程

TLS的第三次握手

RSA算法的缺陷

GET和POST传参的区别

 状态码

301

302

303

 304

307

308

状态码总结

永久重定向

临时重定向

方法保持

502

504


html5

网页元素的属性

网页元素的属性(attribute)可以定制元素的行为,不同的属性会导致元素有不同的行为、元素属性的写法是 HTML 标签内部的“键值对”

<html lang="en">

上面代码中,<html>标签内部的键值对lang=“en”,就称为html元素的属性。属性名为lang,属性值为en,此处的lang不区分大小写

全局属性(global attributes)----是所有元素都可以使用的属性,可以加在任意一个网页元素上面

常见的全局属性有:id、class、title、tabindex、accesskey、style、hidden、lang,dir、contenteditable、spellcheck、data-属性、事件处理属性

这里只对id、class做介绍

id----元素在网页内唯一标识符

<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>

id的属性值必须全局唯一且属性的值不能包含空格

好处---便于在js中找到精准抓取元素

class---用来对网页元素进行分类

<p class="a"></p>
<p class="a"></p>
<p class="a1 a2 a3"></p>

第一个p和第二个是一类,class属性相同、

元素可以同时有多个 class,它们之间使用空格分隔

class是样式,定义一个样式可以重复使用

在js操作的时候抓取出来的是一个数组

tabindex

简单来说就是当你按下TAB的时候能不能选中这个元素(焦点在不在这个元素上)

<p tabindex="0">        --这段文字获得焦点

这样这段文字就可以获得焦点了

HTML字符编码/HTML实体编码

可以通过一些编码的形式来被html识别到

网页包含了大量的文字,浏览器必须知道这些文字的编码方法,才能把文字还原出来

字符的数字表示法:

字符的码点表示法是&#N;(十进制,N代表码点)或者&#xN;(十六进制,N代表码点)

这里是使用ASCII码,hello也可根据下面这个简单的推理出来(详细的可以查ASCII码表,常用的需要记忆)

<p>hello</p>
<p>&#104;&#101;&#108;&#108;&#111;</p>     --十进制
<p>&#x68;&#x65;&#x6c;&#x6c;&#x6f;</p>     --十六进制

Bin(二进制)  Oct(八进制) Dec(十进制) Hex(十六进制) 缩写/字符  解释
0100  0001     0101          65         0x41        A    大写字母A
0110  0001     0141          97         0x61        a    小写字母a

字符的实体表示法:

HTML 为一些特殊字符,规定了容易记忆的名字,允许通过名字来表示它们,下面给大家列出几个常用的(详细的可以查阅资料)

<:&lt;

>:&gt;

":&quot;

':&apos;

空格:&nbsp;

html实体编码运用的例子:

 这里是在img下输出的、GET是一个输入

replace在这把数组里的字符全都替换成空了,在输入的时候替换了

1、( )括号      --- 为了让xss漏洞不执行    

这里可以看到在alert弹窗下,没有了括号便无法执行、

而 ` ` 可以绕过括号执行

2、限制&符     ---防止实体编码转义、把实体编码过滤了,没有&符实体编码就不成立

3、限制 \        ---因为Unicode编码一般 \u 、限制了 \ 则Unicode编码也转义不了

下图\u0061\u006c…………其实就是alert弹窗的转义,限制了 \ 则也无法转义

上面写了两个 \\ 是为了防止转义,写了两个再次转义将其变成了普通字符

4、限制大小于号      

<script>       ---可以正常执行
script         ---限制了大小于号可见这是执行不了的

5、限制 '  (单引号)    ---不让英文执行

alert(1)       ---数字可以不用' '(单引号)
alert('abc')    ---英文的时候就需要用' ' (单引号)

这里就把常见的能想到的都过滤掉了(实体编码、Unicode编码、<>、' '、()),这样要输出的东西是几乎很难很难成功的

img标签

img标签起到一个加载图片的一个作用(可以用相对路径或者绝对路径)

而里面有一个onerror的一个函数(是js里的一个函数),当前面加载出错的时候就自动出发后面的一个函数,例如下面,img写了一个没有的“1”,则加载错误后将自动触发后面的弹窗

img标签可以通过onerror触发xss漏洞,有一定危险性(危险性来自于img后面的onerror)

<img src="1" onerror=alert(1) alt="">

链接标签

允许用户在页面上,从一个网址跳转到另一个网址,从而把所有资源联系在一起

a

链接通过<a>标签表示,用户点击后,浏览器会跳转到指定的网址

href

href属性给出链接指向的网址

支持js函数

 跳转了,也弹窗了 

svg

用于画图 

 但是他onload属性是支持js的,可以用于触发弹窗

<script>

还有下面一些其他属性,大部分跟 JavaScript 语言有关,可以参考相关的 JavaScript 教程。

async:该属性指定 JavaScript 代码为异步执行,不是造成阻塞效果,JavaScript 代码默认是同步执行。

defer:该属性指定 JavaScript 代码不是立即执行,而是页面解析完成后执行。

crossorigin:如果采用这个属性,就会采用跨域的方式加载外部脚本,即 HTTP 请求的头信息会加上origin字段。

integrity:给出外部脚本的哈希值,防止脚本被篡改。只有哈希值相符的外部脚本,才会执行。

nonce:一个密码随机数,由服务器在 HTTP 头信息里面给出,每次加载脚本都不一样。它相当于给出了内嵌脚本的白名单,只有在白名单内的脚本才能执行。

referrerpolicy:HTTP 请求的Referer字段的处理方法

网址的组成部分

https://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#anchor

URL 字符转义的方法

在这些字符的十六进制 ASCII 码前面加上百分号(%)。下面是这18个字符及其转义形式

!:%21

#:%23

$:%24

&:%26

':%27

(:%28

):%29

*:%2A

+:%2B

,:%2C

/:%2F

::%3A

;:%3B

=:%3D

?:%3F

@:%40

[:%5B

]:%5D

举例来说,有一个网页的 URL 是foo?bar.html,即文件里面包含一个问号,那么需要写成foo%3Fbar.html

URL 的合法字符,其实也可以采用这种转义方法,但是不建议使用。比如,字母a的十六进制 ASCII 码是61,转义形式后就是%61。因此,www.apple.com又可以写成www.%61pple.com,浏览器一样识别。

值得注意的是,空格的转义形式是%20。对于那些包含空格的文件名,这个转义是必须的

https:http + tls / ssl

dns:www.example.com

对于网络方面的ping、我们发现同样是ping  www.baidu.com的时候两个图的ttl值是不一样的,

首先学习过hcia知识的我们知道ttl值是Time To Live(生存时间)值,最大为255,每经过一个路由器将-1,到0后则自动丢弃,

window主机的ttl值一般为128

Linux主机的ttl值一般为64

Unix主机的ttl值一般为255

而下图却出现了128、难道百度服务器是window?还是百度服务器修改了ttl值?还是ttl值骗人了?如果说百度服务器是window,而ttl是128,那就是没有经过路由器,那百度服务器就架设在我们身边?

那当然不是上面的说法,我们也知道现在的服务器基本都是Linux,而基本没有使用window架设的服务器,百度也没有修改,没有骗人,而是因为我们的上网环境不用,第一张图是使用虚拟机ping的百度,我们的上网形式是nat,所以我们在ping百度的时候真正的是虚拟机找的我们的物理机(主机),我们的物理机去ping的百度,显示ttl=128是找的我们的物理机,我们的物理机是window、ttl是128

dns的工作原理

域名服务器dns几个记录类型                 

A:地址记录、将域名指向一个ip地址 

NS:域名服务器记录,返回保存下一级域名信息的服务器地址,只能是域名地址,不能是ip地址

MX:邮件记录,返回接收电子邮件的服务器地址

CNMAE:规范名记录,也可以叫做是别名记录,用于将一个域名映射到另一个域名

为了清晰dns的查询过程,在网上找了一张图

递归查询和迭代查询

一、主机向本地域名服务器的查询一般都是采用递归查询

二、本地域名服务器向根域名服务器的查询的迭代查询

用dig解析一下百度就可以看到A记录,CNAME了

[root@localhost ~]# dig www.baidu.com

dns分级查询过程

[root@localhost ~]# dig +trace www.baidu.com

 这里看到首先解析的是根域服务器  

 然后到com   

 最后baidu.com

然后baidu把解析的结果发送回本地

根域找com;com找baidu;baidu把解析结果发送给本地

谁来解析com呢

使用dig ns com可以看到这些会解析com 

同样的道理,我们可以看看谁来解析cn、 

本地的dns缓存查询方法

win+r输入cmd后
ipconfig /displaydns

请求路径:path/to/myfile.html

GET传参的一个参数:key1=value1

想要给后端传一个参数,用GET方式传参必须以地址栏的方式传输,host是form表单的方式传输

GET就必须写出key=value

 这样就接到了,前端的key传什么,后端接什么 

https原理--RSA密钥协商算法

HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。

http安全上存在以下三个风险

窃听风险比如通信链路上可以获取通信内容,用户号容易没

篡改风险:比如强制植入垃圾广告,视觉污染

冒充风险:比如冒充淘宝网站,容易把用户的前骗了

https在http与tcp层之间加入了tls协议

以加密的方式来传输必须解决的问题

1、谁来加密 加密密钥

2、加密密钥如何从客户端安全传输到服务端

3、客户端如何识别服务端的合法性

4、传输信息如何高效进行

有了 TLS 协议,能保证 HTTP 通信是安全的了,那么在进行 HTTP 通信前,需要先进行 TLS 握手

TLS握手过程

 让我们来抓包看看、以www.weibo.com来举例子

我们通过ping www.weibo.com 得到了微博的ip地址,然后打开wireshark,并在网页上访问微博

然后在wireshark里进行过滤找到49.7.37.76,可以找到一个TLSv1.2(tls版本1.2)的包

clientHello包---TLS的第一次握手

 点进去我们可以看到这是一个tls的包

里面有tls的版本(Version)

随机数(Random)

 密码套件

ServerHello包---TLS的第二次握手

里面也同样有版本号、密码套件,密码套件选择RSA(非对称加密) AES (对称加密)密钥

第二次握手选定了密码套件

密码摘要(哈希摘要算法):SHA256          另一种哈希摘要算法是MD5

md5加密算法:下图可以清晰的看到,md5加密和解密(只要密码足够复杂,就基本解密不了)

这种比较简单的密码就直接解密了,足够复杂就基本不能逆向解密了,比较安全

 md5可以防止篡改、

可以比对前后的哈希数来看出数据有没有被篡改

我们创建了了一个aaa.txt,看到一个哈希值

[root@localhost ~]# md5sum aaa.txt

 我们现在来对他进行修改

可以清晰的发现,我们篡改过后,两次哈希值已经完全不一样了,我们只需要把官方给的哈希值和现在的稍微进行比对,便可以知道数据有没有被篡改

server发完以后还会发一个证书(涉及到合法性的校验)

证书--验证服务端的合法性(他把公钥发给你了)

签名

私钥加密,公钥解密(私加公解叫签名)

加密

公钥加密,私钥解密(公加私解叫加密)

证书签名及客户端校验过程

1、用Hash蓝色部分的经过Hash算法和CA私钥的加密签名(橙色部分)给客户端了

2、客户端拿到以后首先把蓝色部分内容用相同的Hash算法(前两步定好的密码套件)进行一次加密得到绿色部分的Hash Value H1

3、客户端通过CA公钥解密把CA签名的重新解密,得到了粉色部分的Hash Value H2

4、对比H1和H2,如果H1与H2不一样,那么直接通信结束,服务端已经被篡改,如果H1与H2相同,则证明了服务端具有合法性              ----解决了如何保证服务端合法性的问题

RSA密钥协商握手过程

上述已经讲述了校验证书的一些过程了,校验证书没问题过后,服务端就把公钥给取出来了

 然后客户端又生成了一个密文:pre-master

客户端随机数+服务器随机数+pre-master最后算出一个会话密钥 

 这时候服务端还少一个pre-master,这时候直接用服务器的公钥进行加密,传递过去,因为任何人都没有服务器的私钥,没有办法进行篡改或查看

然后使用服务器的私钥解密把pre-master取出来,然后两边的三个元素就一致了

TLS的第三次握手

至此,客户端和服务端双方都共享了三个随机数,分别是 Client Random、Server Random、pre-master

双方根据已经得到的三个随机数 ,会算出一个会话密钥,这个会话密钥就是最终对称加密的密钥了,这就是TLS的第三次握手

这里面一共涉及到了:

1、签名                           ---为了验证服务端的合法性

2、随机数的传递             ---算出会话密钥

算出会话密钥之后就开始了使用这一个密钥进行正常通信了

到这里https原理RSA密钥协商算法就已经差不多结束了下面来讲讲RSA算法的缺陷

RSA算法的缺陷

使用 RSA 密钥协商算法的最大问题是不支持前向保密。因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密的,服务端收到后,会用私钥解密得到随机数。所以一旦服务端的私钥泄漏了,过去被第三方截获的所有 TLS 通讯密文都会被破解

于是就有了DH密钥协商算法,DH密钥协商算法跟RSA差不多,但区别在于DH 密钥交换过程中,即使第三方截获了 TLS 握手阶段传递的公钥,在不知道的私钥的情况下,也是无法计算出密钥的,而且每一次对称加密密钥都是实时生成的,实现前向保密

由于DH密钥协商算法每一次对称加密的密钥都是实时生成的,所以效率比较低下,所以并没有广泛使用 

后面出现了 ECDHE 密钥协商算法,我们现在大多数网站使用的正是 ECDHE 密钥协商算法

 还是以上面抓包的例子

可以看到确实是ECDHE密钥协商算法

GET和POST传参的区别

GET传参在url可以看到,所以不安全,我们来试一试

这里看到是用的GET传参,跟上面说的一样,传什么后端就接什么

 

 我们可以看到他把我们传递的数据就先是在了url栏里了

如果使用POST传参

先改成post

然后后头也需要改成POST

 可见url里没有出现我们传递的数据

 状态码

 Status Code

 我们在c.php中GET、POST跳转都接收一下

301

 我们也可以清楚的看到301跳转POST传参变成了GET传参了,方法变了

 

302

 我们可以看到301和302是没有明显的变化的方法也是从POST转成了GET

但301会缓存,而302确实临时重定向,是不缓存的

303

 我们看到302和303其实并没有很大的区别,也是改变了方法,也是不缓存的(临时重定向)

 304

我们发现使用304的时候根本没有进行跳转,所以我们可以知道304不进行跳转,只使用缓存,只是告诉浏览器,资源没有修改,使用缓存就好了,并且不会返回任何相应主体,因此304并不跳

307

 307属于临时重定向,我们可以看到POST还是POST,没有改变方法

308

我们可以看到307和308区别也不大,区别在于一个可以缓存(永久重定向)一个不缓存(临时重定向),307和308都可以方法保持

状态码总结

缓存(永久重定向)不缓存(临时重定向)
转GET301302、303
方法保持308307

永久重定向

浏览器客户端会缓存此次重定向结果,下次如果有则直接从缓存读取,我们切换域名,将所有老域名的流量转入新域名,可以永久重定向

临时重定向

浏览器不会缓存,服务器临时升级,会使用临时重定向

方法保持

方法保持的意思是原请求和重定向的请求是否使用相同的方法,例如:POST提交一个表单,如果是301重定向的话,重定向的请求会转为GET重新提交,如果是308则会保持原来的POST请求不变

结论:

1、3xx开头的HTTP状态码都表示重定向的响应

2、301、308是永久重定向、302、303、307是临时重定向

302常用于前后台登录

502

网关错误,后端服务器tomcat没有起来

504

网关超时,一般计算机中超时就是配置错了,一般指nginx反向代理服务器时,所连接的服务器tomcat无响应导致的

从网络的角度,502已经与后端进行了连接,但超时

504与后端连接未建立,超时

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Web前端开发需要掌握的网络基础知识括: - HTML: 超文本标记语言,用于描述网页的结构 - CSS: 层叠样式表,用于控制网页的外观 - JavaScript: 用于控制网页的行为 - HTTP: 超文本传输协议,用于在浏览器和服务器之间传输数据 - HTTPS: 安全的HTTP协议,用于在浏览器和服务器之间传输加密数据 - AJAX: 异步javascript和XML,用于在网页上实现异步数据交互 - API: 应用程序编程接口,用于网页和服务器之间传输数据 - IP地址,DNS,TCP/UDP,端口号,这些都是基础网络知识 ### 回答2: Web前端开发需要掌握以下网络基础知识: 1. HTTP协议:了解HTTP协议的基本概念、请求方法、状态码、报文格式等。掌握HTTP请求和响应过程,以及常见的HTTP头部字段。 2. 网络通信基础:了解TCP/IP协议族的基本原理和工作机制,括IP地址、域名解析、端口等。理解TCP和UDP协议的区别和特点。 3. DNS解析:了解域名系统(DNS)的作用和工作原理括域名解析过程、DNS缓存等。掌握如何配置和管理域名。 4. 网络安全:了解网络安全的基本概念,括跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、SQL注入等常见的网络安全问题。学习如何防范和处理这些安全漏洞。 5. WebSocket:了解WebSocket协议的基本原理和特点,能够使用WebSocket实现实时通信功能。 6. 前后端交互:掌握AJAX技术,了解JSON、XML等数据格式的基本概念。能够使用XMLHttpRequest对象向服务器发送异步请求,获取并处理服务器返回的数据。 7. 网络调试工具:掌握常用的网络调试工具,如浏览器开发者工具、Postman等,能够利用这些工具进行网络请求的调试和分析。 8. 前端性能优化:了解前端性能优化的基本原则和常用方法,如压缩资源、合并文件、使用CDN等。能够通过优化网络请求和渲染流程来提升网页的加载速度和响应性能。 总之,掌握了这些网络基础知识,能够更好地理解Web前端开发中的网络交互过程,解决常见的网络问题,并进行性能优化,从而提供更好的用户体验。 ### 回答3: Web前端开发需要掌握以下网络基础知识: 1. HTTP协议:了解HTTP协议的工作原理和常见的请求方法(GET、POST等),了解HTTP头部信息和状态码的含义,以及HTTP的持久连接和缓存等相关概念。 2. HTML和CSS:熟悉HTML和CSS的基本语法和常用标签,了解HTML文档的结构和CSS样式的应用方式,能够根据设计稿实现页面的布局和样式。 3. JavaScript:熟悉JavaScript的基本语法和常用的DOM操作,了解事件处理、Ajax和跨域请求等基本概念,能够编写简单的交互逻辑和动态网页。 4. 网络安全:了解常见的网络攻击方式(如XSS和CSRF)以及相应的防御方法,熟悉HTTPS协议的工作原理和使用方式,能够编写安全性较高的前端代码。 5. 前端性能优化:了解前端页面加载的过程和性能优化的方法,括减少HTTP请求、压缩和合并静态资源、使用缓存、异步加载等。 6. 浏览器原理:了解浏览器的工作原理括渲染引擎的处理流程、页面解析和布局、渲染性能优化等,能够针对不同浏览器进行兼容性处理。 7. 前端框架和工具:熟悉常用的前端框架和工具(如React、Vue、Webpack等),了解它们的工作原理和使用方式,能够快速搭建和优化项目。 综上所述,掌握以上网络基础知识能够使前端开发者更好地理解和应用Web技术,提高开发效率和网页性能,并且能够处理一些网络安全和兼容性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值