如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)

WebAPi接口安全之公钥私钥加密 随着各种设备的兴起,WebApi作为服务也越来越流行。而在无任何保护措施的情况下接口完全暴露在外面,将导致被恶意请求。最近项目的项目中由于提供给APP的接口未对接口进行时间防范导致短信接口被怒对造成一定的损失,临时的措施导致PC和app的防止措施不一样导致后来前端调用相当痛苦,选型过oauth,https,当然都被上级未通过,那就只能自己写了,就很,,ԾㅂԾ,,。下面就此次的方式做一次记录。最终的效果:传输过程中都是密文,别人拿到请求串不能更改请求参数,通过接口过期时间防止同一请求串一直被调用。 阅读详情

原文地址:http://www.cnblogs.com/codeon/p/6123863.html



如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)

上篇文章说到接口安全的设计思路,如果没有看到上篇博客,建议看完再来看这个。

通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出。

对于安全也是相对的,下面我来根据安全级别分析

 

1.完全开放的接口

有没有这样的接口,谁都可以调用,谁都可以访问,不受时间空间限制,只要能连上互联网就能调用,毫无安全可言。

实话说,这样的接口我们天天都在接触,你查快递,你查天气预报,你查飞机,火车班次等,这些都是有公共的接口。

我把这称之为裸奔时代。代码如下:

复制代码
/// <summary>
        /// 接口对外公开
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("NoSecure")]
        public HttpResponseMessage NoSecure(int age)
        {
            var result = new ResultModel<object>()
            {
                ReturnCode = 0,
                Message = string.Empty,
                Result = string.Empty
            };

            var dataResult = stulist.Where(T => T.Age == age).ToList();
            result.Result = dataResult;

            return GetHttpResponseMessage(result);
        }
复制代码

 

2.接口参数加密(基础加密)

 你写个接口,你只想让特定的调用方使用,你把这些调用的人叫到一个小屋子,给他们宣布说我这里有个接口只打算给你们用,我给你们每人一把钥匙,你们用的时候拿着这把钥匙即可。

这把钥匙就是我上文说到的参数加密规则,有了这个规则就能调用。

这有安全问题啊,这里面的某个成员如果哪个不小心丢了钥匙或者被人窃取,掌握钥匙的人是不是也可以来掉用接口了呢?而且他可以复制很多钥匙给不明不白的人用。

相当于有人拿到了你的请求链接,如果业务没有对链接唯一性做判断(实际上业务逻辑通常不会把每次请求的加密签名记录下来,所以不会做唯一性判断),就会被重复调用,有一定安全漏洞,怎么破?先看这个场景的代码,然后继续往下看!

复制代码
/// <summary>
        /// 接口加密
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("SecureBySign")]
        public HttpResponseMessage SecureBySign([FromUri]int age, long _timestamp, string appKey, string _sign)
        {
            var result = new ResultModel<object>()
            {
                ReturnCode = 0,
                Message = string.Empty,
                Result = string.Empty
            };

            #region 校验签名是否合法
            var param = new SortedDictionary<string, string>(new AsciiComparer());
            param.Add("age", age.ToString());
            param.Add("appKey", appKey);
            param.Add("_timestamp", _timestamp.ToString());

            string currentSign = SignHelper.GetSign(param, appKey);

            if (_sign != currentSign)
            {
                result.ReturnCode = -2;
                result.Message = "签名不合法";
                return GetHttpResponseMessage(result);
            }
            #endregion

            var dataResult = stulist.Where(T => T.Age == age).ToList();
            result.Result = dataResult;

            return GetHttpResponseMessage(result);
        }
复制代码

 

3.接口参数加密+接口时效性验证(一般达到这个级别已经非常安全了)

继上一步,你发现有不明不白的人调用你的接口,你很不爽,随即把真正需要调用接口的人又叫来,告诉他们每天给他们换一把钥匙。和往常一样,有个别伙伴的钥匙被小偷偷走了,小偷煞费苦心,经过数天的踩点观察,准备在一个月黑风高的夜晚动手。拿出钥匙,捣鼓了半天也无法开启你的神圣之门,因为小偷不知道你天天都在换新钥匙。

小偷不服,经过一段时间琢磨,小偷发现了你们换钥匙的规律。在一次获得钥匙之后,不加思索,当天就动手了,因为他知道他手里的钥匙在第二天你更换钥匙后就失效了。

结果,小偷如愿。怎么破?先看这个场景的代码,然后继续往下看!

  View Code

 

4.接口参数加密+时效性验证+私钥(达到这个级别安全性固若金汤)

 继上一步,你发现道高一尺魔高一丈,仍然有偷盗事情发生。咋办呢?你打算下血本,给每个人配一把钥匙的基础上,再给每个人发个暗号,即使钥匙被小偷弄去了,小偷没有暗号,任然无法如愿。即使小偷真正的如愿,这样也很容易定位是谁的暗号泄漏问题,找到问题根源,只需要给当前这个人换下钥匙就行了,不用大动干戈。

