概述
前言:本人自学时总结的Web安全基础,作为笔记分享给大家,如有错误或有更好的思路和见解,不吝赐教~
一、Web站点
1、什么是Web
web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。形象化的理解就是只要和浏览器、网站沾边的都属于Web的范畴。
2、Web站点的组成
- 组成:主要由前端+后端+Web容器
3、前端
- 前端是什么?
前端开发是创建WEB页面或APP等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互。 - 前端在Web中最直观的体现是什么?
前端在Web中最直观的体现就是你所看到的网页 - 常见前端的技术有哪些?
HTML、CSS、Javascript - 将前端比喻成一个人,那么HTML、CSS、Javascript分别代表什么?
HTML:赤裸的身体
CSS:华丽的衣服
Javascript:肢体动作
4、后端
- 后端是什么?
Web开发人员编写的不能直接看到的代码 - 常见后端的语言有哪些?
1、PHP
2、ASP
3、Java
4、Python
5、SQL - 自学网站(包括但不限于):
https://www.w3school.com.cn
https://www.liaoxuefeng.com
https://github.com
https://www.bilibili.com
https://www.baidu.com或https://www.google.com
……
注:一定要学会百度和Google!
5、常见Web容器
- Apache
- IIS
- Nginx
- Tomcat
- Weblogic
- JBOSS
- Jetty
Web容器是中间件的一种,所以,也可以将他们称之为中间件
6、常见数据库
数据库 | 默认端口 |
---|---|
Oracle | 1521 |
Mysql | 3306 |
SQL Server | 1433 |
Redis | 6379 |
PostgreSQL | 5432 |
MongoDB | 27017 |
DB2 | 50000 |
二、主要安全策略和请求过程
1、同源策略
- 什么是同源策略?
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。 - 什么是同源?
1、同协议
2、同域名
3、同端口
下列表中站点与http://www.ccit.js.cn是否同源
站点 | 是否同域 | 原因 |
---|---|---|
https://www.ccit.js.cn | 不同源 | 协议不同,http与https不是同一协议 |
http://test.ccit.js.cn | 不同源 | 域名不同 |
http://www.ccit.js.cn:8888 | 不同源 | 端口不同 |
http://www.ccit.js.cn/info | 同源 | 满足同协议、同域名、同端口 |
2、Web的请求过程
三、网络结构模式B/S&C/S
1、B/S(Browser/Server)
这种模式统一了客户端,让核心的业务处理在服务端完成,即浏览器。只需要在电脑或手机上安装一个浏览器,就可以通过Web Server与数据库进行数据交互。
-
举例:
以访问淘宝为例,当我们访问淘宝时,我们的电脑(浏览器)就是客户机之一,淘宝的代码(首脑)在web服务器中,而淘宝用户的信息存放在数据库服务器中。 -
站库分离的思想
上图所示就是站库分离,网站和数据库不在同一个服务器上,这种模式更快,更安全。这样黑客攻击拿下了Web服务器并没有获得太多敏感数据,还需要继续拿下数据库才可。
2、C/S(Client/Server)
- 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统。客户端需要安装专用的客户端软件
- C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
- 客户机(客户端软件)通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。
举例:
安装在手机或电脑中的QQ或微信就是客户端软件,储存QQ或微信信息的就是Server服务器
四、URI/URL/DNS/CDN
1、URI/URL
- URI:统一资源标识符
- URL:统一资源定位符
URL是URI的一个子集,也可以理解为URI是抽象的,URL是具体的 - URL格式:
2、DNS
- 什么是DNS?
DNS(Domain Name System)服务提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址访问。
DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。 - 为什么要使用DNS?
Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址比较长记起来不方便,于是就有了DNS - 什么是CDN?
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
举例:通过CDN加速的域名为www.baidu.com,接入CDN网络,开始使用加速服务后,当终端用户发起HTTP请求时,处理流程如下:
1、终端用户向www.baidu.com下的指定资源发起请求时,首先通过DNS查找离用户最近的CDN节点(边缘服务器)的IP
2、通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
五、HTTP/HTTPS
1、HTTP
- 什么是HTTP?
超文本传输协议,HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要
是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等 - HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。 - HTTP的特性
(1)客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
(2)HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力,每个请求都是独立的。就是网页一关闭,浏览器和服务端的连接就会断开,下次打开网页又要重新连接,服务器无法从你一打开的连接上恢复上一次的会话,即HTTP协议自身不对请求和响应之间的通信状态进行保存。
(3)HTTP目前支持持久连接,在HTTP /0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP /1.1中,引入了保持活动机制,其中连接可以重用于多个请求。持久连接表示使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。即当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
2、GET请求
举例:http://www.ccit.js.cn/
GET / HTTP/1.1
Host: www.ccit.js.cn
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8
Cookie: _qddaz=QD.xkl6jd.mve7l8.kmlfk7ps; UM_distinctid=1785df94858454-04e1d31a1d8f8e-5771031-1fa400-1785df948594f;
JSESSIONID=A5C940CF300EB093235822565C1A932D
If-None-Match: W/"37140-1616486823000-gzip"
If-Modified-Since: Tue, 23 Mar 2021 08:07:03 GMT
举例:http://www.ccit.js.cn/zjcx/xxjj/xxjs.htm
GET /zjcx/xxjj/xxjs.htm HTTP/1.1
Host: www.ccit.js.cn
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://www.ccit.js.cn/
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8
Cookie: _qddaz=QD.xkl6jd.mve7l8.kmlfk7ps; UM_distinctid=1785df94858454-04e1d31a1d8f8e-5771031-1fa400-1785df948594f;
JSESSIONID=A5C940CF300EB093235822565C1A932D
3、HEAD请求
用两幅图进行对比
4、POST请求
5、HTTP状态码
- 释义
HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。
数字 | 类别 | 原因 |
---|---|---|
1XX | informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
6、常用的14种状态码
2XX 成功 | 原因 |
---|---|
200 OK | 表示从客户端发来的请求在服务器端被正常处理了 |
204 No Content | 表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体部分 |
206 Partial Content | 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 |
3XX 重定向 | 原因 |
301 Moved Permanently | 永久性重定向。表示请求的资源被分配了新的URL,以后应使用资源现在所指的URL |
302 Found | 临时重定向。表示请求的资源已被分配了新的URL,希望用户(本次)能使用新的URL访问 |
303 See Other | 表示由于请求对应资源存在着另一个URL,应使用GET的方法定向获取请求的资源 |
304 Not Modified | 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified |
307 Temporary Redirect | 临时重定向。与302 Found有着相同的含义 |
4XX 客户端错误 | 原因 |
400 Bad Request | 表示请求报文中存在语法错误 |
401 Unauthorized | 表示发送的请求需要有通过HTTP认证的认证信息 |
403 Forbidden | 表示对请求资源的访问被服务器拒绝了 |
404 Not Found | 表示服务器上无法找到请求的资源 |
5XX 服务器错误 | 原因 |
500 Internal Server Error | 表示服务器端在执行请求时发生了错误 |
503 Service Unavailable | 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请 |
7、HTTP报文结构
HTTP协议的请求和响应报文中必定包含 HTTP 首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息中的大部分内容都无须亲自查看
报文首部由以下几个字段构成:
8、HTTP请求报文
在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP首部字段等部分构成。
举例:
9、HTTP响应报文
在响应报文中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成。
举例:
10、HTTP首部字段
- 含义
HTTP首部字段是构成HTTP报文的要素之一。在客户端与服务器之间以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。 - 首部字段格式
首部字段名: 字段值
- 举例
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
11、4种HTTP首部字段类型
- 通用首部字段(General Header Fields)
请求报文和响应报文两方都会使用的首部。 - 请求首部字段(Request Header Fields)
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等
信息。 - 响应首部字段(Response Header Fields)
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。 - 实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
12、通用首部字段
通用首部字段是指请求报文和响应报文双方都会使用的首部。
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
13、请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
首部字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
If-Range | 资源未更新时发送实体Byte的范围请求 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中URI的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP客户端程序的信息 |
14、响应首部字段
响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。
首部字段名 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
15、实体首部字段
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。
首部字段名 | 说明 |
---|---|
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
16、其它首部字段
首部字段名 | 说明 | 首部类型 |
---|---|---|
Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
X-Forwarded-For | 本地IP或代理IP(格式:X-Forwarded-For: client, proxy1, proxy2) | 请求首部字段 |
client-ip | 客户端IP | 请求首部字段 |
Set-Cookie | 开始状态管理所使用Cookie信息 | 响应首部字段 |
17、HTTPS
-
HTTP主要有以下不足
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,有可能已遭篡改
-
HTTPS= HTTP+SSL(加密+认证+完整性保护)
六、Cookie/Session
1、Cookie
- Cookie简介
网站为了辨别用户身份而储存在本地客户端浏览器中的数据,由客户端暂时或永久保存的信息。 - Cookie生成流程
客户端请求目标网站,由目标网站服务器为客户端颁发一个Cookie,随后该Cookie保存在本地浏览器中,下次再
次请求该网站时带入请求包中 - 举例
浏览器QQ邮箱的用户名保存、浏览器中各网站Cookie的保存、买奶茶事例
2、Session
-
Session简介
称为会话控制,Session存储特定用户会话所需的属性、配置信息、用户信息等于服务器中 -
举例
淘宝、京东你专属的购物车,购买记录,保存在服务器 -
Session生成流程
最后
以上就是精明冰棍为你收集整理的Web安全基础的全部内容,希望文章能够帮你解决Web安全基础所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复