S1:了解web及网络基础
TCP/IP
- TCP/IP协议族里重要的一点:分层。
- TCP/IP按层次分为4层:应用层、传输层、网络层、数据链路层。
- 应用层:决定了向用户提供应用服务时通信的活动。HTTP协议也处于该层。
- 传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
- 网络层:用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并传给对方数据包,即在众多选项中选择一条传输路线。
- 链路层:用来处理连接网络的硬件部分。
TCP/IP通信传输流图:
封装:把数据包装起来
负责传输的IP协议
- IP协议位于网络层,IP与IP地址不同,IP是一种协议的名称。
- IP协议的作用是把各种数据包传送给对方。
- IP地址指明了节点被分配到的地址,MAC地址指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,MAC地址基本不变。
- ARP协议:是一种用于解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
- TCP协议:位于传输层,提供可靠的字节流服务。字节流服务:为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。总之,TCP协议为了更容易传送大数据才把数据分割,并能够确认数据最终是否传送到对方。通过三次握手策略。
- 三次握手过程中使用了TCP的标志:SYN和ACK。发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN和ACK标志的数据包以示传达确认信息。最后发送端再回传一个带ACK标志的数据包,代表握手结束。若在握手过程中某个阶段中断,TCP协议会再次以相同的顺序发送相同的数据包。
- DNS服务:负责域名解析。位于应用层。提供域名到IP地址之间的解析服务。
URI 和 URL
- URI:统一资源标识符(Uniform Resource Identifier),用字符串标识某一互联网资源。
- URL:统一资源定位符(Uniform Resource Location),表示资源的地点(互联网上所处的位置)。
- URL是URI的子集。
- 绝对URI的格式
S2:简单的http协议
- HTTP协议用于客户端和服务器端之间的通信;
- 请求访问资源的一端为客户端,提供资源响应的一段为服务器端。
- 通过请求和响应的交换达成通信;
- 请求报文构成:方法+URI+协议版本+请求首部字段+内容实体
- 相应报文构成:协议版本+状态码+状态码的原因短语+响应首部字段+主体
- HTTP是不保存状态的协议
- HTTP协议自身不对请求和响应之间的通信状态进行保存。
- HTTP/1.1虽是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
- 请求URI定位资源
- HTTP协议使用URI定位互联网上的资源
- 告知服务器意图的HTTP方法
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获得报文首部
- DELETE:删除文件
- OPTIONS:询问支持的方法
- TRACE:追踪路径
- CONNECT:要求用隧道协议连接代理(主要用SSL安全套接层 和 TLS传输层安全 协议把通信内容加密后经网络隧道传输)
- 使用方法下达命令
- 方法的作用:可以指定请求的资源按期望产生某种行为。方法中有GET、POST和HEAD等。
- 持久连接节省通信量
- 持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态。好处:减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载,提高web页面的显示速度。
- 管线化:不用等待响应亦可直接发送下一个请求。好处:能够做到同时并行发送多个请求,不需要一个接一个等待响应。
- 使用Cookie的状态管理
- Cookie技术通过再请求和相应报文中写入Cookie信息来控制客户端的状态。
- 9.
S3:http报文内的http信息
HTTP通信过程包括从客户端发往服务器端的请求和从服务器端返回客户端的响应。
1. HTTP报文
2. 请求报文及响应报文的结构
3. 编码提升传输速率
4. 发送多种数据的多部分对象集合
5. 获取部分内容的范围请求
6. 内容协商返回最合适的内容
S4:返回结果的http状态码
HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。
状态码告知服务器端返回的请求结果
- 状态码的类别
2XX成功
- 2XX:请求被正常处理
- 200:OK
- 204:No Content:(请求处理成功,但没有资源返回。)一般在只需要从客户端往服务器端发送信息,而对客户端不需要发送新信息内容的情况下使用。
- 206:Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,即是对资源某一部分的请求。
3XX重定向
- 3XX响应结果:需要执行某些特殊的处理以正确处理请求
- 301:Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
- 302:Found:临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。(资源的URI已临时定位到其他位置了,姑且算你已经知道这个情况了)。302与301相似, 但302代表的资源不是被永久移动,只是临时性质的。
- 303:See Other:该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。303与302有着相同的功能,但303明确表示客户端应采用GET方法获取资源。
- 当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文中的主体,之后请求会自动再次发送。301、302标准是禁止将POST改为GET的,但实际使用中大家都会这么做。
- 304:Not Modified:(资源已找到,但未符合条件请求)。该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何相应的主体部分。虽然304被划分在3XX类别中,但是和重定向没有关系。
- 307:Temporary Redirect:临时重定向。
4XX客户端错误
- 4XX的响应结果表明客户端是发生错误的原因所在。
- 400:Bad Request:该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
- 401:Unauthorized:该状态码表示发送的请求需要有通过HTTP认证的认证信息。
- 403:(不允许访问那个资源)。该状态码表明对请求资源的访问被服务器拒绝了。发生403的原因可能是未获得文件系统的访问授权、访问权限出现某些问题等。
- 404:Not Found:(服务器上没有请求的资源)。该状态码表明服务器上无法找到请求的资源。
5XX 服务器错误
- 5XX:服务器本身发生错误
- 501: Internal Server Error:(内部资源出故障了)。该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。
- 503: Service Unavailable:(抱歉,现在我正忙着)。该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
S5:与http协作的web服务器
- 一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中专服务器提升传输效率。
- 用单台虚拟主机实现多个域名
通信数据转发程序:代理、网管、隧道
- 代理:代理时一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接受由客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端。
- 网关:网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
- 隧道:隧道时在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
- 代理:
- 代理基准分类:是否使用缓存,是否会修改报文。
- 缓存代理
- 透明代理
- 网关:
- 隧道
保存资源的缓存
- 缓存时指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
- 缓存的有限期限
- 客户端的缓存
S6:http首部
- 四种HTTP首部字段类型:通用首部字段、请求首部字段、响应首部字段、实体首部字段
- 通用首部字段:cache-control、connection、date、pragma、trailer、transfer-encoding、upgrade、via、warning
- 请求首部字段:accept, accept-charset, accept-encoding, accept-language, authorization, expect, from, host, if-match, if-modified-since, if-none-match, if-range, if-unmodified-since, max-forwards, proxy-authorization, range, referer,te,user-agent
- 响应首部字段:accept-ranges,age,etag,location,proxy-authenticate,retry-after,server,vary,www-authenticate
- 实体首部字段:Allow,Content-Encoding,Content-Language,Content-Length,Content-Location,Content-MD5,Content-Range,Content-Type,Expires,Last-Modified
- 为Cookie服务的首部字段:Set-Cookie
- 其他首部字段:
- X-Frame-Options:DENY 主要目的是为了防止点击劫持攻击
- X-XSS-Protection:它是针对跨站脚本攻击(XSS)的一种对策,用于控制XSS防护机制的开关
- DNT:Do Not Track,意为拒绝个人信息被收集,拒绝被精准广告追踪的一种方法
- P3P:通过利用P3P技术,可以让Web网站上的个人隐私标称一种仅供程序可理解的形式,以达到保护用户隐私的目的。
S7:确保web安全的https
HTTP的缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
通信使用明文可能会被窃听
TCP/IP是可能被窃听的网络
加密处理阻止被窃听
加密对象:
- 通信的加密
- 通过SSL(Secure Socket Layer 安全套接层)或TLS(Transport Layer Security 安全层传输协议)的组合使用,加密HTTP的通信内容。
- 与SSL组合使用的HTTP成为HTTPS
- 内容的加密
不验证通信方的身份就可能遭遇伪装
- 任何人都可发起请求
- 查明对手的证书
无法证明报文完整性,可能已遭篡改
- 接收到的内容可能有误
- 如何防止篡改
- MD5
- SHA-1
- 数字签名方法
- HTTPS,SSL提供认证和加密处理及摘要功能
HTTP+加密+认证+完整性保护=HTTPS
- HTTP加上加密处理和认证以及完整新保护后即是HTTPS
- HTTPS是身披SSL外壳的HTTP
- 相互交换密钥的公开密钥加密技术
- SSL采用公开密钥加密
- HTTPS采用混合加密机制
- 可证明组织真实性的 EV SSL 证书
- 用于确认客户端的客户端证书
S8:确认访问用户身份的认证
何为认证
HTTP/1.1使用的认证方式:
- basic 认证(基本认证)
- digest 认证(摘要认证)
- ssl 客户端认证
- formBase 认证(基于表单认证)
basic 认证
digest 认证
ssl 客户端认证
SSL 客户端认证采用双因素认证
基于表单认证
认证多半为基于表单认证
Session 管理及 Cookie 应用
S9:基于http的功能追加协议
消除http瓶颈的 spdy
- Ajax:(Asynchronous JavaScript and XML,异步JavaScript与XML技术)是一种有效利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此而减少。
- Ajax的核心技术是名为XMLHttpRequest的API,通过JavaScript脚本语言的调用就能和服务器进行HTTP通信。借由这种手段,就能从已加载完毕的Web页面上发起请求,只更新局部页面。
使用浏览器进行全双工通信的 websocket
WebSocket:即Web浏览器与Web服务器之间全双工通信标准。
WebSocket协议的主要特点:
- 推送功能(支持由服务器向客户端推送数据的推送功能)
- 减少通信量(只要建立起WebSocket连接,就希望一直保持连接状态)
- 为了实现WebSocket通信,在HTTP连接建立之后,需要完成一次握手的步骤
web 服务器管理文件的 webdav
WebDAV:基于万维网的分布式创作和版本控制,是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。
S10:构建web内容的技术
HTML
动态HTML
web应用
数据发布的格式及语言
S11:web的攻击技术
针对web的攻击技术
对web应用的攻击模式:
- 以服务器为目标的主动攻击
主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
主动攻击模式里具有代表性的攻击时:SQL注入攻击和OS命令注入攻击
- 以服务器为目标的被动攻击
被动攻击是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
因输出值转义不完全引发的安全漏洞
实施web应用的安全对策大致可分为两部分:客户端验证;web应用端(服务器端)验证【输入值验证,输出值转义】
跨站脚本攻击
- 跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
- 跨站脚本攻击可能造成的影响:利用虚假输入表单骗取用户个人信息;利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求;显示伪造的文章或照片。
- SQL注入攻击
- SQL注入是针对web应用使用的数据库,通过运行非法的SQL而产生的攻击。
- SQL注入攻击可能造成的影响:非法查看或篡改数据库内的数据;规避认证;执行和数据库服务器业务关联的程序等。
- OS命令注入攻击
- OS命令注入攻击时通过web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
- HTTP首部注入攻击
- HTTP首部注入攻击是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
- HTTP首部注入攻击可能造成的影响:设置任何Cookie信息;重定向至任意URL;显示任意的主体(HTTP响应截断攻击) - 邮件首部注入攻击
- 邮件首部注入是指web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件。
- 目录遍历攻击
- 目录遍历攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
- 远程文件包含漏洞
- 远程文件包含漏洞是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
因设置或设计上的缺陷引发的安全漏洞
- 强制浏览
- 强制浏览安全漏洞是指,从安置在web服务器的公开目录下的文件中,浏览哪些原本非自愿公开的文件
- 不正确的错误消息处理
- 不正确的错误消息处理的安全漏洞是指,web应用的错误信息内包含对攻击者有用的信息。
- 开放重定向
- 开放重定向是一种对指定的任意URL作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的web网站,那么用户就会被诱导至那个web网站。
因会话管理疏忽引发的安全漏洞
- 会话劫持
- 会话劫持是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
- 可获得会话ID的途径:通过非正规的生成方法推测会话ID;通过窃听或XSS攻击盗取会话ID;通过会话固定攻击强行获取会话ID。
- 会话劫持是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
- 会话固定攻击
- 跨站点请求伪造
- 跨站点请求伪造攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
- 跨站点请求伪造攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
其他安全漏洞
- 密码破解
- 密码破解的两种手段:通过网络的密码试错(穷举法,字典攻击);对已加密密码的破解
- 点击劫持
- DoS攻击
- DoS攻击是一种让运行中的服务呈停止状态的攻击。
- DoS攻击是一种让运行中的服务呈停止状态的攻击。
- 后门程序
- 后门程序是指开发设置的隐藏入口,可不按正常步骤使用首先功能。