核心定位:本文专为面试复习设计,结构清晰、重点突出,兼顾通俗理解与专业表述,可直接背诵,末尾附高频面试题及标准回答,帮你快速掌握浏览器安全核心考点。
一、浏览器安全核心逻辑(必背)
浏览器安全的本质一句话概括:不信任来自服务器的内容,也不信任来自其他站点的内容。
简单说,浏览器就像一个“安全守门人”,不会轻易相信任何外部传来的内容,哪怕是你正常访问的网站,也会通过一套机制层层校验,避免恶意内容伤害你的设备和信息。
核心保障机制(按重要性排序,面试优先说):
-
同源策略(最核心,所有安全机制的基础)
-
XSS 防护(防御脚本注入攻击)
-
CSRF 防护(防御伪造请求攻击)
-
点击劫持防御(防止恶意诱导点击)
-
内容安全策略 CSP(兜底防护,限制内容加载)
-
Cookie 安全机制(保护用户身份信息)
二、同源策略(Same-Origin Policy)(面试高频)
1. 什么是“同源”?(通俗+专业)
通俗说:两个网站“长得一样”(协议、域名、端口都相同),才算同源;只要有一个不一样,就是跨域。
专业定义:必须同时满足以下3个条件,才算同源:
-
协议相同(如 http 和 https 不同源)
-
域名相同(如 a.com 和 b.com 不同源,a.com 和 sub.a.com 也不同源)
-
端口相同(如 80 端口和 8080 端口不同源;注意:https 默认端口443、http 默认端口80,可省略)
举例(面试可直接用):
2. 同源策略限制什么?(重点,必背)
同源策略的核心是“限制跨域访问”,具体限制4类操作(面试要逐条说清):
-
DOM 访问:跨域网站不能操作另一个网站的页面元素(如获取、修改)
-
Cookie 读取:跨域网站不能读取另一个网站存储的 Cookie
-
localStorage 读取:跨域网站不能读取另一个网站的本地存储
-
AJAX 请求返回结果读取:重点提醒:不是不能发跨域请求,而是不能读取请求返回的结果(比如跨域发请求能成功,但浏览器会拦截响应,不让前端获取数据)
3. 面试追问(必背回答)
Q:为什么需要同源策略?
A:核心是防止恶意网站窃取用户信息。举个例子:如果没有同源策略,你打开了银行网站(bank.com)并登录,再打开恶意网站(evil.com),evil.com 就能直接读取 bank.com 的页面内容(DOM)、Cookie,进而窃取你的银行账户信息,导致账户被盗。
三、CORS(跨域资源共享)(和同源策略配套,面试常考)
通俗说:同源策略限制了跨域访问,但实际开发中,我们经常需要跨域请求(比如前端项目和后端接口不在一个域名),CORS 就是“合法跨域”的解决方案,本质是“浏览器和服务器协商,允许特定跨域请求”。
核心流程(面试可直接背诵):
-
当浏览器发起跨域请求时,会自动在请求头中添加
Origin: https://a.com(告诉服务器,请求来自哪个域名); -
服务器收到请求后,判断该域名是否允许跨域,若允许,会在响应头中添加
Access-Control-Allow-Origin: https://a.com(告诉浏览器,这个域名可以访问); -
浏览器收到响应后,校验响应头中的域名,若匹配,就允许前端读取响应结果;若不匹配,就拦截响应。
1. 简单请求 vs 复杂请求(面试重点区分)
简单请求(无需预检,直接发送)
满足以下条件就是简单请求(记2个核心即可):
-
请求方法:GET、POST(仅支持 application/x-www-form-urlencoded 格式);
-
特点:浏览器直接发送请求,无需提前和服务器协商。
复杂请求(需预检,先协商再发送)
只要不满足简单请求的条件,就是复杂请求(举例记重点):
-
请求方法:PUT、DELETE 等(非 GET/POST);
-
请求格式:Content-Type: application/json(非默认格式);
-
特点:浏览器会先发送一个 OPTIONS 预检请求(询问服务器“我能发这个跨域请求吗”),服务器必须返回允许的响应头,浏览器才会发送真正的请求。
2. 高频面试题(必背)
Q:CORS 是浏览器限制还是服务器限制?
A:核心是浏览器限制。服务器的作用只是“决定是否放行”(通过响应头告知浏览器),而真正拦截跨域响应、限制读取结果的,是浏览器。
四、XSS(跨站脚本攻击)(面试重中之重)
1. 本质(必背)
通俗说:攻击者把恶意 JavaScript 代码,注入到你的网页里,让浏览器执行这段恶意代码,从而窃取信息、控制页面。
专业表述:把恶意 JS 注入到页面 DOM 中,使其被浏览器解析并执行,进而发起攻击。
2. 三种 XSS 类型(区分清楚,面试必考)
1️⃣ 反射型 XSS(最常见,临时攻击)
通俗说:恶意代码藏在 URL 里,服务器直接把 URL 中的参数拼到 HTML 中,浏览器解析后执行恶意代码。
举例(面试可直接说):
URL:https://a.com?name=<script>alert(1)</script>
如果服务器没有对“name”参数做处理,直接把参数拼到页面 HTML 中,浏览器会执行 <script> 里的代码(这里是弹出弹窗,实际可能是偷 Cookie)。
特点:攻击临时有效,只有点击了带恶意参数的 URL,才会被攻击。
2️⃣ 存储型 XSS(最危险,持久攻击)
通俗说:攻击者把恶意代码提交到服务器(比如评论区、留言板),服务器把恶意代码存入数据库;之后,所有访问该页面的用户,都会加载并执行这段恶意代码。
举例(面试可直接说):
攻击者在网站评论区输入:<script>偷Cookie的代码</script>,服务器没有过滤,直接存入数据库;其他用户访问该评论页时,页面会加载这段代码,导致所有访问者的 Cookie 被窃取。
特点:攻击持久有效,影响所有访问该页面的用户,危害极大。
3️⃣ DOM 型 XSS(前端自身漏洞,无需服务器参与)
通俗说:恶意代码藏在 URL 里,前端代码直接读取 URL 参数,并通过 innerHTML 等方法插入到页面中,导致恶意代码执行(服务器全程没有参与,是前端自身代码的漏洞)。
举例(面试可直接说):
前端代码:div.innerHTML = location.search(读取 URL 中的参数,直接插入页面);
如果 URL 是 https://a.com?content=<script>恶意代码</script>,前端会直接把恶意代码插入页面,导致执行。
特点:漏洞在前端,与服务器无关,容易被忽略。
3. XSS 能干什么?(面试简要说明,体现认知)
-
窃取用户 Cookie(最核心目的,获取用户身份信息);
-
冒充用户操作(比如点击按钮、提交表单,比如冒充用户转账);
-
发送恶意请求(向服务器发送伪造请求);
-
监听用户键盘输入(窃取账号、密码等敏感信息)。
4. 防御方法(面试重点,必背3种核心方法)
-
方法1:前端避免使用 innerHTML,优先使用 textContent(textContent 会把内容当作纯文本解析,不会执行脚本);
-
方法2:服务端转义(最核心防御),把特殊字符(<、>、"、' 等)转义成 HTML 实体(比如 < 转成 <),让浏览器当作纯文本显示,不执行脚本;
-
方法3:使用 CSP(内容安全策略),在服务器响应头中添加
Content-Security-Policy: default-src 'self',限制页面只能加载自身域名的内容,禁止加载外部恶意脚本。
五、CSRF(跨站请求伪造)(和 XSS 对比记忆,面试常考)
1. 本质(必背)
通俗说:攻击者利用“浏览器会自动携带 Cookie”的特性,伪造用户的请求,让服务器误以为是用户自己发起的请求,从而执行恶意操作(比如转账、改密码)。
专业表述:利用浏览器自动携带目标网站 Cookie 的特性,伪造用户身份,向目标服务器发送恶意请求,完成攻击。
2. 攻击流程(通俗易懂,面试可直接复述)
-
你先登录银行网站(bank.com),浏览器会保存 bank.com 的 Cookie(记录你的登录状态);
-
你没有退出银行网站,又打开了恶意网站(evil.com);
-
evil.com 的页面里,隐藏了一个请求(比如
<img src="https://bank.com/transfer?money=1000">); -
浏览器加载这个 img 标签时,会自动携带 bank.com 的 Cookie,向银行服务器发送转账请求;
-
银行服务器看到 Cookie,以为是你自己发起的转账请求,就执行了转账操作,你的钱就没了。
3. CSRF 和 XSS 的区别(面试必考,表格对比,好记)
| 对比维度 | XSS(跨站脚本攻击) | CSRF(跨站请求伪造) |
|---|---|---|
| 攻击对象 | 攻击浏览器(让浏览器执行恶意脚本) | 攻击服务器(伪造用户请求,欺骗服务器) |
| 攻击方式 | 注入恶意 JS 代码,执行脚本 | 伪造合法请求,利用 Cookie 自动携带 |
| 核心利用点 | 利用脚本执行权限 | 利用浏览器自动携带 Cookie 的特性 |
4. 防御方式(面试必背2种核心方法)
-
方法1:CSRF Token(最常用)。服务器生成一个随机的 Token(字符串),嵌入到表单或请求头中;前端提交请求时,必须携带这个 Token;服务器收到请求后,校验 Token 的合法性,只有 Token 正确,才执行请求(恶意网站无法获取这个 Token,所以无法伪造请求)。
-
方法2:SameSite Cookie(最简单)。在设置 Cookie 时,添加
Set-Cookie: SameSite=Strict(或 Lax),限制 Cookie 只能在同源网站中携带,跨域网站无法自动携带该 Cookie,从根源上阻止 CSRF 攻击。
六、点击劫持(Clickjacking)(简单记忆,面试不深入但要会)
1. 攻击方式(通俗说)
攻击者制作一个页面,用 iframe 嵌入目标网站(比如银行转账页面),然后在 iframe 上方覆盖一个透明的按钮(和目标网站的“转账”按钮位置完全重合);用户以为点击的是正常按钮(比如“领取福利”),实际点击的是 iframe 里的银行转账按钮,从而完成恶意操作。
核心:利用透明层覆盖,诱导用户误点击。
2. 防御方式(必背2种)
-
方法1:响应头添加
X-Frame-Options: DENY,禁止当前网站被任何 iframe 嵌入; -
方法2:响应头添加
Content-Security-Policy: frame-ancestors 'none',和上面效果一致,更符合现代安全规范。
七、Cookie 安全机制(和 XSS、CSRF 联动,面试常考)
Cookie 是浏览器存储用户身份信息的关键,其安全机制主要是3个属性,分别对应不同的防御场景,记清每个属性的作用即可。
-
- HttpOnly:设置
Set-Cookie: HttpOnly,禁止 JS 读取 Cookie。核心作用:防御 XSS 攻击(因为 XSS 是通过 JS 偷 Cookie,设置后 JS 读不到,就无法窃取)。
- HttpOnly:设置
-
- Secure:设置
Set-Cookie: Secure,限制 Cookie 只能在 HTTPS 协议下发送,HTTP 协议下不携带。核心作用:防止 Cookie 在传输过程中被窃取(HTTPS 是加密传输,HTTP 是明文)。
- Secure:设置
-
- SameSite:设置
Set-Cookie: SameSite=Strict/Lax/None,控制 Cookie 跨域携带。核心作用:防御 CSRF 攻击(Strict 完全禁止跨域携带,Lax 允许部分跨域场景,None 允许所有跨域)。
- SameSite:设置
八、面试总结版回答结构(必背,应对“浏览器安全机制有哪些”)
如果面试官问:“请说说浏览器的安全机制有哪些?”,按以下结构回答,逻辑清晰,加分明显:
-
第一层(基础核心):同源策略(最核心,限制跨域访问)+ CORS(跨域资源共享,解决合法跨域需求);
-
第二层(攻击防御):XSS 防护(防御脚本注入)+ CSRF 防护(防御伪造请求);
-
第三层(兜底补充):CSP(内容安全策略)+ Cookie 安全机制(保护用户身份)+ 点击劫持防御(防止误点击)。
九、面试加分点(中高级水平,记住就能拉开差距)
如果面试官追问以下问题,能答出这些,说明你对浏览器安全理解较深:
-
Q1:XSS 可以绕过 HttpOnly 吗? A:不能直接读取 Cookie,但可以通过其他方式攻击(比如发送恶意请求,把 Cookie 携带到攻击者的服务器,无需 JS 读取)。
-
Q2:CSRF 为什么只对 Cookie 登录有效? A:因为 CSRF 的核心是利用浏览器“自动携带 Cookie”的特性;如果是 Token 登录(比如 JWT,存在 localStorage 中),浏览器不会自动携带,攻击者无法伪造请求,所以 CSRF 无效。
-
Q3:CORS 为什么不能防 CSRF? A:因为 CORS 限制的是“跨域请求的响应读取”,而 CSRF 不需要读取响应(比如转账请求,只要服务器执行即可,攻击者不需要知道转账结果),所以 CORS 无法防御 CSRF。
🔥 面试级结论(必背,总结核心)
浏览器安全的核心,归根结底就一句话:限制跨域访问 + 防止脚本注入 + 防止伪造请求。所有安全机制,都是围绕这3个核心展开的。
十、高频面试常考问题(含标准回答,直接背诵)
基础题(必答,入门级)
-
Q:浏览器安全的核心逻辑是什么? A:不信任来自服务器的内容,也不信任来自其他站点的内容,通过一系列机制限制跨域访问、防止脚本注入和伪造请求。
-
Q:什么是同源?同源策略限制哪些操作? A:同源是指协议、域名、端口三者完全相同;限制 DOM 访问、Cookie 读取、localStorage 读取、AJAX 响应结果读取(不限制请求发送)。
-
Q:XSS 有哪几种类型?核心防御方法是什么? A:3种类型:反射型、存储型、DOM 型;核心防御:服务端转义特殊字符、前端避免使用 innerHTML、启用 CSP。
-
Q:CSRF 的攻击流程是什么?如何防御? A:攻击流程:用户登录目标网站→未退出访问恶意网站→恶意网站伪造请求→浏览器自动携带 Cookie→服务器执行恶意操作;防御:使用 CSRF Token、设置 SameSite Cookie。
进阶题(加分,中高级)
-
Q:CORS 是浏览器限制还是服务器限制?为什么? A:是浏览器限制。服务器只负责通过响应头告知浏览器“允许哪个域名跨域”,而真正拦截跨域响应、限制前端读取结果的,是浏览器。
-
Q:XSS 和 CSRF 的核心区别是什么? A:XSS 攻击浏览器,注入恶意 JS 执行;CSRF 攻击服务器,伪造用户请求,利用 Cookie 自动携带的特性。
-
Q:Cookie 的 HttpOnly、Secure、SameSite 属性分别有什么作用? A:HttpOnly 防 XSS(禁止 JS 读 Cookie);Secure 防传输窃取(仅 HTTPS 携带);SameSite 防 CSRF(限制跨域携带)。
-
Q:为什么 CORS 不能防御 CSRF? A:因为 CORS 限制的是“跨域请求的响应读取”,而 CSRF 不需要读取响应,只要服务器执行请求即可,所以 CORS 无法防御。