csrf

Django Rest Framework, ajax POST works but PATCH throws CSRF Failed: CSRF token missing or incorrect

匿名 (未验证) 提交于 2019-12-03 00:46:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am porting my project to Django Rest Framework to make a proper REST Api for my project, I think it helps a lot designing the API and making it robust but I am running into a problem : I have a entry model and associated ListCreateAPIView and RetrieveUpdateDestroyAPIView views. I can successfully post a new entry instance in the list through an ajax request and providing the csrfmiddlewaretoken as I would do in regular Django View. POST entries/ Now I am trying to apply a patch to an existing instance using the same csrfmiddlewaretoken

反射型XSS+文件上传+CSRF―DVWA

匿名 (未验证) 提交于 2019-12-03 00:40:02
在学习的过程中,想到将几种漏洞进行组合练习,记录下学习过程。大佬请绕过!谢谢!! 测试环境:DVWA,安装方法参考上一篇: https://www.cnblogs.com/aq-ry/p/9220584.html 前期知识:了解反射型XSS、文件上传、CSRF漏洞原理及利用方法。 一、反射型 XSS; 查看源码文件:WWW\DVWA\vulnerabilities\xss_r\source\low.php 未做任何过滤,构造如下HTML代码,分别为两张图片,诱惑用户去点击,形成XSS攻击: <!DOCTYPE html> <html> <head> <title>a标签测试</title> <meta charset="utf-8"> </head> <body> 你想成为一名黑客吗?<br> <a href="http://127.0.0.1/DVWA/vulnerabilities/upload/"> <img src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2067493440,1557616999&fm=27&gp=0.jpg" /> </a> </body> </html> <!DOCTYPE html> <html> <head> <title>a标签测试</title> <meta

JQueqy Ajax的使用(POST请求)

匿名 (未验证) 提交于 2019-12-03 00:39:02
一,Ajax GET请求和POST请求知识点   1,GET请求不用添加 {% csrf_token%} ,也不会报csrftoken的错   2,POST请求的话,就需要添加 {% csrf_token%} 标签, 而且要使用$.ajax() 方法,将token传递到服务端   3,传递过去就行了,后台自动会处理,无需用手工处理这个token 二,以下是代码示例 以下是index.html代码示例(里面有使用ajax,GET和POST方法的代码示例) 1 <! DOCTYPE html > 2 < html lang ="en" > 3 < head > 4 < meta charset ="UTF-8" > 5 < meta http-equiv ="x-ua-compatible" content ="IE=edge" > 6 < meta name ="viewport" content ="width=device-width, initial-scale=1" > 7 < title > AJAX局部刷新实例 </ title > 8 </ head > 9 < body > 10 <!-- 说明,csrf_token其实就是一个input框 ,类型为"hiddent"即隐藏的,如下注释的代码 --> 11 <!-- <input type="hidden" name=

django 笔记13 CSRF

