← 返回目录

第 6 卷

第 6 / 10 卷日期:

11. 解释跨站请求伪造(CSRF)攻击及其防御机制

已登录目标网站的用户,在不知情的情况下向目标网站发起恶意请求(如转账、修改密码、提交表单等),利用用户的合法身份(Cookie/Session)完成攻击,核心危害是「冒充用户执行未授权操

作」。

一、CSRF攻击的核心原理与流程

• 核心前提:用户已登录目标网站,浏览器保存了该网站的身份凭证(如Session Cookie),且

Cookie默认会随跨域请求自动携带。

• 攻击流程:

  1. 攻击者构造恶意请求(如转账接口的HTTP请求),并将其隐藏在恶意网页/链接中(如图片标

签、iframe、诱导点击的链接)。

  1. 诱导已登录目标网站的用户访问该恶意网页/点击链接。
  2. 用户浏览器在加载恶意内容时,自动携带目标网站的Cookie,向目标网站发起恶意请求。
  3. 目标网站验证Cookie有效,误认为是用户主动发起的请求,执行恶意操作(如转账成功、密码被

修改)。

二、CSRF攻击的典型场景

  • 金融类网站:诱导用户发起转账、支付请求。
  • 用户中心:诱导用户修改密码、绑定恶意手机号、修改收货地址。
  • 内容管理系统:诱导管理员发布恶意文章、删除数据。

三、CSRF的核心防御机制(前端+后端协同)

CSRF防御的核心原则是「让服务器能够区分请求是用户主动发起的,还是攻击者伪造的」,关键在于验证请求的「合法性」和「用户意图」,主要防御手段如下:

  1. 核心防御:添加CSRF Token(推荐,最有效)

• 原理:服务器为每个登录用户生成一个唯一的、随机的CSRF Token(令牌),并将Token存储在

Session中(后端)和页面中(如隐藏表单字段、前端存储);用户发起请求时,必须携带该 Token,服务器验证Token的有效性(是否存在、是否与Session中的一致),验证通过才执行请

求。由于攻击者无法获取用户页面中的CSRF Token,无法构造合法请求。

• 实现流程:

  1. 前端发起请求:表单提交时自动携带csrfToken字段,或AJAX请求时在请求头中添加X-CSRF-

Token字段。

  1. 服务器验证:接收请求后,对比请求携带的Token与Session中的Token,一致则放行,不一致

则拒绝(返回403 Forbidden)。

• 前端注意事项:AJAX请求需主动在请求头中携带Token,避免遗漏;禁止将Token存储在Cookie

中(防止被攻击者利用),优先存储在页面DOM或localStorage中。

  1. 验证请求来源:检查Referer/Origin请求头

• 原理:HTTP请求头中的Referer字段记录了请求的来源页面URL,Origin字段记录了请求的来源域

名(不含路径)。服务器可通过验证Referer/Origin是否为可信域名(如目标网站自身域名),拒绝来自不可信域名的请求。

• 实现方式:

  • 验证Referer:如目标网站域名为example.com,仅放行Referer以https://example.com/开头的

请求。

  • 验证Origin:仅放行Origin为https://example.com的请求(Origin优先级高于Referer,更安全,

无路径信息,避免Referer被篡改)。

• 局限性:Referer可能被浏览器插件、代理服务器篡改或隐藏(如用户设置隐私模式),无法作为唯

一防御手段,仅作为辅助防御。

  1. 强化Cookie安全:设置SameSite属性

• 原理:Cookie的SameSite属性用于限制Cookie在跨域请求中的携带行为,从根源上阻止攻击者利

用用户Cookie发起跨站请求。

• SameSite属性值:

  • SameSite=Strict:仅在同源请求中携带Cookie,完全禁止跨站请求携带,防御效果最强(可能

影响正常跨域业务,如第三方登录)。

  • SameSite=Lax:仅在GET请求、用户主动点击链接等“安全的跨站请求”中携带Cookie,禁止

嵌入在恶意网页中的跨站请求(如图片、iframe)携带,是平衡安全性和可用性的推荐值。

  • SameSite=None:允许跨域请求携带Cookie,需配合Secure属性(仅HTTPS协议下生效),适

用于需要跨域携带Cookie的场景(如第三方支付、跨域单点登录)。

  • 实现方式:后端设置Cookie时添加SameSite属性,如Set-Cookie: sessionId=xxx;

SameSite=Lax; Secure; HttpOnly。

  1. 其他辅助防御手段

• 重要操作二次验证:对敏感操作(如转账、修改密码),添加验证码、短信验证、密码再次输入等

• 限制请求方法:敏感接口仅允许POST请求(GET请求易被嵌入图片、链接中触发),但POST请求

  • 缩短Session/Cookie有效期:减少用户登录状态的持续时间,降低CSRF攻击的窗口时间。

12. 什么是SQL注入攻击?尽管主要是后端的问题,前端开发者如何帮助防

御?

SQL注入攻击(SQL Injection)是攻击者通过将恶意SQL代码插入到用户输入的数据中,欺骗服务器执行该恶意SQL语句,从而实现窃取数据库数据、修改/删除数据库内容、甚至控制服务器的一种严重

Web安全漏洞。其核心原因是「后端未对用户输入进行严格过滤,直接将用户输入拼接到SQL语句中执行」。

一、SQL注入攻击的核心原理与示例

• 核心原理:后端程序将用户输入的字符串直接拼接到SQL语句中,导致用户输入的恶意SQL代码被

解析并执行。

• 攻击示例:

  1. 正常场景:用户登录页面,后端SQL语句为 SELECT * FROM users WHERE

username='{$username}' AND password='{$password}',用户输入合法用户名/密码(如admin/123456),SQL语句正常执行。

  1. 攻击场景:攻击者在用户名输入框输入 ' OR '1'='1,密码任意输入,拼接后的SQL语句变

为 SELECT * FROM users WHERE username='' OR '1'='1' AND password='xxx'。由于 '1'='1' 恒为真,该SQL语句会查询出所有用户数据,攻击者无需正

确密码即可登录。

二、SQL注入的危害

  • 窃取敏感数据:如用户账号密码、个人信息、交易记录、商业机密等。
  • 篡改数据库:修改用户数据、添加恶意账号、篡改网站内容。
  • 删除数据:执行DELETE、DROP语句,导致数据丢失、网站瘫痪。
  • 控制服务器:通过SQL注入获取服务器权限,植入恶意程序、挖矿病毒等。

三、前端开发者的防御协助措施

SQL注入的核心防御责任在后端(如使用参数化查询、ORM框架),但前端作为用户输入的“第一道关口”,可通过输入过滤、数据校验等手段,从源头减少恶意输入的可能性,辅助后端提升防御能

力。

全站分卷索引 · 10 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