csrf

Django CSRF认证的几种解决方案

本小妞迷上赌 提交于 2020-02-29 12:02:51
什么是CSRF 浏览器在发送请求的时候,会自动带上当前域名对应的cookie内容,发送给服务端,不管这个请求是来源A网站还是其它网站,只要请求的是A网站的链接,就会带上A网站的cookie。浏览器的同源策略并不能阻止CSRF攻击,因为浏览器不会停止js发送请求到服务端,只是在必要的时候拦截了响应的内容。或者说浏览器收到响应之前它不知道该不该拒绝。 攻击过程 用户登陆A网站后,攻击者自己开发一个B网站,这个网站会通过js请求A网站,比如用户点击了某个按钮,就触发了js的执行。 防止攻击 Double Submit Cookie 攻击者是利用cookie随着http请求发送的特性来攻击。但攻击者不知道 cookie里面是什么。 Django中是在表单中加一个隐藏的 csrfmiddlewaretoken,在提交表单的时候,会有 cookie 中的内容做比对,一致则认为正常,不一致则认为是攻击。由于每个用户的 token 不一样,B网站上的js代码无法猜出token内容,对比必然失败,所以可以起到防范作用。 Synchronizer Token 和上面的类似,但不使用 cookie,服务端的数据库中保存一个 session_csrftoken,表单提交后,将表单中的 token 和 session 中的对比,如果不一致则是攻击。 这个方法实施起来并不困难,但它更安全一些,因为网站即使有

Django的csrf防护

你。 提交于 2020-02-29 02:49:37
csrf防护的目的:防止别的网站通过不正当手段直接访问或修改我们网站用户的数据库 Django中的csrf代码段在settings中 注释掉第三行可以关闭csrf防护 在Django的csrf防护中(只针对post),浏览器http请求(Forbidden)和ajax(403 2274)请求不一样 前者处理:在模板html内要提交的表单中加上{% csrf_token %} 后者处理:在views中对应的处理函数进行处理(post请求的对应函数),加上两句 from django.views.decorators.csrf import csrf_exempt @csrf_exempt(这是装饰器) 来源: CSDN 作者: 土豆大番薯 链接: https://blog.csdn.net/weixin_45921256/article/details/104555574

Django CSRF认证的几种解决方案

99封情书 提交于 2020-02-29 01:40:29
什么是CSRF 浏览器在发送请求的时候,会自动带上当前域名对应的cookie内容,发送给服务端,不管这个请求是来源A网站还是其它网站,只要请求的是A网站的链接,就会带上A网站的cookie。浏览器的同源策略并不能阻止CSRF攻击,因为浏览器不会停止js发送请求到服务端,只是在必要的时候拦截了响应的内容。或者说浏览器收到响应之前它不知道该不该拒绝。 攻击过程 用户登陆A网站后,攻击者自己开发一个B网站,这个网站会通过js请求A网站,比如用户点击了某个按钮,就触发了js的执行。 防止攻击 Double Submit Cookie 攻击者是利用cookie随着http请求发送的特性来攻击。但攻击者不知道 cookie里面是什么。 Django中是在表单中加一个隐藏的 csrfmiddlewaretoken,在提交表单的时候,会有 cookie 中的内容做比对,一致则认为正常,不一致则认为是攻击。由于每个用户的 token 不一样,B网站上的js代码无法猜出token内容,对比必然失败,所以可以起到防范作用。 Synchronizer Token 和上面的类似,但不使用 cookie,服务端的数据库中保存一个 session_csrftoken,表单提交后,将表单中的 token 和 session 中的对比,如果不一致则是攻击。 这个方法实施起来并不困难,但它更安全一些,因为网站即使有

CSRF攻击

