阅读笔记:《白帽子讲Web安全》(第2版)——2 HTTP协议和Web应用
HTTP协议
简介
-
C/S协议,只能由客户端单向发起请求,服务端响应。 -
客户端:又称用户代理(
User Agent),通常为浏览器。
请求(常被构造包含恶意内容)
-
请求方法使用原则:
-
安全的方法
GET、HEAD,应当只用于对服务端没有副作用的操作(“只读”);若有副作用(如修改数据)则应该使用其他方法,如POST,此时刷新页面时需要询问是否重新发送,防止服务端产生多余操作,如重复交易; -
PUT、DELETE用于上传和删除文件,危害大,无需求应该禁用; -
提交敏感数据时优先使用
POST而非GET(参数随URL被保存或发送给其他网站),防止敏感数据泄露; -
TRACE方法通常用于诊断调试,生产环境服务器应禁用; -
HEAD和GET方法小号的服务端计算资源相同,HEAD请求可能用于DDoS攻击; -
CONNECT方法用于建立TCP隧道,Web服务器作为代理服务器,可用于建立外网穿透到内网的传输隧道(后续有详解)。
-
-
版本
-
主要使用
1.1和2。 -
HTTP/1.1威胁(部分):-
比上一版本,增加了持久连接、管线化(无需等待回应再发下一个请求),这些性质导致了在
HTTP Flood攻击中只需要建立少量的TCP连接即可实现攻击; -
新增
Host头用于虚拟主机,即同IP地址运行多个网站,Web服务器通过Host头确定目标网站。当出现配置错误,一个Web应用可以使用任意Host头访问,且在后续操作时使用到Host信息,就可能导致被攻击(恶意构造Host头); -
UA头由客户端指定,因此不可用于关键业务逻辑决策; -
Referer头表示请求从哪个URL发起,现代浏览器一般不能应用JS伪造,就算伪造也必须同源,因此可以信任域名,但是不能信任其他内容。
-
-
响应
用 \r\n 分割,若请求信息出现在响应中,就会导致 CRLF注入,即可以在消息头中注入任意构造的恶意消息头实现重定向、固定会话攻击等操作,因此需要严格约束。
HTTP/2 and HTTP/3
HTTP/2 存在伪头,冒号开头,代替上一版本协议中的第一行内容(状态码、方法、URI等)。采用哈弗曼编码,导致难以手工拼接HTTP请求,但是对本身安全特性没有影响。
HTTP/3 使用基于 UDP 的 QUIC 协议,提升了网络性能,使用64bit随机数作为连接ID,因而即使IP改变也不会断开连接。但在QUIC的握手过程中,服务端响应的首包中有TLS证书等信息,因此远大于客户端首包,可被用于实施UDP反射放大攻击,限制首包大小可以限制该攻击。
WebSocket
-
全双工通信模式;
-
支持HTTP代理;
-
使用
ws和wss(带TLS)两种资源标识符,分别默认80、443端口; -
使用长连接,认证后通信无需携带凭证;
-
服务端若无校验访问源的机制可能产生跨站WebSocket劫持(类似CSRF)。
Web服务器
主要问题为代理使用不当和配置问题。
Web页面
DOM
文档对象模型,浏览器对网页上元素的结构化表示形式,树状结构。有 DOM型XSS 等问题。
JavaScript
-
现代浏览器中唯一的操作DOM的编程语言,常发生XSS攻击;
-
客户端执行,可被修改,因此不应该做出任何关键决策;
-
可以使用代码混淆方案提高攻击成本(e.g. jsfuck)。

浙公网安备 33010602011771号