没有合适的资源?快使用搜索试试~ 我知道了~
springboot设计.docx
0 下载量 164 浏览量
2024-11-18
22:40:11
上传
评论
收藏 644KB DOCX 举报
温馨提示
一.技术简介此聊天软件系统是基于SpringBoot+MybatisPlus+uniapp+uview2+stomp等更多优秀组件及前沿技术开发,注释丰富,代码简洁,开箱即用,兼容H5+小程序+APP,及其适合入门学习1.前端技术栈插件版本用途uview-ui^2.0.31多平台快速开发的UI框架uni-simple-router^2.0.7专为uniapp打造的路由器moment^2.29.4js工具库mescroll-uni^1.3.7上拉加载下拉刷新插件@uni-ui/code-ui^1.4.8二维码生成工具2.后端技术栈插件版本用途jdk1.8java环境lombok1.18.16代码简化插件maven3.6.3包管理工具druid1.1.24JDBC组件hutool5.7.20Java工具类库mybatis-plus3.4.1基于 MyBatis 增强工具pinyin4j2.5.1拼音组件库mysql8.0 / 5.7数据库二.主要功能1.登录注册模块2.消息模块3.好友模块4.群组模块5.个人中心模块三.文章目录
资源推荐
资源详情
资源评论
API 接口暴露问题
由于提供给第三方服务调用的 API 接口需要暴露在外网中,并且接口上提供了具体的请求
地址和请求参数,那么,接口就有可能被人抓包拦截并对请求参数进行修改后再次发起请
求 ,这样一来可能会被盗取信息,二来服务器可能会受到攻击。
img
为了防止这种情况发生,需要采取安全机制措施进行防范,方法有多种,比如:
� 接口采用 https 的传输方式,https 传输的数据是经过了加密的,可以保证不被篡
改;
� 项目后台采用安全的验证机制,比如采用参数加密 和请求时间限制 来防止参数篡
改和二次投放(*我们以这种方式为案例进行讲解 *)。
防止接口参数篡改
为了防止参数被抓包篡改参数,我们可以对参数进行加密。具体方式如下:
� 前端使用约定好的秘钥 对传输参数进行加密,得到签名值 sign1,并且将签名值存
入 headers,然后发送请求给服务端;
� 服务端接收客户端的请求后,在过滤器 中使用约定好的秘钥对请求的参数再次进行
签名,得到签名值 sign2;
� 最后对比 sign1 和 sign2 的值,如果相同,则认定为合法请求,如果不同,则说明
参数被篡改,认定为非法请求。
防止接口重投放
重投放 或者叫二次投放 ,指的是接口被人拦截篡改参数后重新发送请求。防止重投放的方
案是:基于 timestamp 对参数进行签名 ,具体的实现是:
� 每次 http 请求,headers 都加上 timestamp 时间戳,并且 timestamp 和请求的参
数一起进行数字签名;
� 服务器收到请求之后,先判断时间戳参数与当前时间是否超过了 60s(
这个可以自
定义配置,一般黑客从抓包到重放的耗时远远超过了
60s),如果超过了则提示签名
过期;
� 如果黑客修改了 timestamp 参数,则 sign 参数对应的数字签名就会失效,因为黑
客不知道签名秘钥,没有办法生成新的数字签名(前端一定要保护好秘钥和加密算
法 )。
当然也有一些其他方案,比如:数据库唯一主键 + 乐观锁;防重 Token 令牌,跳转前端表
单页面时,设置一个 UUID 作为 token,并设置在表单隐藏域。
同时,前端页面表提交钮置灰不可点击 + js 节流防抖。
核心思路代码设计
代码思路主要是通过创建过滤器,对参数进行签名验证,核心过滤器代码如下:
@Component
@Slf4j
public class SignAuthFilter implements Filter {
@Autowired
private SignAuthProperties signAuthProperties;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("初始化 SignAuthFilter...");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) thro
ws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
// 过滤不需要签名验证的地址
String requestUri = httpRequest.getRequestURI();
for (String ignoreUri : signAuthProperties.getIgnoreUri()) {
if (requestUri.contains(ignoreUri)) {
log.info("当前 URI 地址:" + requestUri + ",不需要签名校验!");
chain.doFilter(request, response);
return;
}
}
// 获取签名和时间戳
String sign = httpRequest.getHeader("Sign");
String timestampStr = httpRequest.getHeader("Timestamp");
if (StringUtils.isEmpty(sign)) {
responseFail("签名不能为空", response);
return;
}
if (StringUtils.isEmpty(timestampStr)) {
responseFail("时间戳不能为空", response);
return;
}
// 重放时间限制
long timestamp = Long.parseLong(timestampStr);
if (System.currentTimeMillis() - timestamp >= signAuthProperties.getTimeout()*1000) {
responseFail("签名已过期", response);
return;
}
// 校验签名
Map<String, String[]> parameterMap = httpRequest.getParameterMap();
if (SignUtils.verifySign(parameterMap, sign, timestamp)) {
chain.doFilter(httpRequest, response);
} else {
responseFail("签名校验失败", response);
}
}
/**
* 响应错误信息
*/
private void responseFail(String msg, ServletResponse response) throws IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
PrintWriter out = response.getWriter();
out.println(msg);
out.flush();
out.close();
}
@Override
public void destroy() {
log.info("销毁 SignAuthFilter...");
}
}
这里我们可以在 yml 配置文件中进行配置重放超时时间和不过滤的 URI 地址:
sign:
#
签名超时时间
timeout: 60
#
允许未签名访问的
url
地址
ignoreUri:
- /swagger-ui.html
- /v2/api-docs
然后编写配置类:
@Data
@ConfigurationProperties(prefix = "sign")
public class SignAuthProperties {
/**
* 签名超时时间
*/
private Integer timeout;
/**
* 允许未签名访问的 url 地址
*/
private List<String> ignoreUri;
}
剩余12页未读,继续阅读
资源评论
微信公众号:数模0error
- 粉丝: 7241
- 资源: 378
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 全自动冲孔机设备工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 球体自动发射机机械设计结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 先下载此软件,不要管名字.apk.1
- 通过Starter修改项目版本和设备版本的具体方法(英文版).pdf
- 毕设和企业适用springboot智慧城市管理类及机器人平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧教育平台类及金融交易平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧教育平台类及教学资源共享平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及酒店管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及金融数据分析平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及客户服务平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及客户服务智能化平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及区块链平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及区块链交易平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及人工智能客服平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及食品配送平台源码+论文+视频.zip
- 毕设和企业适用springboot智慧城市管理类及团队协作平台源码+论文+视频.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功