token

Django之CSRF

荒凉一梦 提交于 2020-01-23 02:19:46
网页向后端传送数据的时候有两种方式,get和post。通过设置form中的method来达到是否采用get或者是post <form action="/show_all/" method="POST"> 但是django中使用post的话会遇到如下的错误 这个错误的意思是csrf校验失败,request请求被丢弃掉。我们先来了解下什么是csrf。 CSRF, Cross Site Request Forgery, 跨站点伪造请求。举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求,你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造 举个例子: 假如用户abc登录了银行的网站,并且向abc2进行了转账,对银行发送的请求是 http://bank.example/withdraw?account=abc&amount=1000000&for=abc2 . 通常情况下,请求发送到服务器后,服务器会首先验证是否是合法的session,如果是则转账成功。假设黑客也有同样银行的账号。他知道转账的时候会生成如上的请求链接。黑客也可以发送同样的请求给服务器要求转账给自己。但是服务器校验他的这个请求不是合法的session。因此黑客想到了CSRF的方式

Django之CSRF

我只是一个虾纸丫 提交于 2020-01-23 02:19:04
网页向后端传送数据的时候有两种方式,get和post。通过设置form中的method来达到是否采用get或者是post <form action="/show_all/" method="POST"> 但是django中使用post的话会遇到如下的错误 这个错误的意思是csrf校验失败,request请求被丢弃掉。我们先来了解下什么是csrf。 CSRF, Cross Site Request Forgery, 跨站点伪造请求。举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求,你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造 举个例子: 假如用户abc登录了银行的网站,并且向abc2进行了转账,对银行发送的请求是 http://bank.example/withdraw?account=abc&amount=1000000&for=abc2 . 通常情况下,请求发送到服务器后,服务器会首先验证是否是合法的session,如果是则转账成功。假设黑客也有同样银行的账号。他知道转账的时候会生成如上的请求链接。黑客也可以发送同样的请求给服务器要求转账给自己。但是服务器校验他的这个请求不是合法的session。因此黑客想到了CSRF的方式

跨站点伪造请求

六月ゝ 毕业季﹏ 提交于 2020-01-23 02:17:42
系统漏洞 描述 CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了合法用户的身份,以合法用户的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 防御 CSRF漏洞防御主要从服务端和用户端两个层面进行。 1、服务端的防御 目前主要防御CSRF攻击主要有三种策略:验证HTTP Referer字段,在请求地址中添加token并验证,在HTTP头中自定义属性并验证。 1)验证HTTP Referer字段 根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。 比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank. test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时

Django后端项目----restful framework 认证源码流程

主宰稳场 提交于 2020-01-23 02:04:33
一、请求到来之后,都要先执行dispatch方法,dispatch方法方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 def dispatch(self, request, *args, **kwargs): """ `.dispatch()` is pretty much the same as Django's regular dispatch, but with extra hooks for startup, finalize, and exception handling. """ self.args = args self.kwargs = kwargs 第一步:对request进行加工(添加数据) request = self.initialize_request(request, *args, **kwargs) self.request = request self.headers = self.default_response_headers # deprecate? try: #第二步: #处理版权信息 #认证 #权限 #请求用户进行访问频率的限制 self.initial(request, *args, **kwargs) # Get the appropriate

使用第三方实现微信登录

别来无恙 提交于 2020-01-23 00:11:31
使用第三方实现微信登录 1.开启内网穿透 什么是内网穿透? 内网穿透,即 NAT 穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说 映射端口 ,能让 外网的电脑找到处于内网的电脑 ,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。 通俗一点 : 就是把你本地的项目让外网的人可以访问 选择一个工具 https://natapp.cn/ 免费注册 购买渠道,选择免费的 我的渠道,复制密钥authtoken 使用教程,可看网页上右上角的教程/文档 根据需要 , 下载客户端 在 natapp.exe 目录下新建 conf.ini 修改配置再启动 Conf.ini里面的内容 # 将本文件放置于 natapp 同级目录 程序将读取 [default] 段 # 在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置 # 命令行参数 -config= 可以指定任意 config.ini 文件 [default] authtoken=f5e6474f4bc9fcc7 # 对应购买的隧道中的 authtoken clienttoken= # 对应客户端的 clienttoken, 将会忽略 authtoken, 若无请留空 , log=none #log 日志文件

