Web 安全基础:CIA 三元组、B/S 架构与 OWASP Top 10
1. 安全目标:CIA 三元组
信息安全的核心目标可以归结为三条,合称 CIA 三元组:
- 机密性(Confidentiality):保证信息只被授权者访问,防止未授权泄露。
- 完整性(Integrity):保证信息在传输和存储过程中不被篡改或损坏。
- 可用性(Availability):确保信息和系统在需要时可供使用,不受意外中断或恶意攻击的影响。
2. B/S 架构
B/S(Browser/Server,浏览器/服务器)架构是 Web 应用的基础形态:
- 浏览器端:应用程序的用户界面和功能逻辑在 Web 端运行。
- 服务端:数据处理和业务逻辑由服务端完成,运行在服务器上的软件系统处理客户端(浏览器)发来的请求,并提供相应的服务和数据。
3. 专业术语
漏洞生命周期:0day / 1day / Nday
安全漏洞是存在生命周期的,简单可分为几个阶段:
- 0day:漏洞被发现但尚未公开,厂商未知晓,无任何补丁。
- 1day:漏洞信息被公布,但漏洞没有官方补丁或修复方案。
- Nday:漏洞已有官方补丁或修复方案,但现实中仍有大量未修复的目标存在,因此依然具有攻击价值。
常用攻击术语
- PoC(Proof of Concept,概念验证):用于验证安全漏洞是否存在、能否被利用的证明代码。
- EXP(Exploit,漏洞利用程序):利用安全漏洞造成入侵或破坏效果的程序。
- Payload(有效载荷 / 攻击载荷):目标系统被渗透攻击之后所执行的代码。
4. HTTP 协议与 Web 安全模型
HTTP 协议是 Web 通信的基础:浏览器向服务器发送 HTTP 报文资源请求,接收信息并解码显示。
浏览器端安全性
- 同源策略:限制不同源(协议、域名、端口)之间的资源访问,是 Web 安全的基础防线。
- 浏览器沙箱:将页面脚本隔离在受限环境中运行,降低恶意代码对系统的破坏。
- 恶意网站拦截:浏览器基于黑名单与信誉机制拦截钓鱼、挂马等恶意站点。
服务端安全性
服务端的安全风险集中在多个层面:
- 常见 Web 安全漏洞:如 SQL 注入、命令执行漏洞等。
- 编程语言安全特性:PHP、JSP、MySQL 等语言与组件的安全配置。
- 中间件安全问题:Apache、Tomcat 等中间件的版本与配置缺陷。
- 操作系统层面:Linux、Windows 的系统加固与补丁管理。
关于 Web 应用程序安全的思考
除了技术漏洞,还要关注管理与运维层面的风险,其中弱口令是最常见也最容易被忽视的一环。
5. OWASP Top 10
OWASP Top 10 是 Web 应用安全风险的权威排行,2021 版本十大项如下:
A01:失效的访问控制(Broken Access Control)
访问控制机制失效,导致未授权用户可以访问本应受保护的资源或功能。
A02:加密机制失效(Cryptographic Failures)
敏感数据未加密、加密算法过时或密钥管理不当,导致数据泄露。
A03:注入(Injection)
用户输入未经严格校验即被拼接进查询或命令,常见如 SQL 注入、命令注入。
A04:不安全的设计(Insecure Design)
架构与设计层面的安全缺陷,仅靠补丁式修复无法根治。
A05:安全配置错误(Security Misconfiguration)
默认配置、错误消息泄露、多余功能开放等配置不当带来的风险。
A06:自带缺陷和过时的软件(Vulnerable and Outdated Components)
使用了含已知漏洞的组件或过时软件,未及时更新。
A07:身份识别和身份验证错误(Identification and Authentication Failures)
常见问题包括:
- 允许暴力破解或自动化攻击。
- 允许预设、脆弱、常见的密码。
- 不具有或者无效的多因素认证。
- 没有正确注销会话。
A08:软件和数据完整性故障(Software and Data Integrity Failures)
代码或数据在传输、更新过程中完整性校验缺失,例如依赖了被篡改的第三方库。
A09:安全日志和监控故障(Security Logging and Monitoring Failures)
- 需要审计的事件(如登录、失败的登录、高价值交易)未记录。
- 应用程序和 API 日志未进行针对安全可疑活动的监控。
- 日志只存储在本地,缺乏集中管理与告警。
A10:服务端请求伪造(Server-Side Request Forgery,SSRF)
一旦 Web 应用获取远程资源时没有验证用户的 URL,就会出现 SSRF 缺陷。如果网络架构未进行隔离,攻击者可以绘制出内网网络地图,并根据连接结果,或 SSRF 有效载荷连接的运行时间和拒绝时间,判断内部服务器的端口是打开还是关闭。
- 本文链接: https://diyuyizhu.github.io/posts/web-security-basics/
- 版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。
