返回顶部
首页 > 资讯 > 精选 >Flask接口签名sign原理是什么
  • 619
分享到

Flask接口签名sign原理是什么

2023-07-05 03:07:15 619人浏览 薄情痞子
摘要

这篇文章主要介绍“flask接口签名sign原理是什么”,在日常操作中,相信很多人在Flask接口签名sign原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask接口签名sign原理是什么”的疑

这篇文章主要介绍“flask接口签名sign原理是什么”,在日常操作中,相信很多人在Flask接口签名sign原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask接口签名sign原理是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

作用

防止有人不停的刷接口,对接口作限制

比如说,登录接口,按道理说,应该只有app会请求这个接口

但是,如果有人抓取app的请求,就会得到登录接口的地址和请求参数

如果他写了个脚本,不断的访问登录接口,去测登录名密码,那么有些有些用户的密码策略过于简单,是很容易被试出来的

所以,接口签名就是专门用来限制这个的,只有app(自己人)才能通过校验

原理

服务器和app,各自存储一个相同的秘钥

app请求时,把传的参数用秘钥进行加密,生成一个sign签名,一同传递过去

服务器接到请求后,也会对传递的参数进行加密,也生成一个sign签名,拿服务器生成的sign和接口请求的sing比对一下,如果相同,那么就可以证明,是自己人请求的,就予以放行

因为这个秘钥,只有自己人才会有,同样的秘钥生成的sign签名,肯定是一模一样的

这个秘钥,一般是开发的时候,线下给到app开发,集成编译到app里面的

问题

举例,app和服务器,各自保存了一个秘钥,进行签名验证

app请求登录接口,账号名为abcd,密码为123456,

app对账户名和密码用秘钥加密生成签名,去请求登录接口

服务器收到请求,对账号名和密码也用秘钥加密生成签名,对比发现签名一致,然后予以通过

请求成功

问题1

但是,如果下次app还去请求登录的时候,生成的签名,是不是还是一模一样?

因为都是对账号和密码加密生成签名,那么只要账号和密码不变,那么生成的签名肯定是一模一样的

那如果坏人直接抓包拿到签名、账号和密码,是不是他也可以仿造登录请求,要知道,服务器只接受请求,他是分辨不出来的

所以,即使是相同的账号和密码,也要保证,每次的签名都不一致

解决办法

在对账号和密码进行加密的时候,生成当前时间的时间戳,一起加密,这样就保证了每次生成的签名都一样了

传递参数的时候,也需要把加密用的时间戳一同传递过去,因为请求时候延迟的,服务器并不知道你是哪个时间进行加密的

那么现在生成签名和请求的步骤就是:

app先对账号、密码、时间戳,用秘钥进行加密得到签名

app请求登录接口,传参:账号、密码、时间戳、签名

问题2

那么问题又来了,跟刚才的问题一样,如果有人抓包,得到账号、密码、时间戳、签名,然后去伪造请求,是不是服务器还会通过?

只要账号、密码、时间戳不变化,那么生成的签名,还是一模一样的。

解决办法

服务器对时间戳进行校验,与当前时间不能相差10秒

这样就保证了,这个签名的有效期只有10秒,过了10秒后,就失效了

如果想要新的签名,那么就需要用新的时间戳了

代码

如果需要传递很多参数的时候,还需要对参数进行排序后再加密,要不然app和服务器用了不一样的字符串加密,校验还是会失败的

import hashlib  import time  salt = 'nx24Tej@R4gWVCopJkjHWjBo@n58LdQ5'  # 盐, 加密生成签名的秘钥  def validate_sign(sign, ts, **kwargs):      """时间戳有效期10秒,排序顺序为:盐+时间戳+按照字母排序的参数的值"""      # 首先判断ts时间戳,有没有超过10秒有效期      now_ts = int(time.time())      if now_ts - int(ts) > 10:          return False      # 对字典中的键进行排序      sort_dict = sorted(kwargs.items(), key=lambda x: x[0])      # 按照排序拿出值,拼接成字符串,然后加密生成签名      s = salt + str(ts)      for key, value in sort_dict:          s += str(value)      # 使用sha256加密,与app也要约定好加密方式      new_sign = hashlib.sha256(s.encode('utf-8')).hexdigest()      # 比对签名是否一致      if sign == new_sign:          return True      return False  validate_sign(1, int(time.time()), phone="15555555555", passWord="123456")  # 排序后的字符串:nx24Tej@R4gWVCopJkjHWjBo@n58LdQ5167541269212345615555555555  # 生成的签名: d87f2833c1f6a1d0d3c67bafdeb0965b0503385dce615662229b27333c9963f7

到此,关于“Flask接口签名sign原理是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Flask接口签名sign原理是什么

