<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CSRF防护 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/csrf%E9%98%B2%E6%8A%A4/</link><description>Recent content in CSRF防护 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/csrf%E9%98%B2%E6%8A%A4/index.xml" rel="self" type="application/rss+xml"/><item><title>CSRF攻击Token验证机制</title><link>https://fe-interview.pangcy.cn/docs/network/network-22/</link><pubDate>Tue, 04 Mar 2025 09:31:00 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/network/network-22/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>该题主要考核候选人对Web安全防御机制的系统性理解，重点评估三个核心维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>CSRF攻击原理认知&lt;/strong>：理解攻击如何利用Cookie自动携带机制&lt;/li>
&lt;li>&lt;strong>防御方案设计能力&lt;/strong>：对比双重Cookie验证与Token校验的实现差异&lt;/li>
&lt;li>&lt;strong>现代安全机制掌握&lt;/strong>：剖析SameSite属性工作原理及浏览器兼容性处理&lt;/li>
&lt;/ol>
&lt;p>具体评估点：&lt;/p>
&lt;ul>
&lt;li>CSRF的会话挟持实现路径&lt;/li>
&lt;li>双重Cookie验证的XSS防御脆弱性&lt;/li>
&lt;li>Token存储方案的安全性考量&lt;/li>
&lt;li>SameSite属性与CORS策略的协同&lt;/li>
&lt;li>防御机制组合方案设计&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>SameSite Cookie &amp;gt; CSRF Token &amp;gt; 双重Cookie验证 &amp;gt; 请求来源校验&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>CSRF攻击通过诱导用户访问恶意页面，利用浏览器自动携带身份Cookie的特性伪造请求。防御体系需打破&amp;quot;请求自动携带凭证&amp;quot;和&amp;quot;请求来源不可控&amp;quot;两个关键点。&lt;/p>
&lt;p>&lt;strong>双重Cookie验证&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>服务端生成随机Token写入Cookie&lt;/li>
&lt;li>前端读取Cookie值作为参数或自定义Header发送&lt;/li>
&lt;li>服务端校验请求携带值是否与Cookie匹配&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>CSRF Token校验&lt;/strong>：&lt;/p>
&lt;pre class="mermaid">graph TD
A[用户登录] --&amp;gt; B[生成加密Token]
B --&amp;gt; C[Token存入Session]
C --&amp;gt; D[嵌入表单隐藏域]
D --&amp;gt; E[请求携带Token]
E --&amp;gt; F[服务端校验]
&lt;/pre>
&lt;p>&lt;strong>SameSite Cookie&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>Strict：完全禁止跨站携带&lt;/li>
&lt;li>Lax：允许导航跳转携带（GET请求）&lt;/li>
&lt;li>None：关闭限制（需配合Secure）&lt;/li>
&lt;/ul>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>混淆XSS与CSRF防御方案&lt;/li>
&lt;li>误认为SameSite可替代其他CSRF防护&lt;/li>
&lt;li>在Token存储时忽略加密签名&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>CSRF攻击利用浏览器自动携带Cookie的特性，通过伪造用户身份执行敏感操作。双重Cookie验证通过在请求参数或Header中携带Cookie值进行二次校验，但存在XSS漏洞暴露风险。服务端Token校验通过加密令牌实现请求来源认证，配合Session存储更安全。SameSite Cookie通过限制跨站请求的Cookie携带行为，与Token方案形成纵深防御。&lt;/p>
&lt;p>防御方案需注意：&lt;/p>
&lt;ol>
&lt;li>Token需加密存储并设置有效期&lt;/li>
&lt;li>敏感操作使用POST等非幂等方法&lt;/li>
&lt;li>SameSite设置为Lax平衡安全与可用性&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="解决方案">解决方案 &lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="双重cookie实现">双重Cookie实现 &lt;a href="#%e5%8f%8c%e9%87%8dcookie%e5%ae%9e%e7%8e%b0" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="fbfefc7" class="language-javascript ">
 &lt;code>// 服务端设置Cookie时生成随机Token
res.setHeader(&amp;#39;Set-Cookie&amp;#39;, [
 `csrf_token=${generateToken()}; HttpOnly; SameSite=Lax`
])

// 前端Ajax请求示例
fetch(&amp;#39;/transfer&amp;#39;, {
 method: &amp;#39;POST&amp;#39;,
 headers: {
 &amp;#39;X-CSRF-TOKEN&amp;#39;: document.cookie.match(/csrf_token=([^;]&amp;#43;)/)[1] 
 }
})&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="token校验实现">Token校验实现 &lt;a href="#token%e6%a0%a1%e9%aa%8c%e5%ae%9e%e7%8e%b0" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="2f1cbf2" class="language-javascript ">
 &lt;code>// 生成加密Token（使用HMAC算法）
