目 录 (本文是学习极客时间——《Web 安全攻防实战》的笔记小结)
1、前端开发
前端开发是创建Web页面或App等前端界面呈现给用户的过程。前端使用的语言有HTML,CSS,JavaScript.
1.1 HTML
是什么?
- HTML( HyperText Markup Language)即超文本标记语言,是用来构建网页的一种语言。
- HTML是一整套标记标签构成的标记语言,而非编程语言。
- HTML用于承载网页的内容(文本、图片、语音、视频)。
- 使用HTML标记标签与纯文本按规则构建的文档,通常也称为网页。
网页结构
HTML标签/元素/属性
1.2 CSS
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算
机语言。
CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。
1.3 JavaScript
JavaScript是什么?
JavaScript,是可插入 HTML 页面,可以由绝大多数现代浏览器执行的轻量级的编程语言。
JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
它和Web安全有什么关系?
作为一种脚本语言,由它引申出的 XSS 攻击,文件上传漏洞,常年占据 OWASP Top10。
Node.js
简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。
2 WebApp
Web App(或Web应用程序)运行于网络和标准浏览器上,基于网页技术开发实现特定功能的应用。
- 前端:HTML,CSS,JavaScript
- 后端:Java,Python,PHP
- 数据库:MySQL,Oracle,MongoDB
- 容器:Windows(IIS),Linux(Nginx, Apache)
- 协议:TCP,DNS,HTTP,HTTPS
2.1 从浏览器输入网址到看到网页过程
- 客户输入URL,DNS解析URL得出IP地址,根据IP地址找出对应服务器
- 客户机通过TCP/IP协议建立到Web服务器的TCP链接
- 客户机向Web服务器发送HTTP请求报文,请求服务器里资源的资源文档
- Web服务器接收到客户机的HTTP请求报文,然后向客户机发出HTTP响应报文
- 如果请求的是HTML文档,Web服务器会将对应目录下相应的HTML文档打开,然后将文档的响应内容发送给客户机。
- 如果请求的是PHP文件,那么Web服务器自身是不能处理PHP动态语言脚本文件的,然后就会寻找并委托PHP应用服务器,PHP应用服务器会将Web服务器请求的PHP
- 文件解析成HTML静态代码,然后将HTML静态代码发送给Web服务器,最后Web服务器会将HTML静态代码发送客户机。
- 如果请求的资源是访问数据库,则Web服务器会通过应用服务器去访问数据库。
2.2 常见的 Web 服务器
- Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器软件之一。
- Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。
- IIS是Internet Information Server的缩写。它是微软公司主推的服务器。
- Lighttpd是一个德国人领导的开源Web服务器软件,具有非常低的内存开销、CPU占用率低、效能好以及丰富的模块等特点。
- Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
2.3 框架
Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架。
前端:jQuery、Bootstrap、React.js、Vue.js
后端:Spring MVC、Django、Flask、Tornado
3 Web安全总览
3.1 协议基础
HTTP协议定义了Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
• 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
• 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据 4部分组成。
• 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。
一个响应由状态行、响应头部、空行(请求空行)和响应数据(请求体)4部分组成。
• 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接。
若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
• 客户端浏览器解析HTML内容
GET vs POST?
- 从参数的传递方面来看,GET请求的参数是直接拼接在地址栏URL的后面,而POST请求的参数是放到请求体里面的。
- 从长度限制方面来看,GET请求有具体的长度限制,一般不超过1024KB,而POST理论上没有,但是浏览器一般有个界限。
- 从安全方面来看,GET请求相较于POST,因为数据都是明文显示在URL上面的,所以安全和私密性不如POST。
从本质上来说,GET和POST都是TCP连接,并无实质的区别。但是由于HTTP/浏览器的限定,导致它们在应用过程中体现出了一些不同。GET产生一个数据包,POST产生两个数据包。对于GET请求,浏览器会把http header 和 data 一并发出去,服务器响应200(返回数据)。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok。
状态码
3.2 Web安全攻防要点
Web安全根本在于,Web应用在实现HTTP协议的过程中,没有做足够充足强大的约束,导致攻击者能够利用其中的薄弱环节进行攻击。(前端输入不可信)
安全学习交流群:687398569