匿名 (未验证) 提交于 2019-12-03 00:34:01
CSRF a. CSRF原理 b. 无CSRF时存在隐患 c. Form提交(CSRF) d. Ajax提交(CSRF) CSRF请求头 x - CSRFToken HTTP_X_CSRFToken django自动加的HTTP 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect 需要csrf认证 不需要在setting里添加django.middleware.csrf.CsrfViewMiddleware @csrf_exempt 不需要csrf认证 全局设置 局部设置 django.middleware.csrf.CsrfViewMiddleware 在views.py里 from django.views.decorators.csrf import csrf_exempt, csrf_protect @csrf_exempt def index(request): pass 在form表单下面添加 { % csrf_token % } 如果是以ajax提交方式 $(function(){ $.ajaxSetup({ #GET HEAD OPTIONS TRACE 四种是不需要加csrftoken的 在这前需要做个判断 beforeSend: function(xhr,settings){ xhr

token详解

匿名 (未验证) 提交于 2019-12-03 00:32:02
获取token值 public function getCsrfToken () { session () -> regenerateToken (); $token = csrf_token (); return response () -> json ([ 'token' => $token ]); } {!! csrf_field !!} <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 该段代码等同于全局帮助函数 csrf_field 的输出: 在 Blade模板引擎 中还可以使用如下方式调用: {!! csrf_field() !!} <?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * 指定从 CSRF 验证中排除的URL * * @var array */ protected $except = [ 'testCsrf' ]; } <meta name="csrf-token" content="{{

Django-中间件

大城市里の小女人 提交于 2019-12-03 00:26:48
Django-中间件 什么是中间件 简单来说就是到达路由前必须经过的过程 中间件常用的作用 1.反爬(用户访问频率限制) 2.用户是否是合法用户 3.用户登录校验 4.各种涉及到网站全局的功能 Django中间件 Django默认配置了7个中间件,当然我们还可以自己定制相关的中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'app01.mymiddleware.myaabb.MyMiddle1', 'app01.mymiddleware.myaabb.MyMiddle2

网站漏洞修复之CSRF跨站攻击

匿名 (未验证) 提交于 2019-12-03 00:26:01
在近几年的 网站安全威胁排列中排前三,跨站攻击利用的是网站的用户在登陆的状 态下,在用户不知不觉的 情况下执行恶意代码以及执行网站的权限操作,CSRF窃取 不了用户的数据,只能执行用户能操 作的一些数据。比如:在用户不知道的情况下 , 把账户里的金额,以及银行卡号,体现功能,都 转移到其他人账户里去。如果 被攻击者是一个管理员的权限,那么就会对网站安全构成严重的 危害。 CSRF跨站漏洞 由于网站设计人员,对CSRF跨站漏洞不是太了解,误认为用户从浏览器发送过来的 请求,当做 正常的用户请求,当受害者点击入侵者构造的恶意链接的时候就会执行 恶意的代码,以及恶意的 操作,例如删除用户的银行卡。Sine安全公司是一家专注 于:服务器安全、 网站安全 、网站安全 检测、网站漏洞修复,渗透测试,安全服务于 一体的网络安全服务提供商。 GET http://sinesafe.com/bank/delbank.php?id=66 当正常用户点击上面的连接的时候,并且该用户的登陆状态一直存在,用户就会不 知不觉的删除 了自己账户里的银行卡,给用户造成没必要的损失,说实话,简单的 用户身份验证以及过滤判断, 只能保证用户的请求是来自浏览器,却不能判断请求 本身是用户自己操作删除的银行卡。 CSRF网站跨站漏洞修复办法 CSRF漏洞基本都是在网站代码的框架中去修复该漏洞,我们在对网站安全进行测试

django之cookies,session 、中间件及跨站请求伪造

笑着哭i 提交于 2019-12-03 00:22:14
cookies 和session 为什么会有cookie? ​ 由于http协议是无状态的,即用户访问过后,不留痕迹(状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。) 无法记住用户是谁。但是我们可能在登录之后,要保存用户的部分信息,这样下次就可以直接登录了,这里就引出了cookie 什么是cookie ​ cookie是保存在客户端浏览器上的键值对,是服务端发来的,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。 cookie的原理 ​ cookie是服务端设置在客户端浏览器上的键值对,也就意味着浏览器其实可以拒绝服务端的"命令",默认情况下 浏览器都是直接让服务端设置键值对 cookie实例 #设置cookie obj1.set_cookie() #获取 request.COOKIES.get() #删除 obj1.delete_cookie() ################## ##登录后端核心代码## ################# def login(request): # print(request.path_info) # 只拿url 不拿get请求携带的参数 # print(request.get_full_path()) # 把url以及携带的参数都拿到 if request.method ==

19 Django中间件

吃可爱长大的小学妹 提交于 2019-12-03 00:18:39
目录 一、前言 二、中间件介绍 2.1 什么是中间件 2.2 自定义中间件 2.3 自定义一个中间件示例 三、自定义中间价 process_request 四、自定义中间件 process_response 五、自定义中间件 process_view(了解) 六、自定义中间件方法 process_exception(了解) 七、自定义中间件 process_template_response(了解) 八、中间件的执行流程 九、中间件版登录验证 十、伪站请求伪造 十一、截取钓鱼网站的策略(伪站请求伪造) 1. {% csrf_token %} 2. Ajax解决 十二、csrf两种装饰器方式 一、前言 在前面的博客中已经介绍了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面。我们通过给几个特定视图函数加装饰器实现了这个需求。但是以后添加的视图函数可能也需要加上装饰器,这样会稍微的有些繁琐 下面的内容即将让我们通过一些特点的方式实现控制全局的效果 二、中间件介绍 下面展示一张图来重新看一下,Django请求声明周期流程图 2.1 什么是中间件 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。 但是由于其影响的是全局

跨站请求伪造(csrf)

牧云@^-^@ 提交于 2019-12-03 00:17:42
跨站请求伪造(csrf) 钓鱼网站 ​ 就类似于你搭建了一个跟银行一模一样的web页面 ​ 用户在你的网站转账的时候输入用户名 密码 对方账户 ​ 银行里面的钱确实少了 但是发现收款人变了 最简单的原理 你写的form表单中 用户的用户名 密码都会真实的提交给银行后台 但是收款人的账户却不是用户填的 你暴露给用户的是一个没有name属性的input框 你自己提前写好了一个隐藏的带有name和value的input框 真正的网站 前端 <h1>真正的网站</h1> <form action="" method="post"> <p>username:<input type="text" name="username"></p> <p>target_username:<input type="text" name="target_username"> </p> <p>money:<input type="text" name="money"></p> <input type="submit"> </form> 后端 def transfer(request):#转账 if request.method=="POST": username = request.POST.get('username') target_username = request.POST.get('target