我的梦境 提交于 2020-02-27 20:16:32
利用场景:后台存在添加管理员的功能,如下: 进行抓包观察,发现成功抓包 那么为了防止类似的CSRF攻击的话,肯定需要进行防御措施: 1、验证请求是否token合法 2、判断请求的来源是否合法 token验证: <script type="text/javascript"> function login() { var token = "{$token}" $.post("/index.php?m=index&a=add", { username: $("#username").val(), password: $("#password").val(), token: token, }, function (data) { if (data.status == 1) { window.location.href = data.data.url } else { alert(data.msg) } }, 'json'); } </script> $username = isset($_POST['username']) ? $_POST['username'] : ''; $password = isset($_POST['password']) ? $_POST['password'] : ''; $token = isset($_POST['token']) ? $_POST[

CSRF原理介绍及文件上传

别来无恙 提交于 2020-02-27 19:07:16
CSRF原理介绍 CSRF漏洞定义 CSRF(cross-site request forery,跨站请求伪造),也被称为one click attack或者session riding,通过缩写为CSRF或者XSRF XSS与CSRF区别 1.XSS利用站点内的信任用户,盗取cookie 2.CSRF通过伪装成受信任用户请求信任的网站 CSRF漏洞原理 利用目标用户的合法身份,以目标用户的名字执行某些非法操作 如: 正常用户转账 http://www.xxx.com/pay.php?user=xx&money=100 恶意用户转账 http://www.xxx.com/pay.php?user=恶意用户&money=1000 CSRF漏洞利用 在修改密码的时候,抓包抓到修改密码的请求 http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change GET型CSRF代码分析 http://127.0.0.1/csrf/csrf_get.php?username=admin&password=admin CSRF防御措施 CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作 1.验证码防御 2.referer check防御 文件上传 靶场环境

简述XSS与CSRF区别

血红的双手。 提交于 2020-02-27 00:26:39
XSS跨站脚本攻击 XSS:中文名称跨站脚本攻击,通常出现在搜索框、留言板、评论区等地方   分类:反射性、存储型、DOM型   攻击方式:构造恶意链接,诱骗用户点击盗取用户的cookie信息   反射性XSS:     通常这一类xss危害较低,对网站没有什么严重的影响,具体表现在用户在搜索框输入xss语句返回弹框,仅出现一次   存储型XSS:     存储型对网站危害较大,用户插入xss语句后,恶意语句会存入网站数据库中,用户访问过程都会出现弹框   DOM型XSS:     DOM——文档对象类型     利用浏览器的dom解析,更不容易被发现,可以更改页面布局   漏洞危害:XSS蠕虫、会话、流量劫持、网站挂马、盗取cookie   防护方法:设置黑名单和白名单、对用户输入进行过滤、入参字符过滤、出参字符转义、设置http-only CSRF跨站请求伪造 CSRF漏洞:中文名称跨站请求伪造,攻击者冒充用户身份执行用户操作   漏洞原理:     1、用户登录信任网站在未退出的情况下访问攻击者构造的恶意网站     2、恶意网站发出访问第三方网站的请求,信任网站收到请求以用户信息访问     3、攻击者在用户不知情的情况下冒充用户身份访问成功   检测漏洞:抓取一个请求包,去掉referer字段进行访问,如果访问有效则存在漏洞   危害:盗用用户身份、执行用户操作,修改信息

Django: Generate new CSRF token per request/form

自古美人都是妖i 提交于 2020-02-26 06:31:28
问题 Can we change CSRF token per-form request or even per-request instead of same token for one active session? 回答1: In the csrf middleware they do something like this, which overwrites the cookie set: request.META["CSRF_COOKIE"] = _get_new_csrf_key() You can import _get_new_csrf_key() via from django.middleware.csrf import _get_new_csrf_key() . Since is kind of a private method I would advise against some hacks like this though. 回答2: Assuming that you have access to the request object: from

Koa1 框架

两盒软妹~` 提交于 2020-02-26 02:22:17
安装创建项目: 1.一定要全局安装(koa1.2和koa2都己经支持) npm install koa-generator -g 2. koa1 生成一个test项目,切到test目录并下载依赖 koa1创建项目 koa test cd test npm install 运行:npm start 访问:http://localhost:3000 Koa是一个类似于Express的Web开发框架,创始人也是同一个人。它的主要特点是,使用了ES6的Generator函数,进行了架构的重新设计。也就是说,Koa的原理和内部结构很像Express,但是语法和内部结构进行了升级。 官方 faq 有这样一个问题:”为什么koa不是Express 4.0?“,回答是这样的:”Koa与Express有很大差异,整个设计都是不同的,所以如果将Express 3.0按照这种写法升级到4.0,就意味着重写整个程序。所以,我们觉得创造一个新的库,是更合适的做法。“ Koa应用 一个Koa应用就是一个对象,包含了一个middleware数组,这个数组由一组Generator函数组成。这些函数负责对HTTP请求进行各种加工,比如生成缓存、指定代理、请求重定向等等。 1 var koa = require('koa'); 2 var app = koa(); 3 4 app.use(function *(){

pikaqiu练习平台(CSRF(跨站请求伪造) )

半城伤御伤魂 提交于 2020-02-25 22:16:13
CSRF(跨站请求伪造) CSRF(跨站请求伪造)概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 CSRF 与XSS的区别 : CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。 如何确认一个网站存在CSRF漏洞: 1. 一个网站对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。 比如:修改管理员账号使,不需要验证旧密码 对于敏感信息的修改并没有使用安全的token验证 2. 确认凭证的有效期 比如:虽然退出或者关闭了浏览器,但cookie仍然有效,或者session没有及时过期 一、 CSRF(get) 登陆之后,可以修改个人信息,点击提交,然后进行抓包; 将get请求修改为攻击者伪造的请求,在登陆状态下点击,就可以修改用户信息; http://192.168.17.111 /pikachu-master/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add= cangzhou

154.Ajax处理csrf防御

独自空忆成欢 提交于 2020-02-23 00:50:45
在普通的form表单中采用post请求提交数据,可以在form表单的method=post的form标签下面,添加一个csrf_token标签{% csrf_token %},或者是直接手动的添加一个input标签,<input type='text' name='csrfmiddlewaretoken value='{{ csrf_token }}'>,都可以在form表单中做好csrf防御的工作。但是如果我们的数据是通过jQuery,Ajax提交的,那我们就不能使用csrf_token标签来处理csrf攻击了。这种情况下,可以在form表单中添加csrfmiddlewaretoken,或者是通过ajax在我们的请求头中设置一个X-CSRFToken变量,我们可以从返回的cookie中提取csrf_token,再设置进去。在我们的项目中创建一个js文件为:myajax_csrf.js,用来定义获取cookie中的csrftoken的函数,示例代码如下: function getcookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(";"); for (var i = 0; i <