网络安全之Web开发-Day01


目录:

1.1. Web技术演化

1.1.1. 静态页面

Web技术在最初阶段,网站的主要内容是静态的,大多站点托管在ISP(互联网服务提供商)上,由文字和图片组成,制作和表现形式也是以表格为主。当时的用户行为也非常简单,基本只是浏览网页。

1.1.2. 多媒体阶段

随着技术的不断发展,音频、视频、Flash等多媒体技术诞生了。多媒体的加入使得网页变得更加生动形象,网页上的交互也给用户带来了更好的体验。

1.1.3. CGI阶段

渐渐的,多媒体已经不能满足人们的请求,于是CGI(公共网关接口)应运而生。CGI定义了Web服务器与外部应用程序之间的通信接口标准,因此Web服务器可以通过CGI执行外部程序,让外部程序根据Web请求内容生成动态的内容。

在这个时候,各种编程语言如PHP/ASP/JSP也逐渐加入市场,基于这些语言可以实现更加模块化的、功能更强大的应用程序。

1.1.4. Ajax

在开始的时候,用户提交整个表单后才能获取结果,用户体验极差。于是Ajax(Asynchronous Javascript And XML)技术逐渐流行起来,它使得应用在不更新整个页面的前提下也可以获得或更新数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。

1.1.5. MVC

随着Web应用开发越来越标准化,出现了MVC等思想。MVC是Model/View/Control的缩写,Model用于封装数据和数据处理方法,视图View是数据的HTML展现,控制器Controller负责响应请求,协调Model和View。

Model,View和Controller的分开,是一种典型的关注点分离的思想,使得代码复用性和组织性更好,Web应用的配置性和灵活性也越来越好。而数据访问也逐渐通过面向对象的方式来替代直接的SQL访问,出现了ORM(Object Relation Mapping)的概念。

除了MVC,类似的设计思想还有MVP,MVVM等。

1.1.6. RESTful

在CGI时期,前后端通常是没有做严格区分的,随着解耦和的需求不断增加,前后端的概念开始变得清晰。前端主要指网站前台部分,运行在PC端、移动端等浏览器上展现给用户浏览的网页,由HTML5、CSS3、JavaScript组成。后端主要指网站的逻辑部分,涉及数据的增删改查等。

此时,REST(Representation State Transformation)逐渐成为一种流行的Web架构风格。

REST鼓励基于URL来组织系统功能,充分利用HTTP本身的语义,而不是仅仅将HTTP作为一种远程数据传输协议。一般RESTful有以下的特征:
  • 域名和主域名分开
    • api.example.com
    • example.com/api/
  • 带有版本控制
    • api.example.com/v1
    • api.example.com/v2
  • 使用URL定位资源
    • GET /users 获取所有用户
    • GET /team/:team/users 获取某团队所有用户
    • POST /users 创建用户
    • PATCH/PUT /users 修改某个用户数据
    • DELETE /users 删除某个用户数据
  • 用 HTTP 动词描述操作
    • GET 获取资源,单个或多个
    • POST 创建资源
    • PUT/PATCH 更新资源,客户端提供完整的资源数据
    • DELETE 删除资源
  • 正确使用状态码
    • 使用状态码提高返回数据的可读性
  • 默认使用 JSON 作为数据响应格式
  • 有清晰的文档

1.1.7. 云服务

云计算诞生之前,大部分计算资源是处于“裸金属”状态的物理机,运维人员选择对应规格的硬件,建设机房的 IDC 网络,完成服务的提供,投入硬件基础建设和维护的成本很高。云服务出现之后,使用者可以直接购买云主机,基础设施由供应商管理,这种方式也被称作 IaaS(Infrastructure-as-a-Service)。

在这个阶段,Web的架构也越发复杂,代理服务、负载均衡、数据库分表、异地容灾、缓存、CDN、消息队列、安全防护等技术应用越来越广泛,增加了Web开发和运维的复杂度。

