本页目录

安全 I · 系统与 Web 攻防

对标:Stanford CS155 / MIT 6.858 / OWASP Top 10 | 前置:csapp-01/04(内存)、web 线、db 线、crypto 线 安全课的教学立场很明确——理解攻击是为了构建防御。这一页按"漏洞类别 + 其防御"的方式,讲清最常见、最重要的几类安全问题(内存安全、注入、XSS、CSRF、认证缺陷),每类都是"机理 → 为什么危险 → 怎么防"。这是防御性的知识:一个不懂这些攻击面的开发者,会无意中写出满是漏洞的代码。核心心法一句话:永远不要信任来自外部的输入

1. 安全的思维方式

普通开发问"怎么让它工作",安全思维问"怎么让它出错、边界在哪、攻击者能控制什么"。三条基本原则贯穿全页:

2. 内存安全漏洞(系统层)

缓冲区溢出:写越界覆盖栈上返回地址的示意(教学用,讲防御:canary/ASLR/DEP)。

图 sec-01.3缓冲区溢出:写越界覆盖栈上返回地址的示意(教学用,讲防御:canary/ASLR/DEP)。

C/C++ 的内存 bug(csapp-04)不只是崩溃,是安全漏洞——攻击者可利用它控制程序:

防御(层层叠加)

3. 注入攻击(Web 层最经典)

SQL 注入:拼接 vs 参数化查询(数据与代码分离)。

图 sec-01.2SQL 注入:拼接 vs 参数化查询(数据与代码分离)。

注入的通用机理:把用户输入当作代码/命令执行——当数据和代码的边界没守住时发生。

通用防御原则数据与代码分离 + 输入校验(白名单优于黑名单)+ 输出编码。注入类漏洞的共同解药都是"别让数据越界变成代码"。

4. 浏览器端攻击:XSS 与 CSRF

XSS(恶意脚本进你的页面) vs CSRF(你的登录态被别站利用) 机理对比 + 各自防御。

图 sec-01.1XSS(恶意脚本进你的页面) vs CSRF(你的登录态被别站利用) 机理对比 + 各自防御。

Web 前端(web-03)的两类经典攻击,机理正好相反:

XSS(跨站脚本):攻击者让恶意脚本在受害者浏览器里执行——通常因为网站把用户输入未经转义地放进页面(如评论区存了 <script> 标签,别人看到就执行)。危害:偷 cookie/token(web-02 会话)、冒充用户操作。

CSRF(跨站请求伪造):攻击者诱导已登录用户的浏览器向目标网站发出非本意的请求(利用浏览器自动带 cookie)——如诱导你点一个链接,偷偷用你的登录态转账。

读法:XSS 是"恶意代码进了你的页面"、CSRF 是"你的登录态被别的站利用"——理解这对区别,才能正确选防御(转义 vs token)。两者都源于 Web 的信任模型漏洞。

5. 认证与访问控制缺陷

6. 练习与要点

例 1(注入的边界思维) 看一段用字符串拼接构造 SQL 的代码,指出攻击者能怎么让输入越界成代码,然后改成参数化查询——理解"数据与代码分离"如何根治注入,不必真的去攻击任何系统,重点是学会识别这个反模式。

例 2(XSS vs CSRF 辨析) 给两个场景(评论区显示用户输入、一个自动提交的第三方表单),各判断是 XSS 还是 CSRF 风险、该用哪种防御——练"识别漏洞类别 → 选对防御"

例 3(授权检查) 设计 Medusa 若加多用户后,"取某用户的数据"的端点该怎么在后端强制授权(不能只靠前端不显示)——把"认证 ≠ 授权、授权在后端"用到自己的系统设计\(\blacksquare\)


下一页:安全 II——密钥、供应链与安全工程:把安全从"修漏洞"提升到"系统性的工程实践"——密钥管理、依赖供应链、以及安全左移。