但这个并不是万无一失的,因为钥匙和暗号毕竟还有可能被小偷搞到。代码如下:

  View Code

 

5.接口参数加密+时效性验证+私钥+Https(我把这个级别称之为金钟罩,世间最安全莫过于此)

继上一步,我们给传输机制改为Https,这下小偷彻底懵逼了。那么问题来了,Https咋玩儿呢?可以在本地搭个环境,参考此文:http://www.cnblogs.com/naniannayue/archive/2012/11/19/2776948.html

 

另:本文的接口是用的MVC WebAPI写的,完全基于RESTful标准。如对此不是特别了解可以参考此文:http://www.cnblogs.com/landeanfen/p/5501490.html

 

完整demo下载

 

注:demo不能直接运行,需要把两个web项目配置到iis中,api代表接口提供方,他的主域需要配置到business的webconfig中,在浏览器地址栏分别请求business中的各个调用接口方法来实现接口调用。

1、如果想验证参数错误,需要在请求接口时打个断点把接口url取出,篡改url参数,然后在浏览器中模拟请求

2、如果想验证接口超时,需要在请求接口时打个断点把接口url取出,然后等到了超时时间,然后在浏览器中模拟请求

3、如果想验证私钥错误,需要在请求接口时打个断点把接口url取出,然后修改business的私钥配置,然后在浏览器中模拟请求

从明文传输到全栈加密:HTTPS、TLS协议与数据安全实践 在网络通信中,数据传输安全是信息安全的基础。其核心原理在于,传统的HTTP等协议在默认情况下以明文形式传输数据,这意味着敏感信息在网络传输过程中可能被截获和窥视。为了解决这一问题,TLS/SSL协议应运而生,它通过非对称加密交换密钥,再使用对称加密保护数据传输,从而构建了安全的通信通道。这项技术的核心价值在于为互联网通信提供了机密性、完整性和身份认证,是构建可信网络环境的基石。其应用场景广泛,从网页浏览、在线支付到API接口调用,凡是涉及敏感数据交换的环节都离不开它。本文聚焦于**明文传输漏洞**这一普遍但 阅读详情

相关推荐

阿里云短信服务与RSA加密技术实践指南

阿里云短信服务是一种高稳定性的云通信服务,支持多种短信场景,如验证、通知、营销等。它为开发者提供了一系列API,使得在应用程序中集成短信功能变得简单。使用阿里云短信服务,开发者可以通过API调用实现各种业务需求,比如验证码发送、会员通知、优惠活动提醒等。RSA加密技术的核心在于一对密钥:公钥(Public Key)和私钥(Private Key)。这对密钥是通过特定的数学算法生成的,它们是数学上互相关联的两个大素数的乘积。

weixin_35391606的博客 724

API接口鉴权及加密

前言 在为移动端做API接口时,Java服务器端对接口一般需要做两种处理。 1.对请求的接口在interceptor 做authorize鉴权 2.对请求过来的参数进行加密校验,防止参数在传递过程中被篡改。 鉴权 鉴权方式我所使用的到的基本上目前有以下三种: 1.session 2.cookie 3.oauth2.0 对于这三种方式,以后细讲下。在此不再多说。 加密 对于传输

mingjie1212的博客 2万+

API接口开发 dome源码 加密 鉴权验证

开发安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)4种加密方式的Dome

如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)- 续(附demo)(转)...

转载地址:http://www.cnblogs.com/codeon/p/6123863.html 上篇文章说到接口安全的设计思路,如果没有看到上篇博客,建议看完再来看这个。 通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出。 对于安全也是相对的,下面我来根据安全级别分析   1.完全开放的接口 有没有这样的接口,谁都...

weixin_33766168的博客 145

api验证接口参数加密+时效性验证+私钥+Https

接口参数加密+时效性验证+私钥+Https

Vue3项目实战:集成h265webjs打造高性能Web端H.265播放器

本文详细介绍了如何在Vue3项目中集成h265webjs库,构建高性能的Web端H.265播放器。通过封装播放器管理模块、利用Vue3组合式API优雅管理生命周期,并提供了从环境准备、核心集成到进阶优化的完整实战指南,有效解决了浏览器原生不支持H.265解码的难题,显著降低视频流带宽占用。

weixin_29016833的博客 363

如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)

上篇文章说到接口安全的设计思路,如果没有看到上篇博客,建议看完再来看这个。 通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出。 对于安全也是相对的,下面我来根据安全级别分析 1.完全开放的接口 有没有这样的接口,谁都可以调用,谁都可以访问,不受时间空间限制,只要能连上互联网就能调用,毫无安全可言。 实话说,这样的接口我...

Lansonli(蓝深李)的博客 1701

使用vcpkg快速安装opencascade并自动配置部署开发环境