随着架构的继续发展,应用的运行更加细粒度,部署环境容器化,各个功能拆成微服务或是Serverless的架构。

1.1.7.1. Serverless

Serverless 架构由两部分组成,即 Faas(Function-as-a-Service) 和 BaaS(Backend-as-a-Service)。

FaaS 是运行平台,用户上传需要执行的逻辑函数如一些定时任务、数据处理任务等到云函数平台,配置执行条件触发器、路由等等,就可以通过云平台完成函数的执行。

BaaS 包含了后端服务组件,它基于 API 完成第三方服务,主要是数据库、对象存储、消息队列、日志服务等等。

1.1.7.2. CI/CD

持续集成(CI,Continuous Integration)是让开发人员将工作集成到共享分支中的过程。频繁的集成有助于解决隔离,减少每次提交的大小,以降低合并冲突的可能性。

持续交付(CD,Continuous Deployment)是持续集成的扩展,它将构建从集成测试套件部署到预生产环境。这使得它可以直接在类生产环境中评估每个构建,因此开发人员可以在无需增加任何工作量的情况下,验证bug修复或者测试新特性。

1.1.7.3. API网关

API 网关是一个服务器,客户端只需要使用简单的访问方式,统一访问API网关,由API网关来代理对后端服务的访问,同时由于服务治理特性统一放到API网关上面,服务治理特性的变更可以做到对客户端透明,一定程度上实现了服务治理等基础特性和业务服务的解耦,服务治理特性的升级也比较容易实现。

1.2 互联网架构演进之路

互联网架构演进之路

1.2.1 单体架构

1.2.2 缓存和读写分离

1.2.3 动静分离

1.2.4 集群化高可用架构

1.2.5 业务拆分与分布式

1.2.6 SOA

1.2.7 微服务

1.3 Web 开发之开发环境搭建

1.3.1 Web 开发包含:

  • 前端开发
  • 数据库
  • Web框架

开发一个平台,也就是一个网站。

1.3.2 下载安装 Kali

下载最新版 Kali Linux 作为本门课程的学习环境;

点击跳转| Kali Linux https://www.kali.org/get-kali/#kali-virtual-machines

image-20220407101751396

为了方便安装我们可以下载官方制作好的 VMware 环境;

image-20220407102411337

下载后直接解压缩: kali-linux-2022.1-vmware-amd64.7z

image-20220407102533477

使用 VMware Workstation 15.5 及以上版本打开解kali解压路径;

image-20220407104206516

启动kali linux

image-20220407102755588

用户名和密码在描述信息中(2022版默认用户名和密码都是:kali),根据自己电脑的配置合理修改虚拟机的配置,内存建议4G及以上,最低内存2G。

1.3.3配置Kali

登录成功后使用 Ctrl + Alt + T快捷方式,打开终端;

使用命令完成:更新、汉化、以及安装开发工具VSCode;

image-20220407104618232

以下操作必须在联网状态下完成

# 更新系统软件
sudo apt update
sudo apt dist-upgrade 

# 汉化以及安装输入法
sudo dpkg-reconfigure locales
# en_US.UTF-8 UTF-8改为不勾选,[ * ] 为勾选,空格选择
# 语言选择 zh_CN.UTF-8 UTF-8 空格选择后 Tab 跳转到 OK 键回车   

# 安装中文字体
sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy  xfonts-intl-chinese

# 安装中文输入法
sudo apt-get install fcitx  fcitx-table-wbpy fcitx-googlepinyin 

image-20220407105613708

image-20220407111734390

image-20220407112425723

# 之后重启系统
sudo reboot

image-20220407112025157

1.3.3 安装配置VScode

# 下载 VScode,下载链接从VSCode官网找,版本为Linux deb版
wget https://az764295.vo.msecnd.net/stable/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/code_1.66.0-1648620611_amd64.deb

image-20220407110827385

image-20220407111123457

