token

web安全之token

允我心安 提交于 2020-01-11 03:18:30
参考:http://blog.csdn.net/sum_rain/article/details/37085771 Token,就是令牌,最大的特点就是随机性,不可预测。一般黑客或软件无法猜测出来。 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交、 2)anti csrf攻击(跨站点请求伪造)。 两者在原理上都是通过session token来实现的。当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中,然后将Token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,Token会随着表单一起提交到服务器端。 然后,如果应用于“anti csrf攻击”,则服务器端会对Token值进行验证,判断是否和session中的Token值相等,若相等,则可以证明请求有效,不是伪造的。 不过,如果应用于“防止表单重复提交”,服务器端第一次验证相同过后,会将session中的Token值更新下,若用户重复提交,第二次的验证判断将失败,因为用户提交的表单中的Token没变,但服务器端session中Token已经改变了。 上面的session应用相对安全,但也叫繁琐,同时当多页面多请求时,必须采用多Token同时生成的方法,这样占用更多资源,执行效率会降低。因此

Python微信公众号后台开发:图片上传及返回

南楼画角 提交于 2020-01-11 02:37:21
你绝对在朋友群看到过类似这样的图片信息: 虽然大家都知道是假的,但就是爱玩,同时也给公众号引来了大量粉丝。 对于公众号,有时我们会需要返回图片,那么今天就说说怎么成功的返回图片呢? 主要流程 获取图片 图片处理,上传 返回图片 首先我们需要获取图片的信息,通过@robot.image获取用户图片信息 # 用户发送图片 @robot.image def blog(message,session print(dir(message)) print(message.__dict__) print("msg", message.img) 我们关心的是图片的下载路径:message.img 获取图片 通过图片路径下载图片: def request_download(img_url, img_save_path): import requests r = requests.get(img_url) with open(img_save_path, 'wb') as f: f.write(r.content) 图片处理及上传 图片处理:这里自己想怎么处理就怎么处理吧, 用Python给头像加上圣诞帽或圣诞老人小图标 图片上传: 上传临时素材接口,获取临时图片的media_id返回图片。 通过调用官方的上传临时素材接口(我这里图片只做临时返回处理,没必要永久保存) token值是有时效性

微信公众平台开发(71)OAuth2.0网页授权

落爺英雄遲暮 提交于 2020-01-10 20:14:58
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者: 方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章。 一、什么是OAuth2.0 官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications. OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。 OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如

ASP.Net Core 3.0 中使用JWT认证

这一生的挚爱 提交于 2020-01-10 18:00:08
JWT认证简单介绍 关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构。 JWT主要由三部分组成,如下: HEADER.PAYLOAD.SIGNATURE HEADER 包含token的元数据,主要是加密算法,和签名的类型,如下面的信息,说明了 加密的对象类型是JWT,加密算法是HMAC SHA-256 {"alg":"HS256","typ":"JWT"} 然后需要通过BASE64编码后存入token中 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 Payload 主要包含一些声明信息(claim),这些声明是key-value对的数据结构。 通常如用户名,角色等信息,过期日期等,因为是未加密的,所以不建议存放敏感信息。 {"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name":"admin","exp":1578645536,"iss":"webapi.cn","aud":"WebApi"} 也需要通过BASE64编码后存入token中

OAuth 2 服务的 Akka 实现:access_token 管理

倖福魔咒の 提交于 2020-01-10 15:51:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 实现一个 OAuth 2 服务有几个核心点: OAuth 2 协议解析 连接的用户可能很多,系统需支持横向扩展 每个连接用户的 access_token 的状态控制:有效期控制 服务要支持容错、可恢复、可扩展、高并发等特性 使用 Akka 来实现 OAuth 2 服务会发现逻辑非常的清晰,且能很好的实现以上几个核心点。 每个连接用户或 access_token 可抽像为一个 Actor ,这样多个连接用户或 access_token 即可并发访问。在 Actor 内部可以管理过期时间等状态。 使用 akka-cluster-sharding 我们可以实现连接用户的集群部署、横向扩展。而 akka-persistence 提供 EventSourcedBehavior 为 Actor 添加了持久化能力,这实现了可恢复特性。通过使用 Akka Cluster 机制,可以减少对外部缓存系统的依赖。 Akka Actor提供了监管机制,这样我们可对错误快速响应,实现了容错性。 access_token 在 Akka 中通过 Actor 模型来设计 access_token 有两种主要方案: 每个 access_token 一个 Actor,通过 ClusterSharding 来水平扩展,将 Akka Actor

OAuth02.接入github oauth app