const crypto = require(&amp;#39;crypto&amp;#39;)
function generateToken(session) {
 const hmac = crypto.createHmac(&amp;#39;sha256&amp;#39;, process.env.SECRET)
 return hmac.update(session).digest(&amp;#39;hex&amp;#39;)
}

// 中间件校验
app.post(&amp;#39;/api&amp;#39;, (req, res) =&amp;gt; {
 const clientToken = req.headers[&amp;#39;x-csrf-token&amp;#39;]
 const serverToken = generateToken(req.session.id)
 if(!constantTimeCompare(clientToken, serverToken)) {
 return res.sendStatus(403)
 }
})&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="优化建议">优化建议 &lt;a href="#%e4%bc%98%e5%8c%96%e5%bb%ba%e8%ae%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>关键操作增加短信二次验证&lt;/li>
&lt;li>重要接口限制同源访问（CORS白名单）&lt;/li>
&lt;li>监控异常请求频率&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>如何防御Token在前端的存储风险？&lt;/strong>&lt;/p></description></item><item><title>Cookie安全属性配置策略</title><link>https://fe-interview.pangcy.cn/docs/network/network-27/</link><pubDate>Tue, 04 Mar 2025 09:31:00 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/network/network-27/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>本题考察候选人三个核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>安全防护机制理解&lt;/strong>：Cookie安全属性的防御作用及组合使用策略&lt;/li>
&lt;li>&lt;strong>浏览器安全策略演进&lt;/strong>：SameSite默认值变化的背景及技术决策逻辑&lt;/li>
&lt;li>&lt;strong>纵深防御体系建设&lt;/strong>：多维度安全属性的协同防御效果&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点：&lt;/p>
&lt;ul>
&lt;li>SameSite三种模式对CSRF攻击的阻断原理&lt;/li>
&lt;li>HttpOnly与Secure属性的防御边界&lt;/li>
&lt;li>浏览器厂商安全策略调整的驱动因素&lt;/li>
&lt;li>跨站请求伪造（CSRF）与跨站脚本（XSS）的防御差异&lt;/li>
&lt;li>Cookie作用域控制与传输层安全的联动机制&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>SameSite策略 &amp;gt; CSRF攻击链 &amp;gt; HttpOnly/Secure防御层次&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>&lt;strong>SameSite=Lax&lt;/strong>（默认值）：&lt;/p>
&lt;ul>
&lt;li>允许跨站GET请求携带Cookie（如图片加载、导航跳转）&lt;/li>
&lt;li>阻止跨站POST请求携带Cookie（防御表单类CSRF）&lt;/li>
&lt;li>例外：通过top-level navigation的GET请求携带Cookie（保留用户登录态）&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>SameSite=Strict&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>完全禁止跨站请求携带Cookie&lt;/li>
&lt;li>典型场景：银行交易页面需要最高级别防护&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>防御纵深构建&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>HttpOnly：防止XSS攻击窃取Cookie（&lt;code>document.cookie&lt;/code>不可读）&lt;/li>
&lt;li>Secure：HTTPS加密传输防中间人窃听（非安全连接不发送）&lt;/li>
&lt;li>SameSite：最后一层防御CSRF的核心机制&lt;/li>
&lt;/ol>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ul>
&lt;li>误认为Lax模式能完全防御CSRF（需配合CSRF Token）&lt;/li>
&lt;li>忽略Secure属性在HTTP环境中的失效风险&lt;/li>
&lt;li>混淆XSS与CSRF的防御边界（HttpOnly专注XSS，SameSite专注CSRF）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>SameSite=Lax通过限制跨站POST请求携带Cookie，有效防御大多数CSRF攻击场景，同时保持GET请求的可用性。配合HttpOnly防止XSS窃取Cookie、Secure确保HTTPS传输，形成三道防御层。浏览器默认采用Lax是平衡安全性与兼容性的选择——严格模式会破坏第三方登录等合法场景，而Lax在阻止危险请求（如POST）的同时，允许安全导航（如链接跳转），既提升安全基线又保持业务正常流转。&lt;/p>
&lt;hr>
&lt;h2 id="解决方案">解决方案 &lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="编码示例">编码示例 &lt;a href="#%e7%bc%96%e7%a0%81%e7%a4%ba%e4%be%8b" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="88b4dff" class="language-javascript ">
 &lt;code>// Express设置安全Cookie示例
res.cookie(&amp;#39;sessionID&amp;#39;, &amp;#39;encryptedValue&amp;#39;, {
 httpOnly: true, // 禁止脚本读取
 secure: true, // 仅HTTPS传输
 sameSite: &amp;#39;Lax&amp;#39;, // 基础CSRF防护
 maxAge: 24*60*60*1000
});&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>复杂度优化&lt;/strong>：&lt;/p></description></item></channel></rss>