在网址URL中隐藏数据的一些方案

隐藏 ID

比如数据库主键自增ID, UUID,MongoDB 的ObjectId等,你不希望用户看到。可以使用sqids方案。

Sqids (pronounced “squids”) is a small library that lets you generate unique IDs from numbers. It’s good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.

它可以通过自定义字母表来达到别人无法破解你的数据。

sqids = Sqids(alphabet="FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE")
id = sqids.encode([1, 2, 3]) # "B4aajs"
numbers = sqids.decode(id) # [1, 2, 3]

只要使用不同的的 alphabet 就可以了,在它的官网页面下方有个小工具,可以随机生成一个独特的字母表,刷新一下,然后复制到你的代码里,就谁也猜不透你的小心思。

这个很有用,比如你的数据表使用自增 ID,那么使用sqids加密以后,1就可能变成了Uk(注:不同的字母表会不同),而2则是gb,小的数字变化结果差异还非常大。如果你使用一些小技巧,比如在 ID 前面加多个秘密数字,比如 100,那么1就变成了6VEgb,而2则是TdK1E,更加难猜了,能有效避免别有用心的人通过数字增加直接扫描你的数据表。

因为 sqids 只针对数字序列有效,所以如果你用的是 UUIDObjectId 等,就需要把它转化为数字序列,这个很容易,不同的编程语言都有很好的支持。比如在Python中你可以使用int.from_bytes()int.to_bytes()(注:需要注意不同版本之间的参数差异)。

隐藏比较长的信息

比如一个JSON对象,或者一段URL,这在你做跳转功能的时候很有用。

举个例子,登陆以后跳转回原网址,而登陆又在SSO的另一边,那么可能会有很多信息一层一层加上去,如果在代码中详细地处理,当跳转的规则变化时,SSO可能不得不为了子站的功能而修改代码。这个时候就可以使用JSON把下游信息打包传过来,达到解偶的目标。

这个方案是使用jwt,对的,就是登陆的那个jwt

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

在它的官网你可以看到这样的例子,有一个数据:

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

打包编码之后是这样的:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

这段代码在别人不知道你的加密密钥的时候,是无法解密的。这样你在业务就可以把打包编码后的内容附到网址URL里,而SSO之类的上游在跳转的时候只要把这个参数继续传回,你解码之后就可以按自己的方式继续处理,当你增加或变更字段的时候,就不需要上游配合。

除了使用对称加密方法外,也可以使用RSA等不对称加密算法,你只要把公钥发给业务方,那么他就可以加密传输数据给你,而第三方是不可见的。

Python编程中,你可以使用pyjwt库,代码非常简单:

>>> import jwt
>>> key = "secret"
>>> encoded = jwt.encode({"some": "payload"}, key, algorithm="HS256")
>>> print(encoded)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg
>>> jwt.decode(encoded, key, algorithms="HS256")
{'some': 'payload'}

最后

这两个方案都是很多编程语言支持的,在此仅使用Python为例,实践中可以找一下自己熟悉的编程语言的相关库来用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解JavaScript事件循环机制

JavaScript作为前端开发的核心语言之一,其事件循环机制是实现异步编程的关键。本文将深入探讨JavaScript事件循环机制,帮助您更好地理解它是如何工作的,以及如何在前端开发中充分利用这一机制。 1. 什么是事件循环? JavaScript是…

实现pytorch版的mobileNetV1

mobileNet具体细节,在前面已做了分析记录:轻量化网络-MobileNet系列-CSDN博客 这里是根据网络结构,搭建模型,用于图像分类任务。 1. 网络结构和基本组件 2. 搭建组件 (1)普通的卷积组件:CBL …

Mjdjourney使用手册

Mjdjoureny后缀解析 --ar 宽高比设置 --ar 2:3,--ar 1:1,--ar 16:9 --c 多样性设置(风格差异)范围0-100,默认0,数值越大图片风格差异越大 --s 风格化设置 范围0-100,默认50,数字越大mjdj就有更大的发挥…

React Portals

简介 React Portal 可以将组件渲染到dom树的不同位置,同时可以渲染到任意父级元素,可以实现漂浮层功能。 使用样例 本篇文章通过React Portals实现对话框,下面将会给出具体实现。 protal组件 Portal.jsx import {useState} from "re…

学习笔记——C++运算符之赋值运算符

上次我们说到C的运算符共有四种&#xff0c;分别是算术运算符&#xff0c;赋值运算符&#xff0c;比较运算符和逻辑运算符 &#xff0c;下面介绍赋值运算符&#xff0c;赋值运算符主要的种类及作用如下表所示。 #include<bits/stdc.h> using namespace std; int main(){…

听GPT 讲Rust源代码--compiler(30)