无人久伴 提交于 2020-01-10 15:28:42
接入github OAuth时序图 github oauth api地址 https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/ 1. 使用client_id scope等获取code。 浏览器输入: https://github.com/login/oauth/authorize?client_id=Iv1.3531c407ca366ce0&scope=user,repo 获得redire uri 和code http://localhost:3000/auth?code=c1bfdf16aaff9a8b945c 2. 使用client_id client_secrect code获取access_token:https://github.com/login/oauth/access_token 3. 调用github接口。 github接口文档: https://developer.github.com/v3/users/ github接口域名 https:// api.github.com/ 添加Headers Authorization : token access_token OAuth的安全策略: redirect_uri 是我们自己在github配置的

幂等性 整理

荒凉一梦 提交于 2020-01-10 11:38:24
简单总结, 请求的响应结果和对网络的访问次数无关,是为了防止重复请求形成脏数据,或者脏读结果。 常见于,多次提交订单、或者扣款(多次支付只扣一次款) 但带来的不足是,逻辑复杂,并行改为串性,执行率降低。 场景: 查询 和删除 是幂等的操作,不管查询需要保证数据不变。 乐观锁和悲观锁。 乐观锁 udpate set version +1 ; 悲观锁 selset * from t_user where id = 1 for update ; token机制, 用户登录时后台创造token返回前端, 前端接口发送请求时候,带上token ,后端检测与后端保存的token,对比token一致 则请求成功,并删除后端token。前端第二次发送请求是,token就会不一致,后端检测到就会拒绝第二次访问。 唯一标识。 对外api中,请求字段中需要包换一个唯一的标识字段,该字段在数据库表中属于唯一索引。在访问接口时候,后端会先根据该字段查询时候已经包含,包含了则已经请求过。负责插入新的请求。 来源: CSDN 作者: lileLife 链接: https://blog.csdn.net/lileLife/article/details/103918623

字符串分割函数strtok(线程不安全),线程安全函数strtok_r

不想你离开。 提交于 2020-01-10 10:03:11
strtok_r函数---字符串分割函数 函数原型: char *strtok_r(char *str, const char *delim, char **saveptr); 参数: str:被分割的字符串,若str为NULL,则被分割的字符串为*saveptr delim:依据此字符串分割str saveptr:分割后剩余部分的字符串 返回值: 遇到第一个delim时,分割出的字符串,若没有遇到delim,则范围NULL 例程: int main(int argc,char* argv[]) { char str[1024] = "this is a test!"; char *token; char *saveptr; token = strtok_r(str, " ", &saveptr); printf("token:%s\n",token); printf("saveptr:%s\n\n\n",saveptr); token = strtok_r(saveptr, " ", &saveptr); printf("token:%s\n",token); printf("saveptr:%s\n",saveptr); return 0; } 结果: 3.strtok和strtok_r的源代码 这两个函数的实现,由众多的版本。我strtok_r来自于GNU C Library

PASCAL语言子集的词法、语法分析器之实现

試著忘記壹切 提交于 2020-01-10 09:27:35
针对简单的文法(PASCAL语言子集),制作相应的词法分析器和递归下降的语法分析器。 文法要求如下: 1、 关键字、标识符、数字等: 1.begin 2.if 3.then 4.while 5.do 6.end 10. 标识符 11. 数字 13.+ 14.- 15.* 16./ 17.: 18.:= 20.< 21.<> 22.<= 23.> 24.>= 25.= 26.; 27.( 28.) 2、 文法规则 : 程序 → begin 语句串 end 语句串 → 语句 { ; 语句 } 语句 → 赋值语句 | 条件语句 | 循环语句 赋值语句 → 变量 := 表达式 条件语句 → if 条件 then ( 语句 | 程序 ) 循环语句 → while 条件 do ( 语句 | 程序 ) 表达式 → 项 { + 项 | - 项 } 条件 → 表达式 关系符 表达式 关系符 → < | <> | <= | > | >= | = 项 → 因子 { * 因子 | / 因子 } 因子 → 变量 | 数字 | ( 表达式 ) 变量 → 标识符 一、 词法分析器 词法分析器的任务是清除源文件中多余的空格、换行、制表符等,识别文法符号。按顺序输出识别的标识符及其种别编号,供语法分析器调用。 代码如下: #include <stdio.h> #include <string.h> #include

百度AI攻略:语音识别

馋奶兔 提交于 2020-01-10 09:03:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.功能描述: 将60秒内的语音快速识别为文字,适用于手机语音输入、语音搜索、人机对话等语音交互场景 2.平台接入 具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了: http://ai.baidu.com/forum/topic/show/943327 3.调用攻略(Python3)及评测 3.1首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考: http://ai.baidu.com/docs#/Auth/top 具体Python3代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python import urllib import base64 import json #client_id 为官网获取的AK, client_secret 为官网获取的SK client_id =【百度云应用的AK】 client_secret =【百度云应用的SK】 #获取token def get_token(): host = ' https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id= ' + client_id + '