细读 JS | XSS、CSRF 浅谈

简介: 细读 JS | XSS、CSRF 浅谈

正文


一、前提


  • Cookie 常用于会话状态管理、个性化设置等。
  • 在浏览器可以通过 document.cookie 来访问 Cookie
  • document.cookie 只能获取当前作用域下的 Cookie,这个作用域受 DomainPath 共同影响。


二、CSRF 攻击


它与 Cookie 相关


1. 什么是 CSRF?


CSRF 是 Cross-Site Request Forgery 的简称,译为“跨站请求伪造”。

我们知道,假设有两个网站 A 和 B:

  • 只要在 B 网站发起了 A 网站的 HTTP(S) 请求,这个就算是跨站请求(至于算不算攻击就另说)。
  • 当你访问并登录网站 A,服务器返回了一些 Set-Cookie 字段。若前往 B 网站,并在 B 网站发起了 A 网站的请求,这时候在 HTTP 请求头是会自动带上 A 网站的 Cookie 的(这里假定没有 Cookie 的 SameSite 限制)。

关于第二点,可能会有人疑惑。

先明确一下,通过 JS 脚本(document.cookie)只能获取本站下的 Cookie,换句话说,在 B 网站里只能获取 B 网站的 Cookie,是永远没有办法获取到网站 A 的 Cookie 的。这是脚本的行为。

其次,在发起 HTTP  请求时,会有一种自动携带 Cookie 的行为。它会自动带上所请求 URL 对应站点的相关 Cookie。

CSRF 攻击只是利用了 HTTP 请求自动携带 Cookie 的特性进行攻击,攻击者还是无法获取到被攻击网站的 Cookie 的。这与 XSS 不同,它是直接拿到被攻击网站的 Cookie,然后进行攻击。


2. 如何应当 CSRF?


方案一:放弃 Cookie,使用 Token


既然 CSRF 是利用了 HTTP 请求自动携带 Cookie 的特性,伪造请求以达到欺骗服务器的目的。那么只要我们不使用 Cookie 的方式来验证用户身份,转用 Token 策略,就能完全避免 CSRF 攻击。


方案二:SameSite


这是 Chrome 51 引入的新特性,它有三个值:NoneLaxStrict。自 Chrome 80 起,Cookie 的 SameSite  默认值为 Lax(在不设置 SameSite 时,其默认值取决于浏览器的默认值)。亦可主动设置为 None,但与此同时,Cookie 必须设置为 Secure

这个特性可以解决 CSRF 攻击的问题,表示当前页面与请求的 URL 是相同的,才会携带上这个 Cookie。

还是前面的例子,攻击者 B 网站与被攻击者 A 网站是不同域的,当在 B 网站内发起 A 网站的请求时,对应 Cookie 就不会携带上。

但 SameSite 较新,在兼容性上可能不太好。


方案三:服务端 Referer 验证


在发起 HTTP 请求时,在请求头中会有 Referer 字段,它表示当前域的域名。服务端可以通过这个字段来判断请求是否来自“真正”的用户请求。

但是 Referer 是可以伪造的,因此并不可靠。

虽然 Referer 并不可靠,但用来防止图片盗链还是足够的,毕竟不是每个人都会修改客户端的配置。(一般只允许站内访问)

需要注意的是,Referer 的正确英语拼法是 referrer。由于早期 HTTP 规范的拼写错误,为保持向下兼容就将错就错了。例如 DOM Level 2Referrer Policy 等其他网络技术的规范曾试图修正此问题,使用正确拼法,导致目前拼法并不统一。


三、XSS 攻击


XSS,是 Cross-Site Scripting 的简称,译为“跨站脚本攻击”。命名应该是为了与 CSS 进行区分。


1. 什么是 XSS?


XSS 是由于不安全的数据引起的,可能是提交表单数据,有可能是页面路径的参数问题。

与 CSRF 不同的是,CSRF 是利用了 HTTP 自动携带 Cookie 的特性来达到攻击的目的,攻击者无法通过 JS 脚本获取到被攻击者的 Cookie 等信息的。而 XSS 则是利用一些不安全的数据,例如是一个 <script> 标签,然后获取到用户的一些信息,对其发起攻击。


未完待续...


References


目录
相关文章
|
存储 安全 JavaScript
xss、csrf
【10月更文挑战第26天】防范 XSS 和 CSRF 攻击需要综合运用多种技术手段,从输入输出过滤、设置安全的 Cookie 属性、验证请求来源、添加令牌等多个方面入手,构建一个全面的安全防护体系,以确保网站和用户的安全。
|
SQL 安全 前端开发
让你彻底了解SQL注入、XSS和CSRF
了解SQL注入、XSS和CSRF
331 7
|
存储 JSON 安全
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
693 4
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
504 2
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
564 3
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
352 5
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
325 5
|
存储 前端开发 JavaScript
浅谈Web前端安全策略xss和csrf,及又该如何预防?
该文章详细讨论了Web前端安全中的XSS(跨站脚本攻击)和CSRF(跨站请求伪造)攻击原理及其防范措施,帮助读者了解如何保护Web应用程序免受这两种常见安全威胁的影响。
浅谈Web前端安全策略xss和csrf,及又该如何预防?
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
717 0