Web 应用程序解析与框架讲解
前置
之前我们只是简述了一下 Web 应用程序的发展过程,携带了后端语言的改变,现在我们在分析,从静态网页到如今的动态网页,改变不仅仅是在后端语言的改变。
还有 Web 应用程序的其他技术改变,数据库、中间件等等…
在此之前,欢迎关注波比网络 培训、环境、资料、考证
波比网络官网:https://www.blbilink.com
波比网络 官方公众号:blbinet
波比网络工作室 官方公众号:blbistudio
获取技术支持访问:https://www.blbi.cn/form/
技能大赛各赛项交流群:https://www.blbi.cn/threads/40/
更多正式赛题源文件访问:https://www.blbi.cn
NISP、CIPS、PTE证书可咨询各大群群主
访问静态网页的过程
我们来看看,通过浏览器 or URL 去访问一个静态网页,数据的传输与响应是什么过程?
我们可以看到,当客户端 Client (也就是我们) 去访问一个简单的静态网站时,由于其网站的搭建特性,仅仅是静态页面,并无数据库与其他后端语言的支撑。
所以我们会先发送一个 HTTP 请求报文,若服务器响应,则会返回一个 HTTP 响应报文,而响应报文中就会携带 HTML 代码以显示出网页的内容,那么 CSS 也从而渲染网页
我们来看看一个服务端的响应包
观察响应数据,其中带有 HTML 代码与 CSS 代码,后端语言为 ASP.NET,同时加载了 CSS 渲染网页
真正访问一个静态网页的过程
服务端接收请求报文的处理过程并不简单
服务端中正真接收处理报文的是 Web 应用服务器 (我们称它为 Web 容器、Web 中间件),常见的 Web 应用服务器有;
-
Apache
-
IIS
-
Tomcat
-
Nginx
…
Web 应用服务器是专门用于提供 HTTP 服务,他会处理接收到的 HTTP 请求、最后构建 HTTP 响应
Apache
https://httpd.apache.org/ 由 Apache 软件基金会(也就是 Apache Software Foundation,简称为 ASF)开发
Apache,一种开放源码的HTTP服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,==是最流行的Web服务器端软件之一。==它快速、可靠并且可通过简单的API扩展,Perl/Python等解释器可被编译到服务器中。
-
开放源代码。
-
跨平台应用,可运行windoows和大多数linux系统。
-
支持perl,php,python和java等多种网页编辑语言。
-
采用模块化设计。
-
运行非常稳定。
-
具有相较好的安全性。
-
提供用户会话过程的跟踪
-
拥有简单而强有力的基于文件的配置过程
-
支持多种方式的HTTP认证
适用于中小型网站架构,后端语言:PHP
IIS
https://www.iis.net/ 由 Microsoft 微软开发
后端语言:asp、aspx,ASP.NET
Tomcat
https://tomcat.apache.org/ Tomcat 是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,支持后端语言为 JSP,Java
Nginx
http://nginx.org/en/download.html
Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 web 服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开发的,公开版本 1.19.6 发布于2020 年 12 月 15 日。
后端语言:PHP
反向代理
https://zhuanlan.zhihu.com/p/491075761
-
其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问
-
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端
-
此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址
Web 中间件处理 HTTP 请求过程
我们以 Apache 为例讲解,Apache 是怎么处理一个 HTTP 请求的过程
动态的网页组成与访问过程
后端语言以 PHP 为例
那么我们在日常上网的过程中会发现,比如虎牙,斗鱼等直播类网站,腾讯,优酷,bilibili 等视频网站,他们要加载的数据是非常庞大的,如果仅仅靠 Web 服务器来解析,会导致服务器的数据传输庞大且流量拥堵,甚至会导致 dos 拒绝服务
那么反过来说,这些庞大的视频或者资源也都不会存储在 Web 应用服务器中,而是一个新的服务器 —— 数据库服务器
数据库服务器解析
庞大的数据存储与访问不是 Web 中间件的强项,这些数据存储最终都被存储在数据库中,比如用户信息、新闻信息、图片信息、日志信息、视频相关信息等等
都是在数据库中存储的,我们常用的数据库有 SQL Server、Mysql、Oracle 等等
数据库可以安装在 Web 服务器上为一些小型网站服务,而大型网站则会单独放置一台数据库服务器,二者均在后端运行,提供数据访问,加快数据传输的过程
那么 Web 服务器 or Web 中间件是如何与数据库相互关联的?
是通过后端语言(PHP,python、java、asp、aspx 等) 来与数据库相关联,起到一个动态查询的过程。
完整的动态网站请求过程与安全分析
完整的动态网站请求过程
通过上面的一些列介绍,我们可想而知,一个 Web 应用程序或者说一个网站,并不是我们所理解的那么简单,他其实是由多个要素组成的一个系统
Web 应用服务器(Apache、Nginx…) + 动态脚本呢引擎(后端服务端语言 PHP …) + 数据库
以上是构成一个强大且动态的 Web 应用必不可少的要求
Web 应用安全问题分析
我们现在都知道了,一个完整的 Web 应用由 中间件+数据库+后端语言组成
那么其组成的一个过程,都是人来开发的
-
人犯错是必不可少的,编写 Web 应用程序源代码的开发者可能会设计出一些不安全的代码漏洞 (SQL XSS CSRF 文件上传…)
-
Web 中间件的也会出现安全漏洞 (Tomcat CVE-2017-12615 PUT 上传漏洞、Nginx CVE-2013-4547 文件名逻辑漏洞 …)
-
数据库也会随着 Web 应用程序被入侵从而出现安全漏洞 ( Redis 未授权访问)
-
浏览器也会出现安全漏洞 ( Google 浏览器经常会爆出一些 RCE 蓝屏漏洞等 )
…
常见的 Web 服务端架构
以下是一些 Web 服务端常见的架构
学运维的好兄弟们都经理过这些,会去一步一步的搭建,但是咋们安全不是搞服务搞运维,所以咋们用一键搭建工具即可,环境的搭建不必较真
我们需要的是快速部署漏洞环境,复现漏洞、理解漏洞原理与成因
以上存在简称:WAMP LAMP WNMP LNMP
- windows Apache Mysql PHP
- windows Nginx Mysql PHP
- Linux Apache Mysql php
- Linux Nginx Mysql php
Web 应用程序环境搭建
我们这里推荐大家使用 phpstudy 搭建一个简单而不失优雅的 Web 应用,未来我们会使用他构建一个又一个拥有缺陷,拥有特定漏洞的 Web 漏洞实验室
案例一:搭建 Windows Server 2008 虚拟机
案例二:使用 PHPstudy 搭建 Web 应用
案例三:Linux 下 LNMP 搭建 Web 应用
案例四:常见服务器 Web 应用 BT 宝塔一键搭建-DNS 解析
hp
Web 应用程序环境搭建
我们这里推荐大家使用 phpstudy 搭建一个简单而不失优雅的 Web 应用,未来我们会使用他构建一个又一个拥有缺陷,拥有特定漏洞的 Web 漏洞实验室