File: rust/compiler/rustc_const_eval/src/transform/promote_consts.rs 在Rust的编译器源代码中&#xff0c;rust/compiler/rustc_const_eval/src/transform/promote_consts.rs文件的作用是执行常量传播和优化的转换过程。 该文件中的PromoteTemps结构体是一个转换器&#xf…

2024年Python面试题

面试是每一位求职者都要经历的过程&#xff0c;而对于Python开发者来说&#xff0c;掌握Python的基础知识和应用场景是至关重要的。以下是几个具有代表性的Python面试题&#xff0c;通过这些题目&#xff0c;我们可以一窥Python的深度和广度。 问题一&#xff1a;Python中的装…

插槽slot涉及到的样式污染问题

1. 前言 本次我们主要结合一些案例研究一下vue的插槽中样式污染问题。在这篇文章中&#xff0c;我们主要关注以下两点: 父组件的样式是否会影响子组件的样式&#xff1f;子组件的样式是否会影响父组件定义的插槽部分的样式&#xff1f; 2. 准备代码 2.1 父组件代码 <te…

STM32-03-STM32HAL库

文章目录 STM32HAL库1. HAL库介绍2. STM32Cube固件包3. HAL库框架结构4. 新建HAL版本MDK工程 STM32HAL库 1. HAL库介绍 HAL库 HAL&#xff0c;英文全称 Hardware Abstraction Layer&#xff0c;即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库&#xff0c;用户只需要调…

【已解决】在开启ssh和sshd状态下,XShell无法连接到VMware虚拟机中的Linux操作系统

【已解决】在开启ssh和sshd状态下&#xff0c;XShell无法连接到VMware虚拟机中的Linux操作系统 XShell无法连接到VMware虚拟机中的Linux操作系统&#xff0c;今天上线突然发现XShell无法连接到VMware虚拟机中的Linux操作系统&#xff0c;但是找了很多解决方案都没有解决&#x…

【图像拼接/视频拼接】论文精读:Seamless Video Stitching from Hand-held Camera Inputs(LPVW)

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

00. 目录 文章目录 00. 目录01. 定时器中断相关API1.1 TIM_InternalClockConfig1.2 TIM_TimeBaseInit1.3 TIM_TimeBaseInitTypeDef1.4 TIM_ClearFlag1.5 TIM_ITConfig1.6 TIM_Cmd1.7 中断服务函数1.8 TIM_ETRClockMode2Config 02. 定时器定时中断接线图03. 定时器定时中断示例0…

命令行模式的rancher如何安装?

在学习kubectl操作的时候&#xff0c;发现rancher也有命令行模式&#xff0c;学习整理记录此文。 说明 rancher 命令是 Rancher 平台提供的命令行工具&#xff0c;用于管理 Rancher 平台及其服务。 前提 已经参照前文安装过了rancher环境了&#xff0c;拥有了自己的k8s集群…

html5中各标签的语法格式总结以及属性值说明

有关闭标签的元素 a元素 <a href"" target"" title""></a>表格相关元素 table元素&#xff1a;表格标签caption元素&#xff1a;表头thead元素tbody元素&#xff1a;表格主体元素tfoot元素th元素tr元素&#xff1a;行标签td元素&…

centoss7安装mysql详细教程

【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客 【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客 【MySQL系列】在Centos7环境安装MySQL_centos7安装mysql-CSDN博客

VMware17 下载安装教程

VMware17 下载安装ubuntu22.04虚拟机安装 一、VM安装 1.打开官方下载地址&#xff1a;https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 跳转页面后&#xff0c;点击左边的Download oad now&#xff0c;下载的就是最新版的 Workstation 17 …

[元带你学: eMMC协议 31] CRC 错误检测保证可靠性

依公知及经验整理,原创保护,禁止转载。 专栏 《元带你学: eMMC 协议》 <<<< 返回总目录 <<<< 前言 图片来源: www.elprocus.com 对于 eMMC 存储设备,CRC 校验在数据传输过程中起到了重要的作用。它能够检测出数据在存储和传输过程中的错误,确保…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和…

机械臂运动学逆解(牛顿法)

机械臂运动学逆解&#xff08;牛顿法&#xff09; 常用的工业6轴机械臂采用6轴串联结构&#xff0c;虽然其运动学正解比较容易&#xff0c;但是其运动学逆解非常复杂&#xff0c;其逆解的方程组高度非线性&#xff0c;且难以化简。   由于计算机技术的发展&#xff0c;依靠其…

其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)

本篇博客主要详细讲解一下其他排序&#xff08;基数排序&#xff0c;希尔排序和桶排序&#xff09;也是排序综合系列里最后一篇博客。第一篇博客讲解的是LowB三人组&#xff08;冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff09;&#xff08;数据结构课设篇1&…