首页 > 其他分享 >CSRF 攻击

CSRF 攻击

时间:2024-10-05 23:43:57浏览次数:8  
标签:攻击 视图 表单 API cookie CSRF DRF

CSRF (Cross-Site Request Forgery) 保护机制。CSRF 攻击是指攻击者通过伪装成用户向应用发送恶意请求,而这些请求是用户在不知情的情况下发起的。例如,如果用户在一个银行网站上登录,然后访问了一个恶意网站,该恶意网站可能包含一个自动提交的表单,这个表单会向银行网站发送请求来转账,因为用户的浏览器会自动附加上之前从银行网站获取的认证信息(如 cookie),所以这个请求会被视为合法的。

为了防止 CSRF 攻击,Django 提供了 CsrfViewMiddleware 中间件,该中间件默认是启用的。它是如何工作的呢?

  1. 生成 CSRF Token:当用户访问需要 CSRF 保护的页面时(通常是 POST 表单所在的页面),Django 会在响应中设置一个名为 csrftoken 的 cookie,并且在 HTML 表单中插入一个隐藏字段 <input type="hidden" name="csrfmiddlewaretoken" value="...">,其值与 cookie 中的值相同。

  2. 验证 CSRF Token:当用户提交表单时,Django 会检查请求中的 csrfmiddlewaretoken 字段的值是否与 csrftoken cookie 中的值匹配。只有当两者匹配时,请求才会被认为是有效的,否则将返回一个 HTTP 403 错误。

在 Django 应用中使用 CSRF 保护非常简单:

  • 表单中添加 CSRF 令牌:如果你正在创建一个 HTML 表单,确保使用 {% csrf_token %} 模板标签来自动插入 CSRF 令牌。

    html 深色版本
    <form method="post">
        {% csrf_token %}
        <!-- 其他表单字段 -->
    </form>

 

Django REST Framework (DRF) 主要用于构建 Web API,与传统的 Django 视图相比,API 更多的是面向机器而非直接面向用户的交互。因此,在 DRF 中,默认情况下 CSRF 验证是被禁用的,这是因为:

  1. API 设计原则:RESTful API 通常设计为无状态的,这意味着服务器不应该存储任何关于客户端的状态信息。CSRF 保护依赖于 session 或 cookie 来追踪用户状态,这与 REST 的无状态性相冲突。

  2. 认证机制:DRF 常常使用 token 认证、OAuth2 等更安全的认证机制,这些机制本身就能有效防止未授权的请求。例如,一个 API 客户端在每次请求时都需要提供一个有效的认证 token,这种 token 通常比基于 cookie 的认证更难以被窃取或滥用。

  3. 使用场景:DRF 构建的 API 通常不是直接由浏览器访问的,而是由移动应用、桌面应用或其他后端服务调用。这些客户端通常不会共享浏览器的 cookie,因此它们不受 CSRF 攻击的影响。

  4. 灵活性:在某些情况下,你可能确实希望为特定的 API 视图启用 CSRF 保护。DRF 提供了足够的灵活性来实现这一点。你可以通过在视图或视图集中使用 @csrf_protect 装饰器或 SessionAuthentication 类来启用 CSRF 保护。

虽然 DRF 默认不启用 CSRF 保护,但这并不意味着在所有情况下都不需要考虑 CSRF 防护。如果你的应用涉及到通过浏览器直接访问的 API 端点(例如,单页应用或传统的 Web 应用),那么你可能需要重新考虑 CSRF 保护。在这种情况下,可以考虑以下方法来增强安全性:

  • 启用 SessionAuthentication:在 DRF 的视图或视图集中使用 SessionAuthentication,这样可以启用 CSRF 保护。
  • 自定义认证:根据你的需求自定义认证类,结合使用 token 和 CSRF 保护。
  • 教育用户:提醒用户不要在公共计算机上登录敏感应用,并定期更改密码。

总之,DRF 不强制要求 CSRF 保护,但开发者应根据具体的应用场景和安全需求来决定是否以及如何实施 CSRF 保护。

标签:攻击,视图,表单,API,cookie,CSRF,DRF
From: https://www.cnblogs.com/clark1990/p/18448739

相关文章

  • 口令攻击
    针对口令强度攻击字典攻击把使用概率高的口令用不同的变异规则组成猜测字典。强力攻击用足够快的计算机尝试所有可能的口令。组合攻击在字典单词末尾串接任意字母和数字,介于字典攻击和强力攻击之间。撞库攻击收集已泄露的用户名和密码,登录其他网站(利用很多人只有一套用户......
  • 流量劫持常见的攻击场景
    流量劫持常见的攻击场景流量劫持是一种网络攻击手段,攻击者通过操控数据包的传输过程来窃取、篡改或伪造通信内容。这种攻击可以在多个层面上发生,通常会导致用户敏感信息的泄露、数据的篡改以及其他更严重的后果。以下是一些常见的流量劫持攻击场景:1.DNS劫持DNS劫持的攻击目标......
  • XSS攻击类型以及如何防范
    最常见的XSS攻击,是在个人用户名中加入一串js代码,这样当页面加载这个用户名的时候,就会执行这串恶意脚本(存储型XSS)比如 <script>  fetch('http://abc.com/steal?cookie='+document.cookie);//当然现在最好存储在only </script>下面介绍XSS的常见攻击方式类型......
  • [计算机网络]TCP攻击
    概述SYNFlood攻击TCPSYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCPSYN,SYN是TCP三次握手中的前两个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发......
  • pbootcms网站容易被攻击吗?
    PBootCMS网站和其他任何网站一样,都有可能遭受攻击。虽然PBootCMS作为一个成熟的CMS系统提供了许多便利的功能,但它的安全性也取决于多种因素,包括但不限于:插件和主题的安全性:使用不安全的插件或主题会使网站暴露于风险之中。建议仅从官方渠道或可信来源下载插件和主题,并定......
  • XSS攻击和CSRF攻击
    一、XSSXSS,即跨站脚本攻击。是值攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。比如在论坛上或者输入框内输入"<alert>document.cookie</alert>"就可以拿到用户的cookie了......
  • csrf问题
    用ajax如下/***根据cookie的name获取对应的值*@paramname*@returns{null}*/functiongetCookie(name){letcookieValue=null;if(document.cookie&&document.cookie!==''){constcookies=document.cookie.split(';�......
  • 深度学习后门攻击分析与实现(二)
    前言在本系列的第一部分中,我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式,现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。深度学习与网络空间安全的交叉深度学习作为人工智......
  • 通过理解 Windows rollback attack 的基础架构,用户和管理员可以更有效地保护系统免受
    “Windowsrollbackattack”是一种针对Windows操作系统的攻击手法,具体涉及利用系统恢复或回滚功能来执行恶意行为。以下是关于这种攻击的简要说明:什么是WindowsRollbackAttack定义:这种攻击利用Windows系统的恢复功能(例如,系统还原点或回滚机制)来恢复到之前的状态,从而可......
  • Nginx 如何防止 DDoS 攻击
     Nginx如何防止DDoS攻击原创广智架构经纬 2024年09月21日12:00上海听全文【每天5分钟,了解一个知识点】 DDoS(分布式拒绝服务攻击)是一个让很多网站和服务头疼的问题。DDoS攻击就像是一群不怀好意的人一起堵塞了你的店门,让正常的顾客无法进入。那我们该如何利用Ngi......