在前端开发中,防范跨站脚本攻击(XSS)和跨站请求伪造(CSRF)是构建安全Web应用的关键环节。内容安全策略(CSP)则在其中扮演了重要的角色,尤其在XSS防御方面。
一、 跨站脚本攻击(XSS)及其防范
1. 什么是XSS攻击?
XSS(Cross-Site Scripting)是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使这些脚本在用户的浏览器上运行。利用这些恶意脚本,攻击者可以获取用户的敏感信息(如Cookie、SessionID等),甚至冒充用户执行操作,进而危害数据安全。 12
XSS攻击主要分为三类:
- 存储型XSS(持久型XSS) :恶意代码被存储在服务器端(如数据库),当用户访问包含恶意代码的页面时,恶意脚本会被从服务器取出并执行。 13
- 反射型XSS(非持久型XSS) :恶意代码存在于URL参数中,当用户点击包含恶意代码的URL时,服务器将恶意代码"反射"回浏览器,浏览器执行该脚本。 13
- DOM型XSS :恶意代码的执行由浏览器端完成,属于前端JavaScript自身的安全漏洞,通常是由于前端脚本处理用户输入不当导致的。 1
2. 前端如何防范XSS攻击?
前端防范XSS攻击的核心思想是对用户输入的数据进行严格处理,并限制浏览器执行不可信的代码。
-
输入/输出检查与编码转义:
-
设置HttpOnly Cookie :将敏感的Cookie设置为
HttpOnly属性。这可以禁止JavaScript脚本读取带有此属性的Cookie,即使发生XSS攻击,攻击者也无法通过JavaScript窃取用户的Cookie数据,从而降低攻击影响。 14 -
使用安全的API和框架:
-
避免内联脚本和样式 :尽可能使用外部样式表和脚本文件。如果必须使用内联,确保它们经过适当的编码或过滤。 8
二、 跨站请求伪造(CSRF)及其防范
1. 什么是CSRF攻击?
CSRF(Cross-Site Request Forgery)即跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。 49
CSRF攻击的原理是:攻击者诱导受害者访问一个恶意网站,该恶意网站利用受害者在被攻击网站已登录的凭证(通常是Cookie),向被攻击网站发送伪造的请求。由于浏览器会自动携带目标网站的Cookie,服务器会误以为是用户自己的合法请求,从而执行攻击者指定的操作(如转账、修改密码等)。 410
CSRF与XSS的区别:
- 本质不同 :XSS是代码注入问题,CSRF是HTTP请求问题。 410
- 利用方式 :XSS利用的是用户对指定网站的信任,通过注入恶意代码在用户浏览器执行。CSRF利用的是网站对用户网页浏览器的信任,通过伪造请求冒充用户操作。 410
- 攻击目标 :XSS旨在窃取用户信息、会话劫持或篡改页面内容。CSRF旨在冒充用户执行非预期操作,但不直接窃取数据。 410
2. 前端如何防范CSRF攻击?
防范CSRF攻击主要通过在请求中加入攻击者无法伪造的信息,或者限制跨站请求的发送。
-
CSRF Token:
-
SameSite Cookie属性:
-
Referer/Origin Header校验:
-
双重提交Cookie(Double-Submit Cookie) :
-
敏感操作使用POST请求 :避免使用GET请求进行状态修改操作,因为GET请求更容易被伪造(如通过图片
<img>标签、<a>链接等)。 1115 -
验证码或二次认证 :对于涉及资金或敏感信息的关键操作,要求用户输入验证码或进行二次身份验证(如短信验证码、指纹等)。 49
三、 内容安全策略(CSP)
1. 什么是CSP?
CSP(Content Security Policy)是一种额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本(XSS)和数据注入攻击等。 14
2. CSP如何工作?
CSP通过HTTP响应头(Content-Security-Policy)或HTML页面的<meta>标签进行配置。 416 它定义了一系列指令,用于指定浏览器可以为当前页面加载哪些类型的资源(如脚本、样式、图片、字体等)以及这些资源的来源。 417 浏览器会根据CSP规则,只加载和执行来自白名单源的资源,并阻止所有不在白名单中的资源。 417
3. 严格CSP(Strict CSP) :
为了更有效地防范XSS,现代CSP推荐使用"严格CSP",它通常基于Nonce(一次性随机数)或Hash(哈希值)。 17
- Nonce-based CSP :为每个请求生成一个唯一的随机数(Nonce),并将其包含在CSP头和合法的
<script>标签中。只有带有匹配Nonce的脚本才会被执行。 17 - Hash-based CSP :将内联脚本的哈希值添加到CSP策略中。只有哈希值匹配的脚本才会被执行。 17
严格CSP能有效阻止攻击者注入和执行恶意脚本,因为它要求脚本要么具有正确的Nonce,要么其哈希值在策略中被明确允许。 17
四、 XSS、CSRF与CSP的关系
-
CSP与XSS :
CSP是专门为防御XSS攻击而生的"神器"。 18 它通过建立资源加载的白名单机制,并限制内联脚本的执行,大大降低了XSS攻击的成功率和影响范围。 14 CSP是一种纵深防御技术,它不能替代对用户输入的严格清理,但作为额外的安全层,可以有效防止恶意脚本的执行。 17
-
CSP与CSRF :
CSP本身不直接防范 CSRF攻击。 1319 CSRF关注的是请求的伪造,而CSP关注的是页面内容的加载和脚本的执行。然而,CSP可以通过间接方式对CSRF防御起到辅助作用:
-
XSS与CSRF的联系与区别 :
虽然XSS和CSRF都是常见的Web安全漏洞,且都属于客户端攻击,但它们在攻击原理、目标和防范策略上存在显著差异。XSS是代码注入,利用浏览器执行恶意代码;CSRF是请求伪造,利用浏览器自动携带Cookie的特性。 410 CSP主要用于防御XSS,而CSRF则需要依赖Token、SameSite Cookie等机制进行防范。
好文:
- 前端安全系列(一):如何防止XSS攻击? - 美团技术团队
- 前端安全-如何防止XSS攻击- sjpqy - 博客园
- 前端安全:如何防止XSS 攻击和保护用户隐私
- 前端安全-XSS和CSRF - JackySummer
- 浅谈网络安全--xss、csrf、csp - 王玉略的网络日志
- 前端如何防止XSS攻击? - 王铁柱6 - 博客园
- 前端安全:XSS攻击与防御策略-云社区 - 华为云
- 前端安全:XSS攻击与防御策略 - 稀土掘金
- 前端安全系列(二):如何防止CSRF攻击? - 美团技术团队
- 【前端安全】--CSRF攻防- Leise - 博客园
- 前端安全:CSRF攻击与防御 - 稀土掘金
- 前端安全系列:如何防止CSRF攻击?【下】 - XiaoYouShan
- Same-site cookie,CSRF 的救星? | Beyond XSS
- 前端安全系列-csrf攻击 - 稀土掘金
- CSRF是什么?有效的防御措施有哪些? - 前端_风雨开发路
- 内容安全策略(CSP) - HTTP - MDN Web Docs
- 使用严格的内容安全政策(CSP) 缓解跨站脚本攻击(XSS) | Articles | web.dev
- 防XSS的利器,什么是内容安全策略(CSP)? - 腾讯云
- 防范攻击的常见策略:CSP和Referer Policy - 小高同学1997 - 博客园