【BUG】url 参数 AES 加密和解密问题

原文地址: 【BUG】url 参数 AES 加密和解密问题

欢迎访问我的博客: http://blog.duhbb.com/

引言

bug 复盘, 让你少写 bug!

今天分析的是一个 url 参数加密解密的问题, 原因破坏了加密后的字符串导致解密失败.

参数的加密解密

情况描述

url 有个参数是地址, 比如 http://www.hello.com/, 请求这个 url 的时候试图把最后的正斜杠给 trim 掉.

现在有个安全问题需要将这个地址参数给加密, 而加密后的字符串尾部可能出现 /.

所以处理这个问题的时候一定要注意:

  • 加密之前可以 trim
  • 加密之后的字符串不能再 trim 了, 否则加密的结果不完整

同理

  • 解密之前的字符串是不能 trim 的
  • 解密之后的字符串可以 trim 的

为什么一直没有暴露出这个问题呢?

原因是, 加密的盐值是用了日期, 导致 / 的出现是个概率问题, 摸不准那天就触发了这个雷了.

问题原因

如上, 就是因为解密的时候没有判断是否启用了加密, 而先去 trim 然后在解密, 会导致如果加密字符串尾部有 /, 最后解密的加密字符串是不对的.

正斜杠 / 需要转义吗?

Chrome + SpringBoot 测试

?a=/sdfsdf/sdfsf&b=/ 这种组合的话在 Spring 中是可以获取到带 /ab 的值的.

%2F 或者 %2f 的话也可以获取 / 参数, emmmmm.

算了, 不编码了 / 也能凑合用, 所以是 chrome 帮助我们编码了吗?

wget + SpringBoot 测试

wget http://192.168.213.161:8088/xxx/main.htm?a=/adsf/asdfsf/asdfasdf/

也能收到正斜杠 /.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值