本文链接: https://lsjlt.com/news/349194.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flask接口签名sign原理是什么
    这篇文章主要介绍“Flask接口签名sign原理是什么”,在日常操作中,相信很多人在Flask接口签名sign原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask接口签名sign原理是什么”的疑...
    99+
    2023-07-05
  • Flask接口签名sign原理与实例代码浅析
    目录作用原理问题问题1解决办法问题2解决办法代码觉得废话多的话,可以直接看代码 作用 防止有人不停的刷接口,对接口作限制 比如说,登录接口,按道理说,应该只有app会请求这个接口 但...
    99+
    2023-02-11
    Flask接口签名sign Flask接口签名
  • iOS超级签名的技术原理是什么
    这期内容当中小编将会给大家带来有关iOS超级签名的技术原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。超级签名是什么样的简单来说,就是把添加苹果设备udid然后申请iOS证书然后打包进行真机测试的...
    99+
    2023-06-05
  • java调用接口的原理是什么
    Java调用接口的原理是通过接口的实现类来实现接口的方法。当一个类实现了一个接口,它必须实现接口中声明的所有方法。然后可以通过创建实...
    99+
    2023-10-09
    java
  • Python中Flask运行的原理是什么
    这篇文章主要介绍“Python中Flask运行的原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中Flask运行的原理是什么”文章能帮助大家解决问题。  所有的 Python W...
    99+
    2023-06-29
  • C#显式实现接口原理是什么
    这篇文章主要介绍“C#显式实现接口原理是什么”,在日常操作中,相信很多人在C#显式实现接口原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#显式实现接口原理是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • Java接口的使用与原理是什么
    这篇“Java接口的使用与原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java接口的使用与原理是什么”文章吧。何...
    99+
    2023-06-29
  • Spring中Aware接口的实现原理是什么
    今天就跟大家聊聊有关Spring中Aware接口的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用示例:@Component&nbs...
    99+
    2024-04-02
  • mybatis中mapper接口的工作原理是什么
    MyBatis中的Mapper接口是用于定义SQL映射的接口。它的工作原理可以分为以下几个步骤:1. 定义Mapper接口:创建一个...
    99+
    2023-08-08
    mybatis mapper
  • 接口签名怎么用Java实现
    java实现接口签名 为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约定好密钥,把数据进行加密,接口签名,这样双方调用接口时,验证接口签名一致时就表明数据传输过程中没有...
    99+
    2024-04-02
  • Java中接口隔离原则是什么
    小编给大家分享一下Java中接口隔离原则是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.什么是接口隔离原则?客户端不应该依赖它不需要的接口,即一个类对另一...
    99+
    2023-06-29
  • C#怎么实现快递鸟API接口签名
    本篇内容介绍了“C#怎么实现快递鸟API接口签名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法调用的代码实现//电商IDstring&n...
    99+
    2023-06-03
  • php接口设计的基本原则是什么
    本篇内容主要讲解“php接口设计的基本原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php接口设计的基本原则是什么”吧!PHP接口设计是指在PHP编程实践中,设计出一种可供其他程序或系...
    99+
    2023-07-05
  • PHP标签模板技术的原理是什么
    PHP标签模板技术的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们在对PHP标签模板的理解上多少都会存在一些误区,因为它是一项比较难以掌握的技术。那么,我们希...
    99+
    2023-06-17
  • 什么是数字签名证书
    数字签名证书是一种由可信第三方机构(如证书颁发机构)签发的电子证书,用于证明某个特定实体的身份信息和公钥。数字签名证书包含了持有者的...
    99+
    2023-09-14
    数字签名证书
  • Java接口是什么
    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。两种含义:一,Java接口,Java语言中存在的结构,有特定的语法...
    99+
    2015-03-07
    java基础 Java
  • console接口是什么
    console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。通过使用console接口,开发人员能够更有效地识别和解决问题,优化应用程序性能,提高开发效率。无论是...
    99+
    2023-08-08
  • usb接口是什么
    USB接口是Universal Serial Bus的缩写,是一种通用的电脑外部设备连接标准。USB接口的设计目的是为了简化电脑和外部设备之间的连接,提供更高的数据传输速度和更广泛的兼容性,随着技术的不断发展,USB接口也在不断改进和演进,...
    99+
    2023-08-17
  • 微信域名拦截检测API接口是什么
    这篇文章主要介绍了微信域名拦截检测API接口是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。现如今微信对第三方推广链接的检测是越来越严格了,分享链接在微信中转发经常会被拦...
    99+
    2023-06-04
  • Go语言中接口的命名规范是什么?
    go语言中接口命名规范:使用大写字母开头,使用“i”前缀表示接口,提供描述性名称,例如ireader用于表示读取器接口。 Go 语言中接口的命名规范 Go 语言中接口的命名遵循以下规则...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作