API接口的安全设计验证:ticket,签名,时间戳

这篇具有很好参考价值的文章主要介绍了API接口的安全设计验证:ticket,签名,时间戳。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据,我主要围绕时间戳,token,签名三个部分来保证API接口的安全性

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

1.用户成功登陆站点后,服务器会返回一个token,用户的任何操作都必须带了这个参数,可以将这个参数直接放到header里。

2.客户端用需要发送的参数和token生成一个签名sign,作为参数一起发送给服务端,服务端在用同样的方法生成sign进行检查是否被篡改。

3.但这依然存在问题,可能会被进行恶意无限制访问,这时我们需要引入一个时间戳参数,如果超时即是无效的。

4.服务端需要对token,签名,时间戳进行验证,只有token有效,时间戳未超时,签名有效才能被放行。

开放接口

没有进行任何限制,简单粗暴的访问方式,这样的接口方式一般在开放的应用平台,查天气,查快递,只要你输入正确对应的参数调用,即可获取到自己需要的信息,我们可以任意修改参数值。

/*

  • Description: 开放的接口

  • @author huangweicheng

  • @date 2020/12/21

*/

@RestController

@RequestMapping(“/token”)

public class TokenSignController {

@Autowired

private TokenSignService tokenSignService;

@RequestMapping(value = “openDemo”,method = RequestMethod.GET)

public List openDemo(int personId){

return tokenSignService.getPersonList(personId);

}

}

Token认证获取

用户登录成功后,会获取一个ticket值,接下去任何接口的访问都需要这个参数。我们把它放置在redis内,有效期为10分钟,在ticket即将超时,无感知续命。延长使用时间,如果用户在一段时间内没进行任何操作,就需要重新登录系统。扩展:记一次token安全认证的实践

@RequestMapping(value = “login”,method = RequestMethod.POST)

public JSONObject login(@NotNull String username, @NotNull String password){

return tokenSignService.login(username,password);

}

登录操作,查看是否有这个用户,用户名和密码匹配即可成功登录。

/**

  • Description:验证登录,ticket成功后放置缓存中,

  • @param

  • @author huangweicheng

  • @date 2020/12/31

*/

public JSONObject login(String username,String password){

JSONObject result = new JSONObject();

PersonEntity personEntity = personDao.findByLoginName(username);

if (personEntity == null || (personEntity != null && !personEntity.getPassword().equals(password))){

result.put(“success”,false);

result.put(“ticket”,“”);

result.put(“code”,“999”);

result.put(“message”,“用户名和密码不匹配”);

return result;

}

if (personEntity.getLoginName().equals(username) && personEntity.getPassword().equals(password)){

String ticket = UUID.randomUUID().toString();

ticket = ticket.replace(“-”,“”);

redisTemplate.opsForValue().set(ticket,personEntity.getLoginName(),10L, TimeUnit.MINUTES);

result.put(“success”,true);

result.put(“ticket”,ticket);

result.put(“code”,200);

result.put(“message”,“登录成功”);

return result;

}

result.put(“success”,false);

result.put(“ticket”,“”);

result.put(“code”,“1000”);

result.put(“message”,“未知异常,请重试”);

return result;

}

Sign签名

把所有的参数拼接一起,在加入系统秘钥,进行MD5计算生成一个sign签名,防止参数被人恶意篡改,后台按同样的方法生成秘钥,进行签名对比。

/**

  • @param request

  • @return

*/

public static Boolean checkSign(HttpServletRequest request,String sign){

Boolean flag= false;

//检查sigin是否过期

Enumeration<?> pNames = request.getParameterNames();

Map<String, String> params = new HashMap<String, String>();

while (pNames.hasMoreElements()) {

String pName = (String) pNames.nextElement();

if(“sign”.equals(pName)) continue;

String pValue = (String)request.getParameter(pName);

params.put(pName, pValue);

}

System.out.println(“现在的sign–>>” + sign);

System.out.println(“验证的sign–>>” + getSign(params,secretKeyOfWxh));

if(sign.equals(getSign(params, secretKeyOfWxh))){

flag = true;

}

return flag;

}

重复访问

引入一个时间戳参数,保证接口仅在一分钟内有效,需要和客户端时间保持一致。

public static long getTimestamp(){

long timestampLong = System.currentTimeMillis();

long timestampsStr = timestampLong / 1000;

return timestampsStr;

}

