Loading

阅读笔记:《白帽子讲Web安全》(第2版)——2 HTTP协议和Web应用

HTTP协议

简介

  • C/S 协议,只能由客户端单向发起请求,服务端响应。

  • 客户端:又称用户代理(User Agent),通常为浏览器。

请求(常被构造包含恶意内容)

  • 请求方法使用原则:

    • 安全的方法 GETHEAD,应当只用于对服务端没有副作用的操作(“只读”);若有副作用(如修改数据)则应该使用其他方法,如 POST,此时刷新页面时需要询问是否重新发送,防止服务端产生多余操作,如重复交易;

    • PUTDELETE 用于上传和删除文件,危害大,无需求应该禁用;

    • 提交敏感数据时优先使用 POST 而非 GET(参数随URL被保存或发送给其他网站),防止敏感数据泄露;

    • TRACE 方法通常用于诊断调试,生产环境服务器应禁用;

    • HEADGET 方法小号的服务端计算资源相同, HEAD 请求可能用于DDoS攻击;

    • CONNECT 方法用于建立TCP隧道,Web服务器作为代理服务器,可用于建立外网穿透到内网的传输隧道(后续有详解)。

  • 版本

    • 主要使用 1.12

    • 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 使用基于 UDPQUIC 协议,提升了网络性能,使用64bit随机数作为连接ID,因而即使IP改变也不会断开连接。但在QUIC的握手过程中,服务端响应的首包中有TLS证书等信息,因此远大于客户端首包,可被用于实施UDP反射放大攻击,限制首包大小可以限制该攻击。

WebSocket

  • 全双工通信模式;

  • 支持HTTP代理;

  • 使用 wswss(带TLS)两种资源标识符,分别默认80、443端口;

  • 使用长连接,认证后通信无需携带凭证;

  • 服务端若无校验访问源的机制可能产生跨站WebSocket劫持(类似CSRF)。

Web服务器

主要问题为代理使用不当配置问题

Web页面

DOM

文档对象模型,浏览器对网页上元素的结构化表示形式,树状结构。有 DOM型XSS 等问题。

JavaScript

  • 现代浏览器中唯一的操作DOM的编程语言,常发生XSS攻击;

  • 客户端执行,可被修改,因此不应该做出任何关键决策;

  • 可以使用代码混淆方案提高攻击成本(e.g. jsfuck)。

posted @ 2025-05-02 15:00  SmoothWater  阅读(96)  评论(0)    收藏  举报