面试题之 XSS 攻击

本文涉及的产品
.cn 域名,1个 12个月
简介: XSS(cross site scripting)跨站脚本攻击,就是攻击者想尽一切办法将可以执行的代码注入到网页中。 为什么不叫 CSS 攻击? 因为在 XSS 出现的时候,CSS 在前端领域已经被广

XSS(cross site scripting)跨站脚本攻击,就是攻击者想尽一切办法将可以执行的代码注入到网页中。

为什么不叫 CSS 攻击?

因为在 XSS 出现的时候,CSS 在前端领域已经被广泛指定为层叠样式表(Cascading Style Sheets),所以将 Cross(意为“交叉”) 改以交叉形的 X 做为缩写,这就是我们熟知的 XSS(作为前端三大件之一的 CSS 肯定要比 cross site scripting 要出名一些)

格林公式,你(跨站脚本攻击)来之前我(层叠样式表)就已经叫 CSS 了!

XSS 攻击主要可以分为三类

  1. 存储型(持久型)(server端)
  2. 反射型(server 端)
  3. Dom 型(浏览器端)

存储型(持久型)(server端)

  1. 场景:常见于用户需要保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
  2. 攻击步骤:

    1. 攻击者将恶意代码提交到目标网站的数据库中
    2. 用户打开目标网站时,服务端将恶意代码从数据库中取出来,拼接在 HTML 中返回给浏览器
    3. 用户浏览器在收到响应后解析执行,混在其中的恶意代码也同时被执行
    4. 恶意代码窃取用户数据,并发送到指定攻击者的网站,或者冒充用户行为,调用目标网站的接口,执行恶意操作

反射型(Server端)

与存储型的区别在于,存储型的恶意代码存储在数据库中,反射型的恶意代码在 URL

  1. 场景:常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
  2. 攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码。
    2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

Dom 型(浏览器端)

DOM 型的 XSS 攻击,属于前端 JavaScript 自身的安全漏洞

  1. 场景:常见与前端需要通过 URL 的一些参数执行某些功能
  2. 攻击步骤:

    1. 攻击者构造出特殊的 URL,其中包含恶意代码。
    2. 用户打开带有恶意代码的 URL
    3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
    4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

预防方案:(防止攻击者提交恶意代码,防止浏览器执行恶意代码)

  1. 对数据进行严格的输出编码:如 HTML 元素的编码,JS 编码,CSS 编码,URL 编码等等避免拼接 HTML;像 vue 的技术栈需要避免使用 v-html 指令
  2. 输入验证:比如一些常见的数字、URL、电话号码、邮箱地址等等做校验判断
  3. 配置 CSP,本质是建立白名单,由浏览器进行拦截,通过在 HTTP Header,即 Content-Security-Policy 字段,在服务端或者网页的 <meta> 标签中设置

    1. 比如可以设置 Content-Security-Policy: default-src 'self'; 只允许同源下的资源,不包括子域名
    2. 或者设置 Content-Security-Policy: default-src 'self' *.xxx,允许内容来自信任的域名及其子域名,加上 self 指信任的原域名的子域名
    3. Content-Security-Policy: default-src https://test.com\
      该服务器仅允许通过 HTTPS 方式并仅从 test.com 域名来访问文档
  4. 设置响应头中的 set-cookie 字段为 httpOnly,禁止 JavaScript 读取某些敏感 Cookie,无法通过 document.cookie 获得 cookie 内容,攻击者完成 XSS 注入后也无法窃取此 Cookie,无法获得会话 IDsessionId。(注:有的网站会使用 Cookie 做为登录态认定,攻击者拿到后可以登录)

参考资料

  1. XSS攻击-总结 - 掘金 - Tz
相关文章
|
9天前
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
76 49
|
14天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
49 4
|
13天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
42 2
|
15天前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
50 3
|
9天前
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
17 0
|
2月前
|
存储 安全 JavaScript
XSS跨站脚本攻击详解(包括攻击方式和防御方式)
这篇文章详细解释了XSS跨站脚本攻击的概念、原理、特点、类型,并提供了攻击方式和防御方法。
303 1
|
1月前
|
存储 JavaScript 安全
|
1月前
|
存储 JavaScript 前端开发
Xss跨站脚本攻击(Cross Site Script)
Xss跨站脚本攻击(Cross Site Script)
|
3月前
|
存储 安全 JavaScript
解释 XSS 攻击及其预防措施
【8月更文挑战第31天】
239 0
|
3月前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?