需要跟当前服务器时间进行对比,如果超过一分钟,就拒绝本次请求,节省服务器查询数据的消耗

拦截器

每次请求都带有这三个参数,我们都需要进行验证,只有在三个参数都满足我们的要求,才允许数据返回或被操作。

public class LoginInterceptor implements HandlerInterceptor {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

分享

1、算法大厂——字节跳动面试题

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

2、2000页互联网Java面试题大全

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

3、高阶必备,算法学习

API接口的安全设计验证:ticket,签名,时间戳,程序员,安全,状态模式

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
、算法大厂——字节跳动面试题**

[外链图片转存中…(img-BUPlPIEs-1713063480516)]

2、2000页互联网Java面试题大全

[外链图片转存中…(img-tzdaoHdA-1713063480516)]

3、高阶必备,算法学习

[外链图片转存中…(img-sCJH2Y3q-1713063480516)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-859989.html

到了这里,关于API接口的安全设计验证:ticket,签名,时间戳的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

    一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网,而

    2024年04月29日
    浏览(92)
  • PHP实践:用openssl打造安全可靠的API签名验证系统

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🏆另有专栏PHP入门基础教程,希望各位大佬

    2024年02月14日
    浏览(40)
  • 如何设计安全可靠的开放接口---之签名(sign)

    1. 如何设计安全可靠的开放接口—之Token 2. 如何设计安全可靠的开放接口—之AppId、AppSecret 3. 如何设计安全可靠的开放接口—之签名(sign) 4. 如何设计安全可靠的开放接口【番外篇】—关于MD5应用的介绍 5. 如何设计安全可靠的开放接口—还有哪些安全保护措施 6. 如何设计安全

    2024年02月10日
    浏览(47)
  • 【Sa-Token】SpringBoot 整合 Sa-Token 快速实现 API 接口签名安全校验

    在涉及跨系统接口调用时,我们容易碰到以下安全问题: 请求身份被伪造 请求参数被篡改 请求被抓包,然后重放攻击 sa-token api-sign 模块将帮你轻松解决以上难题。(此插件是内嵌到 sa-token-core 核心包中的模块,开发者无需再次引入其它依赖,插件直接可用) 假设我们有如

    2024年02月17日
    浏览(47)
  • API接口安全设计

    HTTP接口是互联网各系统之间对接的重要方式之一,使用HTTP接口开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享。 由于HTTP接口开放在互联网上,所以我们就需要有一定的安全措施来保证接口安全。 个人觉得安全措施大体来看主要

    2024年02月04日
    浏览(43)
  • API 接口怎样设计才安全?

    设计安全的API接口是确保应用程序和数据安全的重要方面之一。下面是一些设计安全的API接口的常见实践: 使用适当的身份验证机制,如OAuth、JWT或基本身份验证,以确保只有经过身份验证的用户可以访问API。 实施授权机制,例如使用令牌或角色/权限来限制用户对资源的访

    2024年02月03日
    浏览(47)
  • 如何设计一个安全的API接口详解

    前言 在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?

    2024年04月13日
    浏览(41)
  • Android开发规范:API接口安全设计规范

    书籍购买地址:京东 当当 天猫 API接口设计系列文章 Android开发规范:API接口安全设计规范 Android开发规范:API接口通用设计规范 文章目录 防篡改 防重放 Https APP的数据来源就是API接口,所以API接口对于APP的意义来说不言而喻。 设计API接口最重要的考虑点就是安全机制。 我们

    2024年04月09日
    浏览(41)
  • JWT VS OAuth2, 如何设计一个安全的API接口?

    Client Profile客户端描述 OAuth2框架也指定了集中客户端描述,用来表示应用程序的类型: Web应用 用户代理 原声应用 Authorization Grants认证授权 认证授权代表资源拥有者授权给客户端应用程序的一组权限,可以是下边几种形式: 授权码 隐式授权 资源拥有者密码证书 客户端证书

    2024年04月11日
    浏览(43)
  • 程序员不得不知道的 API 接口常识

    1、初识 API 接口 记得在我初学 web 开发的时候,后端框架相关的教程基本都会教学生写渲染模版(不分语言),也就是说后端返回的是整个网页的数据,浏览器只负责渲染。 一般这类模版在后端都会对应一个路由,比如前端想登入一个看用户信息的页面,在 url 中输入的访问

    2024年02月01日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包