CSRF(跨站请求伪造漏洞)

2023-12-05

原理

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的Web安全漏洞,攻击者利用用户已登录的身份,在用户不知情的情况下,向Web应用程序发起恶意请求,以实现攻击目的。

CSRF攻击的过程可以简单描述为以下几步:

  1. 攻击者 构造恶意请求 ,其中包含攻击目标的关键操作,例如转账、修改密码等。
  2. 攻击者将恶意请求嵌入到诱骗用户点击的链接、图片等元素中。
  3. 用户在登录状态下(即可以通过cookie验证) 访问包含恶意请求的页面时,浏览器会自动利用已有的cookie且未失效发送请求,攻击目标就会执行,从而达到攻击者的目的。
http://44532b34-1f56-4ee2-8da2-a99a3a75af83.node4.buuoj.cn:81/vul/c
srf/csrfget/csrf_get_edit.php?sex=2&phonenum=2&add=2&email=2&submit=submit 

如上是一个构造好的恶意请求,只要可以利用到用户的cookie进行验证成功,就可以进行用户的信息修改。但路径设置一定要是绝对路径,只要能验证成功就可以实现。

CSRF的GET和POST请求

GET

在HTML标签中很多标签都是自带“src”属性的,如<img>,<iframe>,<script>,这些标签里面都可以嵌入一个恶意链接,当无意点击时就会触发CSRF漏洞。

<img src="http://victimbank.com/transfer?to=attacker&amount=100000">

在上面示例中,当受害者浏览恶意网站并点击这个图片时,浏览器会向 victimbank.com 发送一个 GET 请求,请求转账 100,000 单位给攻击者

POST

其实用POST请求跨站点也非常简单,页面代码如下。

<!DOCTYPE html>
<html>
<head>
  <title>CSRF Demo</title>
</head>
<body>

  <h1>欢迎来到银行转账页面</h1>

  <form action="http://victimbank.com/transfer" method="post">
    <input type="hidden" name="to" value="attacker">
    <input type="hidden" name="amount" value="100000">
    <input type="submit" value="转账">
  </form>

</body>
</html>

在这个示例中,用户访问一个恶意网站(攻击者的站点),该站点通过 <form> 表单进行 POST 请求到受害者的银行转账页面。隐藏字段 to 指定目标账户为攻击者的账户, amount 指定转账金额为 100,000。

CSRF蠕虫

<form id="myForm" action="http://boke.com/111"method-"POST">
   <input name="content" value='<a href="http://csrf.com/csrf.html"">clickme</a>'>
</form>
<script>
document.getElementById(' myForm' ) .submit C);
</script>

如上的功能时发布一篇博客里面嵌套了恶意页面链接,当点击这个链接就会触发csrf漏洞发布一篇同样的博客,从而实现蠕虫传播

防御手法

1.验证码

在执行重要操作的时候服务端可以要求输入验证码进行二次验证,强制哦那个胡与服务进行交互,才能完成最终的请求

2.随机token

很多CSRF成功的原因是可构造出恶意的链接,那只要在URL上面加上一个随机的Token只有用户端和客服端知道,且发送请求的时候需要带上这个Token,那黑客因为不知道这个随机Token的值就无法构造出有效的恶意链接

3.Cookie的SameSIte属性