基于PHP的微信公众平台开发(TOKEN验证,消息回复)

非 Y 不嫁゛ 提交于 2020-01-22 20:46:54
微信公众平台开发 实现步骤: 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。 同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。 第二步:验证服务器地址的有效性 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数: signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr 随机字符串 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容

PHP用户注册邮箱验证激活帐号

孤街醉人 提交于 2020-01-22 19:50:28
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号。激活成功后才能正常使用会员功能。 本文将结合实例,讲解如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功能。 业务流程 1、用户提交注册信息。 2、写入数据库,此时帐号状态未激活。 3、将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。 4、将构造好的激活识别码组成URL发送到用户提交的邮箱。 5、用户登录邮箱并点击URL,进行激活。 6、验证激活识别码,如果正确则激活帐号。 准备数据表 用户信息表中字段Email很重要,它可以用来验证用户、找回密码、甚至对网站方来说可以用来收集用户信息进行Email营销,以下是用户信息表t_user的表结构: CREATE TABLE IF NOT EXISTS `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) NOT NULL COMMENT '用户名', `password` varchar(32) NOT NULL COMMENT '密码', `email` varchar(30) NOT NULL COMMENT '邮箱',

Django rest framework ---- 权限

给你一囗甜甜゛ 提交于 2020-01-22 19:15:57
Django rest framework ---- 权限 添加权限 api/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # FileName : permission.py # Author : Adil # DateTime : 2019/7/30 5:14 PM # SoftWare : PyCharm from rest_framework.permissions import BasePermission class SVIPPermission(object): message = '必须是SVIP才能访问!' def has_permission(self,request,view): if request.user.user_type !=3: return False return True class MyPermission(object): def has_permission(self,request,view): if request.user.user_type == 3: return False return True settings.py全局配置权限 #设置全局认证 REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES":['api

Session(数据)共享的前后端分离Shiro实战

半腔热情 提交于 2020-01-22 19:04:29
1,前言 本文期望描述如何使用Shiro构建基本的安全登录和权限验证。本文实战场景有如下特殊需求:1,在集群和分布式环境实现session共享;2,前端只使用HTML/CSS/JS。因此无法直接使用Shiro提供的SessionManager,以及Shiro针对web应用提供的Filter拦截方式。当然,除非是一定要通过共享缓存的方式共享session,否则还是使用Shiro默认的session管理,毕竟增加独立缓存就意味着维护成本的提高和可用性的下降。 2, Shiro架构 首先一睹官方给出的Shiro架构图,如图1所示。刨除最右侧的加密工具类,主要围绕SercurityManager来阐述。SercurityManager是Shiro安全框架里的顶层安全管理中心,所有安全控制相关逻辑都是在SercurityManager里面通过delegate的方式,调用到真正的动作执行者。从图1可以清楚看到主要管理的组件:authentication管理,authorization管理,session管理,session缓存管理,cache管理,realms管理。(本文不想重复已有的文字,想要更好的了解Shiro,详见官方推荐的Shiro full intro: https://www.infoq.com/articles/apache-shiro ) 1

接口测试-chap6-获取页面动态token

拜拜、爱过 提交于 2020-01-22 18:10:08
1.在发起某些请求时,可能会要求必须是从某个页面进行请求,此时会验证页面的token 2.这个token是动态生成的,每次请求时值都是不同的, 不可以通过fiddler抓取的值作为固定值传入,通过fiddler抓到的是某次请求的一个值, 通过python发起请求时,又是新的请求了。 所以需要先获取,再传入。 有点类似获取随机数,再传递这个随机数 这里的例子是登录redmine,这个参数值是通过页面上的input[name=authenticity_token]标签传入的 3.可以使用BeautifulSoup获取: BeautifulSoup用于爬虫时解析网页,可以获取到网页的标签。 在这里用于获取input[name=authenticity_token]标签的authenticity_token值, 它的返回值是列表,内容是一个标签,获取标签中属性值时,先通过列表索引知道元素,再通过键取值 from bs4 import BeautifulSoup soup = BeautifulSoup(r2.text, 'lxml') tag = soup.select('input[name=authenticity_token]') data = {"utf8": "✓", "authenticity_token": tag[0]['value'], "username":