第1章 欢迎来到Web安全世界:先搞懂这几个基本概念 / Chapter 1 Welcome to the World of Web Security: Let's Start with These Basic Concepts
你有没有过这种经历:刚填完某个不知名小网站的“免费领礼品”问卷,第二天就接到好几个装修公司的推销电话?刚在某小众购物网站下了单,没过多久就收到冒充客服的诈骗短信,精准报出你的订单号和手机号?甚至只是刷了个带“点击领红包”弹窗的网页,账号突然就被盗了,发出去的动态全是博彩广告? Have you ever had these experiences: Just filled out a "free gift" questionnaire on an unknown small website, and received several promotion calls from decoration companies the next day? Just placed an order on a niche shopping website, and soon received a fraudulent text message pretending to be customer service, accurately reporting your order number and phone number? Or even just browsed a webpage with a "click to get red envelope" pop-up, and your account was suddenly stolen, with all the posts you sent being gambling advertisements?
这些离你并不遥远的“怪事”,本质上都是Web安全没做到位导致的。很多人一提到Web安全,脑子里浮现的就是电影里黑客敲着代码、屏幕上代码滚动的画面,觉得这是离
觉得这是离普通人十万八千里的“极客专属领域”?如果你这么想,那就大错特错了。Web安全从来不是只属于黑客的“黑科技”,它和每个人的日常生活息息相关——你网银里的存款、外卖里的收货地址、社交平台里的私人聊天记录,甚至你填的每一份问卷调查、点的每一个陌生链接,都处在Web安全的防护体系之下。 Web Security, often mistaken as an esoteric "geek exclusive field" far removed from ordinary people, is actually closely related to everyone's daily life. The savings in your online bank, the delivery address in your takeout order, the private chat records on your social platform, and even every questionnaire you fill out and every unfamiliar link you click are all under the protection system of Web security.
---
1.1 到底什么是Web安全?先拿超市举例子
What exactly is Web security? Let's start with an analogy of a supermarket.
如果把你经常逛的购物网站比作一家线下超市,Web安全就是这家超市从防盗、防诈骗到防闹事、防仓库被盗的全套安保体系:
- 门口的安检门、监控摄像头,对应的是用户身份认证(Authentication)和访问控制(Access Control):确保只有买了票的人能进超市,普通顾客不能随便进仓库,VIP顾客不能进员工的休息室。
- 超市里的防假货检查、收银台的价格核对,对应的是数据完整性(Integrity)防护:确保你买的东西是正品,结账的时候不会被偷偷改了价格。
- 超市的防火系统、备用电源,对应的是可用性(Availability)防护:确保遇到火灾、停电的时候,超市不会倒闭,你还能正常买东西。
- 超市的防盗标签、防诈骗提示,对应的是漏洞防护:防止小偷把商品藏包里偷走,防止有人用假币诈骗。
Web安全的三大核心目标,也就是信息安全领域通用的CIA三要素,刚好对应上面的三类防护: 1. 保密性(Confidentiality):确保敏感数据(比如你的密码、身份证号、银行卡号)不会被未授权的人获取,就像超市的仓库不会随便让顾客进去。 2. 完整性(Integrity):确保数据不会被未授权篡改,就像你买的商品不会被偷偷换成假货,订单金额不会被偷偷改成1分钱。 3. 可用性(Availability):确保服务能正常提供给授权用户,就像超市不会因为被人捣乱就随便关门,你正常买东西的时候不会遇到网站打不开、提交订单失败的情况。
> 📌 电子版侧边栏:你遇到过这些Web安全事件吗? > 1. 在某小众网站填了“免费领口红”的问卷,第二天就接到装修公司的推销电话; > 2. 在不知名的小网站购物,没过多久就收到冒充客服的诈骗短信,精准报出你的订单号和手机号; > 3. 刷短视频的时候点了个“点击领红包”的弹窗,社交平台账号突然被盗,自动发了一堆博彩广告。 > 这些看起来“倒霉”的经历,本质上都是对应的Web应用没有做好安全防护,导致你的数据泄露、账号被盗。
很多人会混淆Web安全和网络安全的区别:简单来说,网络安全(Cybersecurity)是更大的范畴,包括服务器安全、内网安全、物联网安全、工控安全等所有和网络相关的安全领域,而Web安全(Web Security)是网络安全的一个核心子集,专门针对基于Web协议(HTTP/HTTPS)的应用(比如网站、小程序、API接口)的安全防护。你可以把网络安全看作“整个城市的安保体系”,Web安全就是“所有线上商铺的安保体系”。
---
1.2 渗透测试是黑客行为吗?先搞懂白帽、黑帽和灰帽
Is penetration testing hacker behavior? Let's first understand white hats, black hats and gray hats.
提到Web安全,很多人第一反应就是“黑客”,觉得学Web安全就是当黑客,这是最大的误区。我们可以把和Web安全相关的从业者分成三类,用刚才的超市例子来类比就非常好理解:
```mermaid graph TD A[Web安全从业者] --> B[白帽黑客<br>White Hat] A --> C[灰帽黑客<br>Gray Hat] A --> D[黑帽黑客<br>Black Hat] B --> B1[超市雇佣的安保审计员<br>合法授权测试漏洞<br>上报修复拿奖金] C --> C1[偷偷溜进超市的“民间安全员”<br>未经授权测试漏洞<br>可能留下整改提示] D --> D1[超市的小偷/诈骗犯<br>利用漏洞偷数据/搞破坏<br>非法牟利] style B fill:#90EE90 style C fill:#FFD700 style D fill:#FF6B6B ```
- **白帽黑客(White Hat Hacker)**:也就是我们常说的“安全从业者”,他们是经过企业/网站所有者合法授权,主动测试系统漏洞、帮助修复漏洞的人,就像超市雇佣的安保审计员,会拿着授权书,在超市规定的范围内测试防盗门、监控有没有漏洞,发现漏洞之后告诉超市老板,还能拿奖金。我们本书的所有内容,都是教你怎么成为一名合格的白帽黑客。
- **黑帽黑客(Black Hat Hacker)**:也就是真正的“黑客”,他们未经授权入侵系统、窃取数据、搞破坏,非法牟利,就像偷偷溜进超市偷东西、用假币诈骗的小偷,是违法的,会受到法律的制裁。
- **灰帽黑客(Gray Hat Hacker)**:介于两者之间,他们可能会未经授权测试漏洞,但不会恶意破坏或窃取数据,有时候会留下整改提示,比如偷偷溜进超市,发现门锁坏了,给老板留个纸条说“你家门锁坏了,我帮你试过了,记得修”,这种行为虽然动机是好的,但依然是未经授权的,也可能触犯法律。
> ⚠️ 法律警示:切勿触碰法律红线 > 根据《中华人民共和国网络安全法》第二十七条规定:“任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动。”《中华人民共和国刑法》第二百八十五条规定,非法侵入计算机信息系统,或者非法获取计算机信息系统中存储、处理或者传输的数据,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。 > 2023年某高校大学生李某,未经授权测试学校教务系统的漏洞,导致系统短暂瘫痪,被依法行政拘留10天,还背上了案底,耽误了考研和找工作。没有授权的测试,哪怕是“为了好玩”“为了学习”,也是违法行为。
那什么是合法的渗透测试(Penetration Testing)?合法的渗透测试必须满足三个核心条件: 1. 有明确的书面授权:必须拿到网站/系统所有者签字盖章的测试授权书,明确测试范围、测试时间、允许的测试手段; 2. 不超出授权范围:比如授权你测试www.example.com,你就不能去测example.com的子域名或者其他关联系统,更不能去测服务器上的其他服务; 3. 不破坏、不泄露数据:测试过程中不能删除、篡改数据,不能把测试中获取的用户数据、系统数据泄露给第三方,测试结束后要提交完整的漏洞修复报告,删除所有测试过程中获取的数据。
---
1.3 Web安全领域的“圣经”:OWASP组织
The "Bible" of the Web security field: the OWASP organization.
如果你问任何一个Web安全从业者“入门该看什么资料”,90%的人都会首先推荐OWASP的内容。OWASP全称是Open Web Application Security Project(开放式Web应用安全项目),成立于2001年,是一个非盈利的开源安全研究组织,全球有超过10万名安全研究员、企业安全团队的成员参与贡献,目标是“让所有人都能获取到免费的、开源的Web安全资料,提升整个互联网的安全水平”。
OWASP最知名的成果,就是每年发布的OWASP Top 10:一份根据过去一年全球Web应用漏洞的统计、分析得出的“最危险的10类Web漏洞”榜单,是行业公认的Web安全漏洞分类标杆,全球90%以上的企业安全团队都会参考OWASP Top 10来制定自己的安全防护规范,谷歌、微软、阿里、腾讯等大公司的安全团队,也都会参与OWASP Top 10的调研和制定。
> 📌 电子版超链接:OWASP Top 10 2021官方文档 > 你可以点击这里查看最新的OWASP Top 10官方介绍:[https://owasp.org/Top10/](https://owasp.org/Top10/) [^1]
我们简单看一下2021版OWASP Top 10的10类漏洞,每个漏洞都配一个生活化的例子,你就能快速理解: | 排名 | 漏洞名称 | 中文名 | 生活化例子 | |------|----------|--------|------------| | 1 | Broken Access Control | 失效的访问控制 | 你修改快递单号就能看到别人的快递信息,对应Web里的“越权漏洞” | | 2 | Cryptographic Failures | 加密机制失效 | 网站用HTTP传输你的密码,中间人可以直接窃听到,对应“明文传输漏洞” | | 3 | Injection | 注入 | 在登录框输入`' or 1=1 -- `就能不输密码登录,对应“SQL注入漏洞” | | 4 | Insecure Design | 不安全设计 | 网站要求密码必须是6位数字,容易被暴力破解,对应“设计缺陷漏洞” | | 5 | Security Misconfiguration | 安全配置错误 | 网站后台用默认的`admin/admin`账号密码,没修改,被黑客直接登录 | | 6 | Vulnerable and Outdated Components | 易受攻击和过时的组件 | 网站用了有已知漏洞的Log4j组件,没打补丁,被黑客直接入侵 | | 7 | Identification and Authentication Failures | 识别和身份验证失败 | 网站没有验证码,黑客可以用工具1分钟暴力破解出你的密码 | | 8 | Software and Data Integrity Failures | 软件和数据完整性故障 | 网站更新的时候没校验安装包的完整性,被植入了木马,用户下载之后会被盗号 | | 9 | Security Logging and Monitoring Failures | 安全日志和监控故障 | 网站被攻击了,没有日志记录,也没人告警,过了半个月才发现数据已经被偷光了 | | 10 | Server-Side Request Forgery (SSRF) | 服务器端请求伪造 | 网站有个功能是输入URL就能获取网页内容,黑客输入内网地址,就能访问公司内部的OA系统、数据库 |
你可能会问:这些漏洞看起来都很专业,真的会出现在我们平时用的网站里吗?答案是非常常见。根据Verizon公司2023年发布的《数据泄露调查报告》(Data Breach Investigations Report, DBIR),全球超过60%的Web应用至少存在1个OWASP Top 10里的高危漏洞,而超过80%的数据泄露事件,都是因为这些高危漏洞被利用导致的[^2]。
举个真实的案例:2019年国内某连锁酒店集团因为存在SQL注入漏洞,被黑客拖库,导致1.5亿条用户的入住信息泄露,包括姓名、身份证号、手机号、开房记录、同住人信息等,最后该集团被监管部门罚款5000万元,相关负责人还被追究了刑事责任,品牌口碑直接崩盘。类似的案例每年都在发生,只是大部分没有被公开报道而已。
---
1.4 本书的核心内容:先搞懂三大“万恶之源”
The core content of this book: First understand the three "roots of all evil".
你可能会好奇:Web漏洞有几十上百种,为什么本书只重点讲XSS、SQL注入和CSRF这三个?因为根据OWASP的统计,这三类漏洞占所有Web高危漏洞的70%以上,是黑客入侵网站、窃取数据最常用的手段,也是企业安全防护最关注的核心漏洞。我们把他们称为Web安全的“万恶之源”,只要掌握了这三个漏洞的原理、利用方式和修复方案,你就掌握了Web安全的核心。
我们先给这三个“大佬”做个简单的“自我介绍”,后面的章节会逐一详细拆解: 1. XSS(Cross-Site Scripting,跨站脚本攻击):黑客往网页里插入恶意脚本,用户浏览网页的时候脚本自动运行,偷用户的cookie、账号密码,甚至控制用户的账号。比如你点了一个陌生链接,什么都没做,账号就被盗了,大概率就是碰到了XSS漏洞。 2. SQL注入(SQL Injection):黑客在输入框里输入特殊的SQL语句,欺骗后端数据库执行恶意命令,直接偷走数据库里的所有数据,甚至能删库、控制服务器。比如你填个问卷,网站后台的所有用户信息都被偷走了,就是SQL注入导致的。 3. CSRF(Cross-Site Request Forgery,跨站请求伪造):黑客诱导你点击一个恶意链接,链接会自动以你的身份向网站发请求,比如偷偷用你的账号转账、改密码、发广告,你完全不知道发生了什么。比如你只是刷了个带“点击领红包”弹窗的网页,账号就自动发了一堆广告,大概率就是碰到了CSRF漏洞。
> ⚡ 小知识:为什么这三个漏洞这么常见? > 这三个漏洞的成因都非常简单:都是开发人员没有对用户的输入做校验、过滤导致的,只要开发的时候多写几行校验代码,就能完全避免。但很多开发人员为了赶进度,会忽略安全校验,导致这些漏洞大量出现。
---
1.5 Web安全学习路线图:别一开始就啃硬骨头
Web security learning roadmap: Don't start with hard bones.
很多初学者刚接触Web安全的时候,容易陷入两个极端:要么觉得“太简单了,随便学学就会”,要么觉得“太难了,涉及的知识太多了,根本学不会”。其实Web安全的学习是有路径的,只要按部就班来,零基础也能快速入门。
我们整理了一份适合初学者的学习路线,你可以根据自己的时间调整: ```mermaid graph LR A[基础阶段<br>(1-2个月)] --> B[核心漏洞学习<br>(2-3个月)] B --> C[其他漏洞学习<br>(1-2个月)] C --> D[实战提升阶段<br>(长期)]
A1[HTTP/HTTPS协议原理<br>HTML/CSS/JS基础<br>Linux常用命令<br>MySQL基础] --> A B1[XSS漏洞全解<br>SQL注入全解<br>CSRF漏洞全解] --> B C1[文件上传漏洞<br>SSRF/XXE漏洞<br>逻辑漏洞<br>权限绕过漏洞] --> C D1[靶场实战<br>CTF比赛<br>SRC漏洞提交<br>代码审计] --> D ```
第一阶段:基础打底(1-2个月)
这个阶段不用学太深,只要够用就行,重点是搞懂Web应用是怎么工作的:
- **HTTP/HTTPS协议**:搞懂浏览器和服务器之间是怎么通信的,请求和响应是什么,Cookie、Session是什么,HTTPS是怎么加密的。你可以打开浏览器的F12开发者工具,随便打开一个网站,看看“网络”面板里的请求和响应,先有个直观的感受。
- **前端基础**:只要懂HTML、CSS、JS的基本语法,能看懂前端代码就行,不用会写复杂的页面。
- **后端基础**:了解PHP、Python、Java等常用后端语言的基本语法,知道后端是怎么处理请求、操作数据库的。
- **数据库基础**:懂MySQL的基本操作,会写简单的SQL语句,
懂MySQL的基本操作,会写简单的SQL语句,知道SELECT、INSERT、UPDATE、DELETE这些基本命令的用法就行。这个阶段不用追求“精通”,只要遇到简单的代码能看懂就行,比如你看到一段PHP代码里写了`$sql = "SELECT * FROM user