Web 安全与 HTTP 指南| 青训营笔记

138 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天。本篇笔记是对 Web 开发的安全之旅HTTP 实用指南 两节课程内容的总结,并结合了自己所搜集到的学习内容,进行了一定的整理。有意见和建议也欢迎在评论区交流讨论呀~

知识点

  • Web 安全
    • XSS 攻击、Inject注入攻击、Dos攻击
    • 预防策略:HTTPS协议、数字签名
  • HTTP 指南
    • HTTP 协议介绍
    • HTTP 应用场景
    • WebSocket QUIC HTTP3.0

Web 安全

Web 安全的重要性,相信是不言而喻的了。 我们时长能听到关于安全的一些新闻(毕竟这也关乎到是否会有程序员祭天

XSS 攻击

Cross-Site Scripting(XSS)攻击原理:利用用户输入,执行脚本代码(Web 应用盲目相信用户输入)

例如在用户输入中添加 ><script>alert('XSS');</script> 会导致内容注入,浏览器会将用户输入内容解析为可执行脚本,并自动执行。

解决方案:escapeHTML( userInput ) 会将用户输入内的 HTML 脚本转义为转义字符

然而 XSS 攻击并不止步于此。

<a href="<%= escapeHTML(getParameter("redirect_to")) %>">跳转...</a>

当用户输入为 redirect_to=javascript:alert('xss') 时,点击 <a> 标签脚本依然被执行了.

那么这个问题可以被禁止 URL 以 JavaScript 为开头而解决吗? redirect_to=jAvascRipt:alert('XSS') 使用随机大小写亦或是 redirect_to=%20javascript:alert('XSS') 使用插入空格符号标识都会被执行。

真正的解决方法:使用白名单机制,禁止 “JavaScript” 链接、非法 scheme 等。

检测 XSS 方法:

  • 使用通用 XSS 攻击字符串手动检测
  • 使用扫描工具自动检测

因此在开发中,对用户输入进行过滤操作是必不可少的。

其他的一些 XSS 攻击类型:

  • 存储型 XSS:攻击者在目标网站数据库中添加恶意代码,被用户从网站获取数据时浏览器解析执行,窃取用户数据或者,冒充用户行为。(论坛发帖、评论、私信等)
  • 反射型 XSS:用户访问带有恶意代码的 URL,被服务器返回拼接在 HTML 中。
  • DOM 型 XSS:用户访问有恶意代码的 URL,前端取出恶意代码并执行(由浏览器完成恶意代码的取出与执行,属于前端漏洞)

CSRF 跨站点伪造

Cross-site request forgery,在用户不知情的前提下利用用户权限(例如利用登录状态中的cookie),发起跨站点请求

防御方法:

  • 限制异常来源的请求(使用 CSP 协议只执行来自安全源的脚本)
  • 使用安全来源的 iframe
  • 避免用户信息(cookie)被携带,SameSite Cookie

注入攻击

SQL Injection 是比较常见的注入攻击,原理与 XSS 攻击类似,也是相信用户输入,而使用用户输入内容拼接成可执行代码。

防御方法:

  • 使用最小权限原则
  • 建立白名单、过滤不合法请求
  • 限制 URL 类型参数

DoS 消耗服务器资源

Denial of Service,使得服务器资源被显著消耗,无法响应更多请求,引发雪崩效应。

常见攻击:

  • ReDoS:利用正则表达式贪婪模式的 DoS
  • Distributed DoS:短时间内收到大量请求,消耗带宽资源

DDoS攻击例子:攻击者只发送 SYN 不发送 ACK,消耗服务器连接资源至达到最大连接数。

2TKD_K9C.png

防御方法:

  • 禁用正则贪婪模式、进行代码测试、用户提供的正则
  • 使用负载均衡、API 网关、CDN 等过滤请求
  • 快速扩容、非核心业务降级等使服务器能接受大量请求

HTTP

Hyper Text Transfer Protocol 超文本传输协议

  • 应用层协议,基于 TCP 协议(除 HTTP3.0)
  • 请求头、响应头
  • 简单可拓展
  • 无状态

协议的方法

U.png

  • 不会修改服务器的方法是 Safe(安全的)
  • 请求被执行多次效果一样是 Idempotent(幂等的)

报文

状态码 Status Code:

GCXCE_2.png

常用请求头:

P49.png

常用响应头

KPLMEB.png

缓存机制:

W7UUWQG4V.png

cookie:

GPS@6V.png

HTTP 2.0

特性:

  • 帧(frame)是 HTTP2 通信的最小单位
  • 双向字节流,交错发送,接收端重组织
  • 连接是永久的,每个来源一个连接
  • 流控制(组织发送放向接收方发送大量数据)与服务器推送

HTTPS

Hypertext Transfer Protocol Secure,HTTP + SSL(TLS) = HTTPS,默认端口号:443

特性:

  • 可靠性:加密传输
  • 完整性:MAC 验证,数据一致性
  • 不可抵赖性:数字签名,身份验证

SSL/TLS 加密

RI2N.png

  • 对称加密:加密和解密时使用的密钥都是同样的密钥
  • 非对称加密(公钥加密):使用公钥进行加密,私钥进行解密,能够确保即是密钥被拦截也不暴露数据信息。
  • CA 证书认证:

170d6eaf599dc

参考文章