python Djanjo csrf说明与配置[通俗易懂]

python Djanjo csrf说明与配置[通俗易懂]Django csrf CSRF 全称(Cross Site Request Forgery)跨站请求伪造。也被称为One Click Attack和Session Riding,通常缩写为CSRF或

 Django csrf 

CSRF 全称(Cross Site Request Forgery)跨站请求伪造。也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF。你可以这样理解:攻击者(黑客,钓鱼网站)盗用了你的身份,以你的 名义发送恶意请求,这些请求包括发送邮件、发送信息、盗用账号、购买商品、银行转账,从而使你的个人隐私泄露和财产损失。

CSRF原理

1、用户登录并信任网站A
2、验证通过,在用户处产生A的Cookie
3、用户在没有登出网站A的情况下,访问危险网站B
4、网站B要求访问第三站点网站A,发出一个request
5、根据网站B的请求,浏览器带着网站A产生的Cookie访问网站A
6、网站A不知道请求是用户发出的还是网站B发出的,由于浏览器会自动带上用户Cookie,所以网站A会根据用户的权限处理请求,这样网站B就达到了模拟用户操作的目的

从上面步骤中可以看出,要完成一次CSRF攻击,受害者必须依次完成以下两个步骤:

登录受信任网站A,并在本地生成Cookie
在不登出A的情况下,访问危险网站B
看到这里,你也许会问:如果我不满足以上两个条件中的一个,我就不会受到CSRF攻击。是的,确实如此,但是你不能保证以下情况不会发生

你不能保证你登录了一个网站之后,不再打开一个tab页面并访问其他的网站
你不能保证你关闭浏览器之后,你本地的Cookie会立刻过期,你上次的会话已经结束
上述中所谓的攻击网站,可能就是一个钓鱼网站

CSRF攻击实例
听了这么多,可能大家还云里雾里,光听概念可能大家对于CSRF还是不够了解,下面我将举一个例子来让大家对CSRF有一个更深层次的理解。

我们先假设支付宝存在CSRF漏洞,我的支付宝账号是wl,攻击者的支付宝账户是xxx,然后我们通过网页请求的方式 http://zhifubao.com/withdraw?account=lyq&amount=10000&for=wl 可以把账号的wl的10000元转到我的另外一个 账户wl上面去。通常这个情况下,该请求发送到支付宝服务器后,服务器会先验证请求是否来自一个合法的session,并且该session的用户已经成功登录。攻击者在支付宝也有账户xxx,他直到上文中的URL可以进行转账操作,于是他自己可以发送一个请求 http://zhifubao.com/withdraw?account=lyq&amount=10000&for=xxx 到支付宝后台。但是这个请求是来自攻击者而不是我wl,所以不能通过安全认证,因此该请求作废。这时,攻击者xxx想到了用CSRF的方式,他自己做了个网站,在网站中放了如下代码:http://zhifubao.com/withdraw?account=lyq&amount=10000&for=xxx ,并且通过网站链接诱使我来访问他的网站。当我禁不住诱惑时就会点了进去,上述请求就会从我自己的浏览器发送到支付宝,而且这个请求会附带我的浏览器中的cookie。大多数情况下,该请求会失败,因为支付宝要求我的认证信息,但是我如果刚访问支付宝不久,还没有关闭支付宝页面,我的浏览器中的cookie存有我的认证信息,这个请求就会得到响应,从我的账户中转10000元到xxx账户里,而我丝毫不知情。

进入settings.py找到  MIDDLEWARE  这个列表找到    “django.middleware.csrf.CsrfViewMiddleware”,  这个字段

python Djanjo csrf说明与配置[通俗易懂]

这一行设置csrf的如果把它注释掉csrf将失效

 

python Djanjo csrf说明与配置[通俗易懂]

现在我在django写了一个HTML表单当我点击提交的时候会变为提交方式会变为POST然后就会发现报了一个  403 的csrf错误

这是因为django的防护功能    因没有提供Referer值而被误认为CSRF攻击,拒绝访问 怎么解决这个问题呢?

 

python Djanjo csrf说明与配置[通俗易懂]

 

可以在form表单下面加上    {%csrf_token%}     当你检查的时候就会发现多了一个input数据 这是  {%csrf_token%}  自动转化的数据提供浏览器进行确认

如果成功就可以正常访问错误则拒绝访问

python Djanjo csrf说明与配置[通俗易懂]

然后你就会发现跳转页面的时候访问成功了

 

python Djanjo csrf说明与配置[通俗易懂]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10931.html

(0)
上一篇 2022-12-19
下一篇 2022-12-19

相关推荐

  • Python执行py文件

    Python执行py文件Python是一种高级编程语言,广泛用于各种计算机应用。其中一个非常基础和重要的应用,就是执行.py文件(即Python脚本文件)。本文将从多个方面对Python执行.py文件做详细的阐述,包括Python的安装、Python解释器、Python代码的调试、Py文件的执行和实例演示。

    2024-04-29
    17
  • Python字典:简单存储和访问数据的方法

    Python字典:简单存储和访问数据的方法在Python编程过程中,我们经常需要存储和访问一些数据。Python提供了很多种数据类型来满足不同的需求,其中最常用的一种数据类型就是字典。

    2024-03-10
    34
  • 修改数据库默认位置

    修改数据库默认位置手动方法: 使用SQL语句: USE [master] GO DECLARE @Reg_Key NVARCHAR(40) = N'HKEY_LOCAL_MACHINE' DECLARE

    2023-01-30
    125
  • 关于python的一些知识点的简单介绍「建议收藏」

    关于python的一些知识点的简单介绍「建议收藏」跟几个IT界的大佬提起Python,他们说零基础学好Python很简单,Python进阶需要花费些气力,都说Python简单易学

    2023-08-24
    69
  • ebsco数据库怎么用_数据库回表

    ebsco数据库怎么用_数据库回表​摘要:账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。 本文分享自华为云社区《openGauss账本数据库,你不知道的那些事儿》,作者:Gauss松鼠会。 账本数据

    2023-06-15
    97
  • 以Python输入为中心的原始标题

    以Python输入为中心的原始标题Python作为一门高级编程语言,在很多方面都具有很多优势,其中包括Python输入。Python输入就是指在程序运行时,程序能够从用户输入中获取所需要的数据。Python输入可以通过多种方式实现,其中包括直接通过input函数获取用户输入和读取文本文件中存储的数据等。

    2024-04-21
    19
  • Python Split()函数:字符串分割的利器

    Python Split()函数:字符串分割的利器在Python中,Split()函数是一种用于解析字符串的函数,它可以将字符串按照指定的分隔符进行拆分,并将拆分结果以列表的形式返回。该函数可以根据用户需要进行自定义的分割操作。

    2024-02-28
    37
  • MySQL性能优化:MySQL中的隐式转换造成的索引失效「建议收藏」

    MySQL性能优化:MySQL中的隐式转换造成的索引失效「建议收藏」数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性。在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很

    2022-12-29
    88

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注