这是我参与「第四届青训营 」笔记创作活动的的第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,消耗服务器连接资源至达到最大连接数。
防御方法:
- 禁用正则贪婪模式、进行代码测试、用户提供的正则
- 使用负载均衡、API 网关、CDN 等过滤请求
- 快速扩容、非核心业务降级等使服务器能接受大量请求
HTTP
Hyper Text Transfer Protocol 超文本传输协议
- 应用层协议,基于 TCP 协议(除 HTTP3.0)
- 请求头、响应头
- 简单可拓展
- 无状态
协议的方法
- 不会修改服务器的方法是 Safe(安全的)
- 请求被执行多次效果一样是 Idempotent(幂等的)
报文
状态码 Status Code:
常用请求头:
常用响应头
缓存机制:
cookie:
HTTP 2.0
特性:
- 帧(frame)是 HTTP2 通信的最小单位
- 双向字节流,交错发送,接收端重组织
- 连接是永久的,每个来源一个连接
- 流控制(组织发送放向接收方发送大量数据)与服务器推送
HTTPS
Hypertext Transfer Protocol Secure,HTTP + SSL(TLS) = HTTPS,默认端口号:443
特性:
- 可靠性:加密传输
- 完整性:MAC 验证,数据一致性
- 不可抵赖性:数字签名,身份验证
SSL/TLS 加密
- 对称加密:加密和解密时使用的密钥都是同样的密钥
- 非对称加密(公钥加密):使用公钥进行加密,私钥进行解密,能够确保即是密钥被拦截也不暴露数据信息。
- CA 证书认证:
参考文章
- 青训营课件PPT
- XSS juejin.cn/post/684490…
- HTTPS juejin.cn/post/684490…