浏览器安全机制

2 阅读13分钟

核心定位:本文专为面试复习设计,结构清晰、重点突出,兼顾通俗理解与专业表述,可直接背诵,末尾附高频面试题及标准回答,帮你快速掌握浏览器安全核心考点。

一、浏览器安全核心逻辑(必背)

浏览器安全的本质一句话概括:不信任来自服务器的内容,也不信任来自其他站点的内容

简单说,浏览器就像一个“安全守门人”,不会轻易相信任何外部传来的内容,哪怕是你正常访问的网站,也会通过一套机制层层校验,避免恶意内容伤害你的设备和信息。

核心保障机制(按重要性排序,面试优先说):

  1. 同源策略(最核心,所有安全机制的基础)

  2. XSS 防护(防御脚本注入攻击)

  3. CSRF 防护(防御伪造请求攻击)

  4. 点击劫持防御(防止恶意诱导点击)

  5. 内容安全策略 CSP(兜底防护,限制内容加载)

  6. 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 就是“合法跨域”的解决方案,本质是“浏览器和服务器协商,允许特定跨域请求”。

核心流程(面试可直接背诵):

  1. 当浏览器发起跨域请求时,会自动在请求头中添加 Origin: https://a.com(告诉服务器,请求来自哪个域名);

  2. 服务器收到请求后,判断该域名是否允许跨域,若允许,会在响应头中添加 Access-Control-Allow-Origin: https://a.com(告诉浏览器,这个域名可以访问);

  3. 浏览器收到响应后,校验响应头中的域名,若匹配,就允许前端读取响应结果;若不匹配,就拦截响应。

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. 攻击流程(通俗易懂,面试可直接复述)

  1. 你先登录银行网站(bank.com),浏览器会保存 bank.com 的 Cookie(记录你的登录状态);

  2. 你没有退出银行网站,又打开了恶意网站(evil.com);

  3. evil.com 的页面里,隐藏了一个请求(比如 <img src="https://bank.com/transfer?money=1000">);

  4. 浏览器加载这个 img 标签时,会自动携带 bank.com 的 Cookie,向银行服务器发送转账请求;

  5. 银行服务器看到 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个属性,分别对应不同的防御场景,记清每个属性的作用即可。

    1. HttpOnly:设置 Set-Cookie: HttpOnly,禁止 JS 读取 Cookie。核心作用:防御 XSS 攻击(因为 XSS 是通过 JS 偷 Cookie,设置后 JS 读不到,就无法窃取)。
    1. Secure:设置 Set-Cookie: Secure,限制 Cookie 只能在 HTTPS 协议下发送,HTTP 协议下不携带。核心作用:防止 Cookie 在传输过程中被窃取(HTTPS 是加密传输,HTTP 是明文)。
    1. SameSite:设置 Set-Cookie: SameSite=Strict/Lax/None,控制 Cookie 跨域携带。核心作用:防御 CSRF 攻击(Strict 完全禁止跨域携带,Lax 允许部分跨域场景,None 允许所有跨域)。

八、面试总结版回答结构(必背,应对“浏览器安全机制有哪些”)

如果面试官问:“请说说浏览器的安全机制有哪些?”,按以下结构回答,逻辑清晰,加分明显:

  1. 第一层(基础核心):同源策略(最核心,限制跨域访问)+ CORS(跨域资源共享,解决合法跨域需求);

  2. 第二层(攻击防御):XSS 防护(防御脚本注入)+ CSRF 防护(防御伪造请求);

  3. 第三层(兜底补充):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个核心展开的。

十、高频面试常考问题(含标准回答,直接背诵)

基础题(必答,入门级)

  1. Q:浏览器安全的核心逻辑是什么? A:不信任来自服务器的内容,也不信任来自其他站点的内容,通过一系列机制限制跨域访问、防止脚本注入和伪造请求。

  2. Q:什么是同源?同源策略限制哪些操作? A:同源是指协议、域名、端口三者完全相同;限制 DOM 访问、Cookie 读取、localStorage 读取、AJAX 响应结果读取(不限制请求发送)。

  3. Q:XSS 有哪几种类型?核心防御方法是什么? A:3种类型:反射型、存储型、DOM 型;核心防御:服务端转义特殊字符、前端避免使用 innerHTML、启用 CSP。

  4. Q:CSRF 的攻击流程是什么?如何防御? A:攻击流程:用户登录目标网站→未退出访问恶意网站→恶意网站伪造请求→浏览器自动携带 Cookie→服务器执行恶意操作;防御:使用 CSRF Token、设置 SameSite Cookie。

进阶题(加分,中高级)

  1. Q:CORS 是浏览器限制还是服务器限制?为什么? A:是浏览器限制。服务器只负责通过响应头告知浏览器“允许哪个域名跨域”,而真正拦截跨域响应、限制前端读取结果的,是浏览器。

  2. Q:XSS 和 CSRF 的核心区别是什么? A:XSS 攻击浏览器,注入恶意 JS 执行;CSRF 攻击服务器,伪造用户请求,利用 Cookie 自动携带的特性。

  3. Q:Cookie 的 HttpOnly、Secure、SameSite 属性分别有什么作用? A:HttpOnly 防 XSS(禁止 JS 读 Cookie);Secure 防传输窃取(仅 HTTPS 携带);SameSite 防 CSRF(限制跨域携带)。

  4. Q:为什么 CORS 不能防御 CSRF? A:因为 CORS 限制的是“跨域请求的响应读取”,而 CSRF 不需要读取响应,只要服务器执行请求即可,所以 CORS 无法防御。