# 安装 vscode
sudo dpkg -i code_1.66.0-1648620611_amd64.deb

image-20220407111245452

image-20220407111334783

1.3.4 安装VSCode常用插件

1.3.4.1 中文语言包插件 - Chinese

image-20220407111500758

1.3.4.2 Python 语言支持

image-20220407112643043

1.3.4.3 Open-In-Browser 打开浏览器

image-20220407112746580

1.3.4.4 vscode-icons

美化插件,用于美化目录树图标主题。

image-20220407113028055

1.3.5 安装Docker

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,和真机之间不会有任何接口。

​ 我们学习使用 Docker 来搭建测试环境。

# 添加浙大docker源
curl -fsSL http://mirrors.zju.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

echo 'deb http://mirrors.zju.edu.cn/docker-ce/linux/debian/ buster stable' | 
sudo tee /etc/apt/sources.list.d/docker.list

sudo apt-get update
sudo apt-get install docker-ce
# 测试是否已安装docker
docker -v
# 启动、设为开机启动、赋权等配置
sudo systemctl enable docker
sudo systemctl start docker
sudo chmod -R 777 /etc/docker
sudo systemctl daemon-reload
sudo systemctl restart docker

image-20220407121023755

1.3.5.1Docker 搭建 MySQL测试环境

 # 查找所有的MySQL镜像
 sudo docker search mysql

 # 拉取 MySQL进行
 sudo docker pull mysql:latest

 # 查看镜像
 sudo docker images

 # 创建并启动MySQL容器
sudo  docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

# run   运行容器 
#   -itd  在后台运行
#   --name 指定容器名称
#   -p   端口映射   本机端口:容器端口
#   -e   容器内部环境变量设置  
#   MySQL初始密码设置 MYSQL_ROOT_PASSWORD=123456
#   最后的 mysql 是镜像名

 # 查看 docker 启动进程
 sudo docker ps

 # 进入容器 
sudo  docker exec -it mysql-test bash

# 登录MySQL
mysql -uroot -p123456

# 创建wordpress库
create database wordpress charset utf8mb4;

# 退出MySQL
\q;

# 退出容器
exit

image-20220407135945808

image-20220407140256154

image-20220407140434032

image-20220407140821010

image-20220407141211194

1.3.5.2 使用 Docker 搭建 WordPress

WordPress 是使用PHP语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。

# 这里选择端口先放在8000 建议再用 nginx 反向代理
# --link mysql-test & WORDPRESS_DB_HOST=mysql-test 对应 mysql 容器名称
# restart=always 设置为开机自启动
# mysql 密码改为你自己密码,wordpress库需要提前创建
# 我这里给了 512M 内存,根据需求可以酌情放宽内存限制
sudo docker run -d -p 8000:80\
    --link mysql-test\
    --restart=always\
    -e "TZ=Asia/Shanghai"\
    -e WORDPRESS_DB_HOST=mysql-test\
    -e WORDPRESS_DB_USER=root\
    -e WORDPRESS_DB_PASSWORD='123456'\
    -e WORDPRESS_DB_NAME=wordpress\
    -m 512M\
    --oom-kill-disable\
    --memory-swap=-1\
    --name wordpress\
    wordpress

# 查看是否运行成功
sudo docker ps 

# 使用kali内置火狐浏览器打开 127.0.0.1:8000

image-20220407141507039

image-20220407142848269

image-20220407143004431

image-20220407143238836

image-20220407143334883

image-20220407144050489

image-20220407144148868

1.3.6 停止与删除 Docker 服务

# 查看 Docker 服务
sudo docker ps 

# 停止 Dokcer 服务
sudo docker stop wordpress
sudo docker stop mysql-test

# 删除服务 
sudo docker rm wordpress
sudo docker rm mysql-test

image-20220407151916183

image-20220407152544517

image-20220407152829887

总结

  • 了解 Web 技术的演变
  • 了解互联网架构的演进之路
  • 搭建实验环境