广泛的开源库:vcpkg 提供了上千个流行的 C++ 开源库,用户可以通过简单的命令安装和集成这些库,包括 Boost、OpenCV、SQLite、fmt 等。确保包版本一致性:通过 vcpkg.json 文件,开发者可以指定依赖的库版本,确保项目在不同环境下的构建结果一致,避免由于依赖库版本不一致而导致的构建问题。强大的社区支持:Vcpkg 是开源项目,拥有活跃的社区和微软团队的支持,提供了稳定的更新和问题修复。快速更新:Vcpkg 社区活跃,库的更新速度较快,开发者可以迅速获得库的最新版本。

loujiand的博客 2293

如何写出安全的API接口?接口参数加密签名设计思路

开发中经常用到接口,尤其是在面向服务的soa架构中,数据交互全是用的接口。                几年以前我认为,我写个接口,不向任何人告知我的接口地址,我的接口就是安全的,现在回想真是too young,too simple。但凡部署在广域网的应用程序,随随便便的好多工具可以根据ip或域名扫描应用程序的所有暴露的接口,进而分析参数,注入程序,分分钟被攻击。        

听风暖的博客 4万+

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

Spring Boot 安全 API 构建:加密解密功能的卓越实践

如 RSA(Rivest-Shamir-Adleman),使用公钥和私钥对,公钥用于加密,私钥用于解密,适合加密少量数据和密钥交换。如 AES(Advanced Encryption Standard),适用于大量数据的快速加密和解密,但需要安全地管理密钥。如果可能,实现端到端加密,确保数据在整个传输过程中都是加密的,只有发送方和接收方能够解密。将密钥存储在安全的地方,如密钥管理系统或加密的配置文件中。监控加密相关的异常情况,如加密失败、密钥泄露等,并及时采取措施。

Yaml4的博客 2204

保姆级教程:将YOLOv8模型封装成Docker镜像,集成到CVAT实现自动标注

本文提供了一份详细的保姆级教程,指导如何将YOLOv8模型封装成Docker镜像并集成到CVAT平台,实现自动化标注。通过环境配置、模型服务化封装、Docker镜像构建与优化、CVAT平台集成等步骤,帮助开发者高效完成计算机视觉项目的自动标注工作流,显著提升标注效率。

weixin_28692817的博客 414

BankAPI API接口实战教程:JSON-RPC与HTTPS POST的完整实现指南

BankAPI是一个为金融机构设计的安全分布式消息系统,支持银行间通过JSON-RPC和HTTPS POST协议进行加密消息传输。本教程将带你从零开始掌握BankAPI接口的核心功能与实战应用,轻松实现金融级安全通信。 ## 一、BankAPI系统架构概览 BankAPI基于PostgreSQL数据库和Apache Web服务器构建,采用三层架构设计确保金融信息传输的安全性和可靠性。系统核心由

gitblog_00602的博客 1094

贝叶斯时空模型-INLA-4

该文章中,会简化数学计算的过程,主要是针对,在有数据的基础上,如何应用贝叶斯时空模型,找出影响因素,绘制时间变化的空间分布预测图。上述中关键一步与前几期介绍的不一样的地方是,我们加入了n.group参数,用来指定年份,先看一下Year有多少年的,然后封装在s.index里面。在前述的内容中,我们介绍了,如何处理空间的数据,利用海拔高度预测降雨量的例子。建立好数据及mesh以后,我们现在写INLA公式,如果不考虑残差项,那就是固定效应,现在我们增加残差项,及空间与时间效应。这里的Mesh设定值为10,20。

学习中 2948

新能源汽车整车控制器(VCU)深度全解:硬件原理、工作流程、接口设计与高压安全实战

整车控制器(VCU,Vehicle Control Unit)是新能源纯电动、混动汽车的核心决策大脑,相当于汽车的“中枢神经系统”。它不直接驱动电机,却统筹电机控制器(MCU)、电池管理系统(BMS)、充电机(OBC)、DC/DC、空调、热管理、底盘等全部部件,负责驾驶意图解析、动力输出控制、高压上下电管理、故障安全保护、能量优化等关键任务。VCU所有设计均围绕车规级环境适应性、功能安全(ISO 26262)、实时性、高压安全性四大核心目标,与通用控制器完全不同。

优快云-新能源汽车研发测试专业博主 2479

WebAuthn-demo实战教程:构建企业级无密码身份验证系统

WebAuthn-demo是一个完整的WebAuthn工作坊演示项目,旨在帮助开发者快速掌握**无密码身份验证**技术的核心原理和实现方法。这个项目展示了如何使用Web Authentication API构建企业级的安全身份验证系统,彻底告别传统密码验证方式。 ## 🚀 WebAuthn无密码身份验证的优势 **WebAuthn**(Web Authentication)是现代浏览器支持的

gitblog_00331的博客 878

基于STM32XX的LCD液晶显示屏(HS19264G06A、驱动芯片:ST7525)驱动C程序设计

define USE_HW_SPI 1 // 1:使用硬件SPI, 0:使用软件模拟SPI。

myron6688的博客 234
上一篇: 如何写出安全的API接口?接口参数加密签名设计思路
下一篇: 奇门算法
hljjava
博客等级 码龄18年 7粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值