不知道大家公司对接口安全这块是怎么考量的,但是对于面向公网提供服务的产品来说,这个可以说是很致命的了。
那么,该如何设计一套比较安全的接口访问策略呢?
一、Token与签名
一般客户端和服务端的设计过程中,大部分分为有状态和无状态接口。一般用户登录状态下,判断用户是否有权限或者能否请求接口,都是根据用户登录成功后,服务端授予的token进行控制的。但并不是说有了token,请求就是安全的,那么万一token泄露了怎么办呢?谁都可以调用我的服务了吗?
就比如去银行取钱,需要用到银行卡。但不能因为你不小心把银行卡弄丢了,捡到的人就可以拿着你的银行卡去银行办理业务了。他们还需要对你的身份进行验证,你也要知道银行卡密码。
所以token只是用户权限以及会话的凭证,除了会话的凭证,我们也要校验请求的合法性,以防止token泄露而导致客户的损失。
而签名摘要计算则是用来进行请求合法性校验。经常同学们会把这两种搞混。以为使用token就是安全的。
二、签名计算设计
签名摘要的计算一般分为签名值和签名的key,signature生成方式如下:
signature = Base64(HMAC-SHA256(LOWER(MD5(key)), StringToSign))
2.1 签名字符串的设计
设计签名字符串时,我们要想好,我们要针对不同的攻击策略,设计什么样的请求头部
常用的签名字符串设计如下:
StringToSign = Content-MD5 + "\n"
+ CanonicalizedHeaders
CanonicalizedHeaders
构建方法如下:
1.以service为前缀的的Headers,但是不包括service-signature
,如下
-
service-nonce
:客户端生成32位随机字符串,所有客户端5分钟内不能重复,重复时平台回复nonce重复,客户端需要重新请求。 -
service-date
:请求生成的时间,与服务器本地时间差超过5分钟,认为鉴权失败。 -
service-session-id
:客户端会话id,用于本次登录后的所有请求会话标识。 -
service-client
:客户端信息,包括客户端类型、客户端版本、操作系统等。
2.Header名称全部小写,值前后应不包含空格
3.Header的名称和值之间用“:”相隔,组成一个完整的header
4.根据header名称的字符顺序,将header从小到大进行字典排序,每个header之后跟一个“\n”
StringToSign生成示例
eB5eJF1ptWaXm4bijSPyxw==\n
service-client:ewogICAgImRhdGEiOiB7CiAgICAgICAgImNsaWVudFR5cGUiOiAieHh4IiwKICAgICAgICAiY2xpZW50VmVyc2lvbiI6ICIzLjAiCiAgICB9Cn0=\n
service-date:2022-07-22T14:43:07Z\n
service-nonce:d36e316282959a9ed4c89851497a717f\n
service-session-id:0123456\n
2.3. 签名key设计
一般客户端请求的接口类型有三种,分别是有登录状态和无登录状态以及登录这个特殊接口。无登录状态前的接口都是服务为了提供能力而做的一些接口,相比而言都是提供通用能力的。不涉及客户个人信息相关。安全风险较小。
用户登录后的接口一般都是涉及到客户信息的接口,隐私泄露风险较大。因此对于每一种状态可采用不同的key值设计。讲风险降到最低。
2.3.1. 用户未登录签名key值
用户未登录时,平台提供通用能力,调用服务端接口时使用约定好的固定SK进行接口签名鉴权即可。固定SK由后台提供16位的随机字符串。
2.3.2. 用户登录签名key值
我们知道,所有在客户端和前端保存的key值永远不是最安全的,有可能被拆包而发现对应的加密SK,从而被不法分子破解,因此用户登录时,传输密码时,如果使用固定key,有可能body体被解开,密码被泄露的风险。
登录时用户会输入密码,而服务端也知道用户加密后的密码,那么使用用户输入的密码当做key则是最安全的方式。并且交互过程中不需要将用户密码放在body体重传到后端进行校验,只需校验签名的准确性即可。这样就可以极大的增加用户密码的安全性。
用户登录验证时会输入用户的密码,则登录时用户密码作为签名的key进行鉴权校验。加密key为:SHA256(LOWER(MD5(passwd)),salt)
,salt为用户的盐值,可以使用用户的手机号。
2.3.3. 用户登录签名key值
用户登录成功之后,所有接口都要有鉴权,为了每个用户安全起见,针对每个用户颁发自己的SK,登录成功后获取。这样客户端将sercet保存到内存中,可以有效防止SK泄露。
-
用户注册成功后,针对用户账户后台生成16位的sercet
-
用户登录成功后,后台返回用户的sercet
-
登录之后的接口鉴权使用sercet进行鉴权。
三、接口合法性校验流程
请求合法性校验流程如下:
![图片](https://img-
blog.csdnimg.cn/img_convert/fcc680fcb5f4893b98bc812a4b05b142.png)
1、首先对接口的请求头的nonce进行5分钟内是否重复的校验,可以有效的防止重放攻击。
2、然后对时间戳进行校验,防止客户端时间篡改攻击。
3、之后对请求的MD5进行校验,防止对请求体进行篡改。
4、最后将nonce,date,md5以及session进行组合签名校验,校验签名值是否成功。可以有效防止上面单一修改验证通过,但签名值校验不通过的问题。
基于以上的校验,基本上可以防止大部分攻击场景。当然为了更加安全,你还可以增加黑白名单限制、接口访问限流、用户常用设备绑定、用户异地登录等保护用户财产的安全性设计。
好了,不知道这篇文章大家对安全的设计是否有了更深刻的理解呢?
大家有没有更好地接口安全设计方案,可以一起聊一聊哈。
最后说一句(求关注!别白嫖!)
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号: woniuxgg ,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!
题外话
初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:
2023届全国高校毕业生预计达到1158万人,就业形势严峻;
国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。
一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。
6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。
2022届大学毕业生月收入较高的前10个专业
本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。
具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
网络安全行业特点
1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!
2、人才缺口大,就业机会多
2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
行业发展空间大,岗位非常多
网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…
职业增值潜力大
网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。
随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。
从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!