网络安全笔记-Web架构
Web工作机制
- 网址
本地缓存->host->IP/ARP->DNS->IP->网关->路由->到达对方主机->访问80 443->3次握手->建立连接->发送HTTP数据包->HTTP响应(.html文件->.php->. mysql->.php运行结果)
- 网页、网站
多个网页的集合就是网站。网页一般都是经过浏览器渲染过的.html页面,包含css等前端技术。 - Web容器
也叫Web服务器,主要提供Web服务,也就是常说的HTTP服务。
常见的Web容器有Apache/IIS/Nginx等 - 静态的网页
静态的网页,都是一些.html文件,是纯文本文件。这些文件中包含html代码。
HTML(超文本标记语言)在浏览器中解释运行。 - 中间件服务器(传统意义上是asp,php,现在模糊了中间件和web容器的概念)
以上这种,只能单向地给用户展示信息。随着Web的发展,信息要双向流动,产生了交互的需求,也就是动态网页的概念;所谓动态就是利用flash、Phpasp, Java等技术在网页中嵌入一些可运行的脚本,用户浏览器在解释页面时,遇到脚本就启动运行它。
脚本的使用让Web服务模式有了“双向交流”的能力,Web服务模式也可以象传统软件一样进行各种事务处理,如编辑文件、利息计算、提交表单等,Web架构的适用面大大扩展。
这些脚本可以嵌入在页面中,如JS等。也可以以文件的形式单独存放在Web服务器的目录里,如.asp,php,jsp文件等。这样功能性的脚本越来越多形成常用的工具包,单独管理,Web业务开发时,直接使用就可以了,这就是中间件服务器,它实际上是Web服务器处理能力的扩展。 - 数据库的出现
静态网页与脚本都是事前设计好的,一般不经常改动,但网站上很多内容需要经常的更新,如新闻、博客文章、互动游戏等,这些变动的数据放在静态的程序中显然不适合,传统的办法是数据与程序分离,采用专业的数据库。
Web开发者在Web服务器后边增加了一个数据库服务器,这些经常变化的数据存进数据库,可以随时更新。当用户请求页面时,脚本根据用户请求的页面,涉及到动态数据的地方,利用SQL数据库语言,从数据中读取最新的数据生成“完整"页面,最后送给用户。
HTTP 协议
HTTP (HyperText Transfer Protocol,超文本传输协议)是浏览器与Web服务器之间的通信协议,是传递消息的规范和要求。
概述
- 1990年提出的,当前版本2.0。
- HTTP 是用来将html文档从Web服务器传输到web浏览器。
- 是一个请求和响应的协议。客户端发出请求,服务器端对请求给出回应。
- HTTP 使用可靠的TCP 连接,默认端口80。
特点
- 支持浏览器/服务器模式。
- 简单快速:浏览器向服务器提出请求时,只需要传送请求方法和请求路径。
- 灵活:HTTP运行传输任意类型的数据对象
- .html 纯文本
- .jpg 图片
- .mp3 音频
- HTTP 协议是无状态的协议。
URL
统一资源定位符(网址),用来告诉web容器,浏览器所请求资源(文件)的路径。例如:
http://localhost/test/request.php?name=ajest
schema://login: password@address:port/path/to/resource/?query_string#fragment
port 80
Login 用户名
address 地址
password 密码 匿名访问时,默认没有这两个内容
fragment 锚点 实现页面内定位
- URL编码
URL中允许出现的字符是有限制的, URL 中path开始允许直接出现A-Za-z0-9
半角减号(-)、下划线句点(.)、波浪号(~)。其他字符均会被百分号编码。
如下:# %23
[] 空格 %20
%+ASCII 码十六进制形式- 报文分析工具
- F2
- wireshark
- fiddler
- burp suite
- 报文分析工具
HTTP报文分析
Web应用的所有通信的消息都要遵守HTTP协议的规范和要求。
Request请求报文
GET /php/test/get. php HTTP/1.1 请求行
Host: 172.16.132.161
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv: 69.0)Gecko/20100101 Firefox/69.0
Accept:text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8
Accept-Language:zh-CN, zh; q=0.8, zh-TW; q=0.7, zh-HK; q=0.5, en-US; q=0.3, en; q=0.2Accept-Encoding: gzip, deflate
Referer: http://172.16.132.161/php/test/
Connection: close
Upg rade-Insecure-Requests: 1
Cache-Control: max-age=0
其余为请求头。 get方式请求没有请求正文,post有请求正文
HTTP请求由请求行、请求头、请求正文三部分组成。
1、请求行:方法,资源路径,协议/版本。
方法:GET
资源路径:/php/test/get. php
协议/版本:HTTP/1.1
2、请求头
从请求报文第二行开始到第一个空行为止之间的内容,其中包含很多字段。
3、请求正文
以上GET方法中没有请求正文。
HTTP请求方法
- GET
GET是最常用的方法,通常用于请求服务器发送的某个资源。- POST
POST 方法可以向服务器提交参数以及表单,包括文件流等。- HEAD
与GET 方法类似,但在服务器响应中只返回首部。- PUT
与GET从服务器读取文档相反, PUT 方法会向服务器写入文档。- TRACE 回显浏览器的请求。
- OPTIONS
OPTIONS方法请求Web 服务器告知其支持的各种功能。- DELETE
DELETE 方法请求服务器删除请求URL所指定的资源。
请求头主要字段
- Host
Host: 172.16.132.161
主要用于指定被请求资源的Internet主机和端口号- User-Agent
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:
69.0)Gecko/20100101 Firefox/69.0
浏览器指纹- Referer
Referer: http://172.16.132.161/php/test/
包含一个URL,代表当前URL的上一个URL- Cookie
记录请求者的身份认证信息- Accept-Charset
用于指定客户端接收的字符集- Content-Type
用于向接收方指示实体的介质类型(数据类型)- Content-Length
用于指明实体正文的长度,以字节方式存储的十进制数字来表示。- Last-Modified
用于指示资源的最后修改时间和日期
Response响应报文
HTTP/1.1 200 OK
Date: Sun, 29 Sep 2019 08:43:35 GMT
Server- Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/htmlarray (0){
}
响应报文由状态行、响应头、响应正文三部分组成
1、状态行:协议/版本,状态代码,描述短语
HTTP/1.1 200 OK
2、响应头:
从第二行开始到第一个空行为止之间的内容,其中包含了关于HTTP响应的重要字段。
3、响应正文:
服务器返回资源的内容,即浏览器接收到的HTML代码。
状态代码
100~199
信息性状态码
200~299
成功状态码
300~399
重定向状态码
400~499
客户端错误状态码
500~599
服务器错误状态码
响应头主要字段
Server
服务器指纹
Set-Cookie
向浏览器端设置Cookie
Last-Modified
服务器通过这个头信息告诉浏览器,资源的最后修改时 间
Content-Length
正文的长度
Location
重定向目标页面
Refresh
服务器通过Refresh头告诉浏览器定时刷新浏览器
Cookie 与Session 机制
HTTP 协议本身是无状态的协议, HTTP
不会记录前一次传输的数据信息。而很多情况下,我们和服务器之间的一个会话不是一个动作就完成了,所以我们希望能在客户端和服务器这个交互的会话期间内,服务器能够保持对客户端会话的识别,也就是保持http 的状态性,Cookie应运而生。
- Cookie
是指网站为了辨别用户身份、进行Session(会话)跟踪而存储在用户本地终端上的数据(通常经过加密)
客户端在浏览多个页面时,提供事务的功能,为服务器提供状态管理。例 如:购物车可以为每个用户实现购物统计;实现授权策略,用户不用每个页 面都输入用户名/密码。
为了更好的理解Cookie 机制,我们使用PHP来简单实现Cookie策略。- PHP 中的Cookie 实现
PHP 中的Cookie 简单实现由两个页面组成。
- PHP 中的Cookie 实现
#index.php
<meta charset="utf-8">
<?php
if (isset($_COOKIE ['name' ]) and $_COOKIE [' name ' ] == ' admin '){
echo "欢迎你! " .$_COOKIE [' name ];
echo "<a href='./logout php'>注销</a>";
}else{
echo "
<form action='login.php' method='get'>
username : <input type='text' name=' name '>
password: <input type='password name='pwd'>
<input type='submit'>
</form>
";
}
?>
#login.php
<meta charset="utf-8">
<?php
if(isset($_GET['name']) && $_GET [' name '] =="admin" &&
isset ($_GET [' pwd' ]) && $_GET [' pwd ']=="123456"){
setcookie( ' name', 'admin');//向浏览器写入Cookie信息
name=admin
echo "登录成功! <a href='./index.php'>首页</a>";
}else{
echo "登录失败! <a href='./index. php'>首页</a>";
}
?>
以上代码中的关键函数是set_cookie()
该函数有7个参数,如下
参数 | 名字 | 含义 |
---|---|---|
name | 名称 | Cookie 名称 |
value | 值 | 这个值存储于用户的电脑里,请勿存储敏感信息 |
expire | 过期时间 | 这是个Unix时间戳,如果设置成零或者忽略参数,Cookie会在绘画结束时过期(也就是关掉浏览器时) |
path | 有效路径 | 设置成’/‘时,Cookie对整个域名domain有效。如果设置成’/foo/',Cookie仅仅对domain中/foo/目录及其子目录有效(比如)/foo/bar/)。默认值是设置Cookie时的当前目录 |
domain | 有效域名 | 设置成子域名(例如’www.example.com’),会使Cookie对这个子域名和它的三级域名有效(例如w2.www.example.com)。要让Cookie对整个域名有效(包括它的全部子域名), 只要设置成域名就可以了(这个例子里是’example. com’) |
secure | 安全 | 设置成TRUE时,只有安全连接存在时才会设置Cookie。如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie (通过 $_SERVER [“HTTPS”] 判断) |
httponly | 是包含在http返回头Set-Cookie里面的一个附加的flag,TRUE或FALSE | 设置成TRUE, Cookie仅可通过HTTP 协议访问。这意思就是Cookie 无法通过类似 JavaScript 这样的脚本语言访问。要有效减少XSS攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持) 不过这个说法经常有争议。PHP 5.2.0中添加。 |
- Session 机制
- Session 机制需要借助Cookie来实现。但是二者有明显区别:
- Cookie机制将用户的身份认证信息存储在浏览器端。
- Session 机制是将身份认证信息放在服务器端。
- Session机制从一定程度上解决了Cookie所面临的窃取与欺骗的风险。当然窃取的是Cookie 信息,欺骗的是服务器。
- 二者合一称为固定会话攻击。
同源策略
同源策略是禁止JavaScript进行跨域访问的安全策略。它也是浏览器沙盒环境所提供的一项制约。浏览器可以同时处理多个网站的内容,其典型方法为使用标签页或iframe 等。
- 同源策略的条件
- URL 的主机(FQDN: Fully Qualified Domain Name全称域名)一致
- Schema 协议一致
- 端口号一致
同源策略的保护对象不仅仅是iframe 内的文档。比如,实现Ajax 时所使用的XMLHttpRequest 对象能够访问的URL也受到了同源策略的限制。
- 同源策略探究
准备两个页面
index.html
<html>
<head>
<title>跨frame的读取试验</title>
<meta charset='utf-8'>
</head>
<body>
<iframe name="iframe1" width="300" height="80"
src="http://localhost/sop/iframe.html">
</iframe>
<input type="button" onclick="go()" value=" 密码→ "> <script>function go() {
try {
var x = iframe1.document.form1.passwd.value;
document.getElementById ('out').innerHTML = x;
}catch (e)
alert(e.message);
}
}</script>
<span id="out"></span>
</body>
</html>--------
iframe.html<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<form name="form1">iframe的内层
密码<input type = "text" name="passwd" value="password1"></form>
</body>
</html>
网络安全笔记-Web架构相关推荐
- 网络安全笔记-Web服务器
Web服务器概述 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下 ...
- [网络安全学习篇50]:Web架构安全分析
引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...
- 网络安全学习(渗透测试方法论,web架构安全分析,信息收集)
目录 一.渗透测试方法论 渗透测试种类 *黑盒测试 *白盒测试 *脆弱性评估与渗透测试 二.安全测试方法论 *开放式 Web 应用程序安全项目(Open Web Aplication Security ...
- 千峰网络安全笔记(前三讲)
典中典 <c语言从研发到脱发> <C++从入门到放弃> <Java从跨平台到跨行业> <Ios开发从入门到下架> <Android开发大全--从开 ...
- 网络安全笔记8——虚拟专网技术
网络安全笔记8--VPN技术 参考课程:中国大学MOOC<网络安全>--北京航空航天大学 本文偏向于有关协议的概述,关于VPN的详细介绍(实现技术.作用等)可以阅读我的另一篇文章--虚拟专 ...
- Kali Linux学习笔记—Web渗透(1)
Kali Linux学习笔记-WEB渗透 侦察 Httrack 扫描 Nikto vega skipfish w3af Arachni OWASP_ZAP 必须掌握 Burpsuite 必须掌握 实验 ...
- 2020全年小迪网络安全笔记(目录)
2020小迪网络安全 课程体系/目录: 2020上半年70天 基础入门-第1天 信息收集-第2-3天 漏洞分类-第4天 漏洞发现-第5天 漏洞利用-第6-28天 安全开发-第29-38天 代码审计-第 ...
- web架构设计经验分享
本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...
- Web架构师必备能力
最近和几个朋友在谈到时下流行的Web 2.0,也提到了其中最重要的角色--架构师.多方各有争执,不外乎是因为背景和视角的缘故,包括架构一词,本身就从建筑学借鉴而来,至于架构师,则可以简单地从建筑学的设 ...
最新文章
- 利用OpenCV读取和写入视频
- 信息源按加工深度划分_铝合金插铣加工切削力分析及成屑弧区划分
- 3.1.1 什么是内存?进程的基本原理,深入指令理解其过程
- 深入理解BS结构应用程序
- Mac OS下使用VS Code对C++程序进行debug的配置
- vue 学习中遇到的一些问题
- 【元胞自动机】基于matlab元胞自动机模拟交通流【含Matlab源码 355期】
- NAT篇 双剑合璧,无往不利——双向NAT
- 如何卸载twincat3_TwinCAT软件安装FAQ
- 使用Manjaro作为OpenStreetMap瓦片服务器
- 什么是pch?pch的作用?
- 综述:基于影像基因组学的肺癌诊断治疗方法研究
- 基于单片机的教室照明智能控制系统设计
- 人工智能应用最多的七大领域解析
- Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同
- fixable with the `--fix` option.
- 2014-2022年4月全国空气质量数据分析
- (转载)TRS的WCM6漏洞权限绕过以及绕过密码的登陆方式
- 如何高效的进行项目发版?
- ktv无线服务器,KTV,酒店无线wifi上网无线AP服务器
热门文章
- 微信小程序软键盘回车事件
- 使用telnet来在线调试海思开发板
- 保护眼睛的好方法-适合上班族经常面对电脑的GGMM
- php 字符串编码方式转换,PHP 字符串编码的转换
- 用PS做一个好看的图案
- PS做文字特效nbsp;
- 78 岁华科教授逐梦 40 载,国产数据库达梦冲刺 IPO
- 华为CIO陶景文:华为数字化转型实践(附下载)
- c# http put请求 通用http请求 post get put
- FileNotFoundError: [Errno 2] No such file or directory: ‘pretrained/gated-conv.pth‘