SameSite 是一种 Web 安全机制,旨在防止 CSRF 攻击。通过在 Cookie 中设置 SameSite 属性,可以控制浏览器什么情况下发送 Cookie,从而限制了 CSRF 攻击的可能性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSRF(跨站请求伪造漏洞) 的相关文章

  • 如何使用 Postman 向 Django REST Framework 进行身份验证

    我试图弄清楚如何使用 Postman 向 Django REST Framework 进行身份验证 我有一个邮递员拦截器 但无论我尝试什么 我似乎都会收到 403 CSRF 验证失败 请求被中止 在 Chrome 中 我转到 DRF 的默认
  • 你的服务器还安全吗?用户数据是否面临泄露风险?

    一系列严重的网络安全事件引起了广泛关注 多家知名公司的服务器遭到黑客挟持 用户的个人数据和敏感信息面临泄露的风险 这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性 提醒着企业和个人加强对网络安全的重视 一 入侵案例 1 1 蔚来数据泄露 1
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学
  • Django 403 CSRF验证失败

    我正在为我的学校编写一个注册网站 并使用 Django 作为框架 对于注册 我需要用户名 密码和注册令牌 这些尚未得到验证 我现在要做的就是从注册输入页面 使用 POST 请求 转到 您已成功注册 页面 在此过程中 csrf 令牌显然拒绝验
  • 检测到跨站请求伪造 (CSRF) 时应发回什么响应

    当检测到跨站请求伪造 CSRF 时 我应该发回什么响应 有一个我无法获取的扫描工具 它说我的一个页面没有受到保护CSRF 但它是 我发回的回复是正常的202带有句子 请求无法处理 就是这样 没有任何信息被发送回攻击者 并且我记录了这次尝试
  • 一个令牌与多个令牌防止 CSRF 攻击

    我正在使用 Codeigniter 我想防止可能发生的 CSRF 攻击尝试 为了实现这一目标 我向我想要保护的每个表单添加一个带有随机令牌的隐藏输入标记 同时我将此令牌保留在会话中 以便在开始处理此表单数据时进行比较 set a token
  • Django 1.2.4 CSRF验证失败

    当我执行 POST 表单时 Django 1 2 始终给我这个 CSRF 验证错误 我 认为 我已经完成了 Django 1 2 文档中要求的所有事情 即 确保 MIDDLEWARE CLASSES 包含在 django middlewar
  • 双重提交 Cookie 和多个选项卡?

    The 双重提交cookie https www owasp org index php Cross Site Request Forgery 28CSRF 29 Prevention Cheat Sheet Double Submit C
  • Django:禁止(未设置 CSRF cookie。)

    我遇到了 CSRF cookie 未设置 的问题 我所需要的只是外部计费平台将更新发送到 django 服务器 在本地它可以与 Postman 一起使用 但在演示服务器中它不起作用 Code views py from django vie
  • Laravel 5.1 iframe 中的 CSRF,如何使其工作?

    我的应用程序有一个插件 用户可以在包含表单的网站中实现该插件 问题是我得到TokenMismatchException提交表格时 从我所做的所有研究中 我可以看到 Laravel 对跨域的保护 我知道我可以禁用它 但我不知道之后如何保护表单
  • 如何在Reactjs中生成CSRF令牌并发送到Play框架?

    我试图从反应表单发送发布请求到播放框架 它抛出以下错误 Caused by java lang RuntimeException No CSRF token was generated for this request Is the CSR
  • 唯一的表单令牌禁用用户的多任务处理

    如果我想保护我的网站和用户免受跨站伪造 CSRF 攻击 我可以生成一个唯一的令牌 token md5 time rand on 每一页有一个形式 令牌在隐藏的输入字段中提交echo
  • 将 csrf 令牌存储在元标记中是一个好习惯吗?

    如果我在不使用表单的情况下发出 POST 请求 并且想要防止 CSRF 攻击 我可以做的就是在元标记中设置 csrf token 并在触发请求时将其放回标头 这是一个好的做法吗 通过 header 将令牌放回 例如使用 JQuery aja
  • RESTful 应用程序中的 XSRF

    我是一名 ASP NET 开发人员 正在尝试学习 Rails 和 RESTful 方法 为了理解这一点 我计划编写一个电子邮件客户端 它会对服务器进行 RESTful GET 调用以获取电子邮件 并通过 POST 调用来发送电子邮件 要遵循
  • 为 Blazor UI 应用程序实施防伪验证

    我们的应用程序是使用 Blazor Server 和与 Azure API 通信的 razor 页面构建的 我想知道对于 Blazor UI 我们是否应该实现防伪造 CSRF XSRF 如果可以 我可以获得一些如何实现的信息吗 我观察到为
  • Cakephp - CSRF 令牌不匹配

    我在 Cakephp 3 6 中有一个项目 其中 MessageController 中的 3 个操作由 Ajax 调用 但是 我有一个问题 当我向其中一个操作发送请求时 XHR 会向我返回以下内容 message CSRF token m
  • 是否可以在 PHP 中使用 file_get_contents 来破坏 CSRF 令牌验证

    在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法 但是 我不明白这种令牌方式如何保护file get contentsPHP 可以获取跨域文件表单的内容 gt 它可以获取表单上的令牌并使用它 那么这种token方式是如何运作
  • 使用 enctype="multipart/form-data" 时出现 CSRF 错误

    每当我将 enctype multipart form data 添加到我的 html 表单中时 我得到ForbiddenError invalid csrf token 如果我删除 enctype 它就可以工作 我发送的 csrf 代码如

随机推荐