跨站脚本(XSS)和跨站请求伪造(CSRF),它们将恶意脚本注入目标系统,以进一步利用技术栈或窃取用户数据。
什么是 XSS 和 CSRF?
CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和受害用户之间的信任关系。XSS和跨站脚本攻击允许攻击者破坏合法用户与任何易受攻击的应用程序的交互。
什么是 XSS?
XSS漏洞发生在web应用程序中,这些应用程序在不进行编码或验证的情况下接受用户输入并在响应中使用它。恶意用户编写恶意代码并通过输入表单提交。目标服务器包含这个脚本及其响应,客户机浏览器执行它。由于浏览器信任web服务器,它授予恶意脚本访问本地存储的cookie、会话令牌和其他敏感客户端信息的权限。
XSS是一个常见的攻击矢量,成功攻击的影响通常因不同的场景而不同,包括:
①泄露用户文件
②安装恶意软件/木马
③窃取网上银行信息
④HTML/DOM 内容修改
⑤将用户重定向到未知网站
XSS 攻击类型
XSS 攻击主要分为三类:存储型 XSS 攻击/持久型 XSS/Type-I XSS
在存储式跨站攻击中,注入的恶意代码被永久地存储在易受攻击的web应用程序的不同组件中,如数据库、评论字段、访客日志、消息论坛等。每当客户端访问受感染网站或向web服务器发起请求时,该请求就会在用户的浏览器中执行恶意脚本。
1.无目的 XSS
一种混合形式的XSS攻击,其中攻击者的脚本被存储并反映来自后端应用程序的用户。
2.反射/非持久性 XSS
在反射式跨站点脚本中,恶意脚本会从 Web 服务器反射出来,例如搜索结果、错误消息或任何其他包含某些用户输入的 Web 服务器响应。该脚本通过外部路径传递给受害者,例如不同的网站或电子邮件。当受害者提交表单、浏览黑客网站或点击可疑链接时,恶意脚本会被发送到该网站,然后反映在客户端的浏览器中。
3.基于 DOM 的 XSS
在基于 DOM 的跨站脚本中,恶意脚本是通过修改受害者浏览器的文档对象模型环境而执行的。这种攻击不会改变 Web 服务器的 HTTP 响应,但会由于 DOM 修改而改变客户端代码的执行。
什么是 CSRF?
跨站点请求伪造 (CSRF) 也称一键式攻击,是一种 Web 应用程序网络攻击,可诱使受害者在不知不觉中代表攻击者执行操作。CSRF 攻击利用 Web 应用程序中的一个安全漏洞,该漏洞无法区分经过身份验证的用户会话中的错误请求和合法请求。
攻击者通常使用社会工程技术发起 CSRF 攻击,以诱骗受害者用户加载页面或单击包含恶意请求的链接。该链接从经过身份验证的用户的浏览器向目标网站发送恶意请求。对于大多数网站,浏览器请求本质上包括会话信息,例如会话 cookie、有效令牌或网站与用户关联的登录凭据。如果经过身份验证的用户已经与目标网站处于活动会话中,则站点会将新的恶意请求视为来自用户的有效请求并执行它。
CSRF 攻击类型
如果 Web 应用程序无法区分非法请求和有效请求,那么它很容易受到跨站点请求伪造的攻击。有当认证用户与web应用程序处于活动会话时,攻击才会成功。
1.登录 CSRF 攻击
使用一种称为Login CSRF攻击的特殊形式的CSRF攻击,攻击者可以访问受害者用户的机密和敏感数据。这种攻击迫使不知情的用户登录到黑客控制的帐户。然后,受害者被骗向账户中添加个人身份识别和敏感信息,如电子邮件地址和信用卡信息。
2.存储 CSRF 攻击
CSRF攻击包也可以存储在易受攻击的网站上。对手可以通过执行高级XSS攻击或在接受HTML的字段中存储IFRAME或IMG标记来实现存储CSRF攻击。在站点上存储攻击会放大攻击的严重性和可能性,因为受害者用户现在肯定会查看CSRF加载的页面,并且也会自然地对该页面进行身份验证。
CSRF 与 XSS 的区别
CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和不知情的用户之间的信任关系。但是,XSS 和 CSRF 攻击之间存在一些根本差异,包括:
一、XSS攻击遵循双向攻击模式,允许攻击者执行恶意脚本、访问响应,并将后续敏感数据发送到攻击者选择的目的地。另一方面,CSRF是一种单向攻击机制,这意味着攻击者只能发起HTTP请求,但不能检索已发起请求的响应。
二、CSRF攻击要求经过身份验证的用户处于活动会话中,而XSS攻击则不需要。在XSS攻击中,只要用户登录,就可以存储和交付有效载荷。
三、CSRF攻击的范围有限,仅限于用户可以执行的操作,例如点击恶意链接或访问黑客的网站。相反,XSS攻击提供执行恶意脚本来执行攻击者所选择的任何活动,从而扩大了攻击的范围。
四、在XSS攻击中,恶意代码存储在站点中,而在CSRF攻击中,恶意代码存储在受害用户访问的第三方站点中。
XSS 和 Javascript 注入有什么区别?
XSS 是一种客户端攻击,黑客将恶意脚本部署到 Web 服务器中,由毫无戒心的用户浏览器执行。
另一方面,Javascript 注入是一种服务器端攻击,黑客将恶意脚本发送到服务器,由解释器执行,就好像它是源代码的一部分一样。
有哪些有效的 CSRF 预防机制?
防止 CSRF 攻击的一些方法包括:
①使用同步器令牌模式
②使用双重提交 cookie
③使用 HTTP 标准标头来验证请求的来源
④使用 SameSite Cookie 进行请求来源管理
⑤CSRF 令牌的使用
一些常用的有效 XSS 预防技术包括:
①执行内容安全策略
②验证和过滤用户输入
③编码输出数据
④使用自定义响应标头(Content-Type 和 X-Content-Type-Options)来管理浏览器响应解释
⑤清理 HTML 输入
随着安全左移,在开发期间可以通过代码审计可以第一时间发现可以造成严重安全事故的缺陷及安全隐患,通过提高软件安全性防范未知安全风险。
代码审计可以帮助企业从安全角度对应用系统的所有逻辑路径进行测试,通过分析源代码,充分挖掘代码中存在的安全缺陷以及规范性缺陷。找到普通安全测试所无法发现的如二次注入、反序列化、xml实体注入等安全漏洞。主要的服务内容在于:
1.系统所用开源框架,包含java反序列化漏洞,导致远程代码执行。Spring、Struts2的相关安全。
2.应用代码关注要素,日志伪造漏洞,密码明文存储,资源管理,调试程序残留,二次注入,反序列化。
3.API滥用,不安全的数据库调用、随机数创建、内存管理调用、字符串操作,危险的系统方法调用。
4.源代码设计,不安全的域、方法、类修饰符未使用的外部引用、代码。
5.错误处理不当,程序异常处理、返回值用法、空指针、日志记录。
6.直接对象引用,直接引用数据库中的数据、文件系统、内存空间。
7.资源滥用,不安全的文件创建/修改/删除,竞争冲突,内存泄露。
8.业务逻辑错误,欺骗密码找回功能,规避交易限制,越权缺陷Cookies和session的问题。
9.规范性权限配置,数据库配置规范,Web服务的权限配置SQL语句编写规范。
总之,XSS和CSRF是Web应用中常见的安全威胁,我们必须采取有效的防护策略和技术手段来应对。在实际应用中,我们可以结合使用上述防护策略,并借助现代Web框架和库提供的安全特性来实现防护。大大提高Web应用的安全性,保护用户的隐私和数据安全。