redis存的数据设置了有效期,没到有效期自动删除的问题解决历程

描述:项目中用到了redis,存的数据设置了有效期为一天,但是没过一会儿redis中存的该数据莫名其妙的就删除了。我用的是docker容器,下面是找问题以及解决问题的过程。

1,进到redis容器

docker exec -it 容器ID /bin/bash
2,链接reids

redis-cli
3,进入到 redis 监控模式

monitor


也可以把监控信息输出到文件中:redis-cli monitor >/data/logs/redis/log0326.txt

然后就看到了输出了日志如下,可以看到居然执行了flushall命令 

因为redis没有设置密码,是受到了木马的攻击,阔怕(其实也是小场面)。

此木马脚本分为三个部分:init.sh、is.sh、rs.sh,首先黑客拿到我们的 Redis 链接,因为没有密码直接就连接到了 Redis,然后利用 Redis 未授权访问漏洞执行 Redis 命令:

init.sh 主要功能是:关闭selinux、杀掉别人的挖矿进程、杀掉CPU占用过高的进程,如果是自己就跳过、修改破坏系统命令、自己造一个下载器downloads()函数、解锁和加锁定时任务、添加挖矿技术任务、设置SSH免密登陆、下载执行矿机挖矿程序、关闭防火墙、清除日志、感染已知的免密机器、下载执行is.sh。

is.sh 主要功能是:下载masscan扫描器、下载pnscan扫描器、安装 redis 用于创建 redis 未授权访问的漏洞、执行 rs.sh。

rs.sh 主要功能是:开放 6379 端口、自动化利用redis未授权写入定时任务、利用 pnscan 扫描b段IP 6379 端口、利用 masscan 进行扫描端口。

这个漏洞只危害安装了Redis并且没有设置密码的机器

所以我就把redis设置了密码

1,进到redis容器

docker exec -it 容器ID /bin/bash
2,链接redis客户端

redis-cli
3,查看现有的redis密码:

config get requirepass
4,设置 redis 密码:

config set requirepass ****(****为你要设置的密码)
5,设置完密码之后再执行第3步查看密码可能会报以下错,则使用 auth 密码 来认证密码

(error) NOAUTH Authentication required.错误
auth 你的密码
设置完之后就完美解决了;

docker-compose设置redis密码:

command: redis-server --port 6379 --requirepass {密码}  --appendonly yes
# Redis服务容器
  redis:
    build:
      context: ../docker-file/redis
    container_name: redis
    #command: redis-server /usr/local/bin/redis.conf
    command: redis-server --port 6379 --requirepass ieksa%*(jisw%(*  --appendonly yes
    restart: always
    volumes:
      - ../docker-data/redis:/data
      - ../docker-file/redis/redis.conf:/etc/redis/redis.conf
    ports:
      - 6379:6379
    networks:
      - backend

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring Boot中将Token保Redis设置有效期的代码可以如下所示: 首先,确保已经配置好Redis的连接信息和依赖项。 1. 创建一个TokenUtil工具类,用于生成和验证Token: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; import java.util.Map; @Component public class TokenUtil { @Value("${jwt.secret}") private String secret; @Value("${jwt.expiration}") private Long expiration; public String generateToken(String username) { Map<String, Object> claims = new HashMap<>(); claims.put("sub", username); claims.put("created", new Date()); return Jwts.builder() .setClaims(claims) .setExpiration(generateExpirationDate()) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } public String getUsernameFromToken(String token) { String username; try { Claims claims = getClaimsFromToken(token); username = claims.getSubject(); } catch (Exception e) { username = null; } return username; } private Date generateExpirationDate() { return new Date(System.currentTimeMillis() + expiration * 1000); } private Claims getClaimsFromToken(String token) { return Jwts.parser() .setSigningKey(secret) .parseClaimsJws(token) .getBody(); } } ``` 2. 创建一个TokenService服务类,用于操作Redis储Token: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @Service public class TokenService { private static final String REDIS_KEY_PREFIX = "token:"; @Autowired private RedisTemplate<String, String> redisTemplate; public void saveToken(String username, String token, Long expiration) { String key = REDIS_KEY_PREFIX + username; redisTemplate.opsForValue().set(key, token, expiration, TimeUnit.SECONDS); } public String getToken(String username) { String key = REDIS_KEY_PREFIX + username; return redisTemplate.opsForValue().get(key); } public void deleteToken(String username) { String key = REDIS_KEY_PREFIX + username; redisTemplate.delete(key); } } ``` 在上述代码中,TokenUtil类用于生成和验证Token,TokenService类用于将Token保Redis中,并提供获取和删除Token的方法。 注意,在使用上述代码之前,需要在配置文件中设置Redis的连接信息、JWT的密钥和Token的有效期。 这样,当用户登录成功后,可以使用TokenUtil生成Token,并通过TokenService将Token保Redis中,设置对应的有效期。在后续需要验证用户身份的请求中,通过TokenService从Redis中获取Token,并使用TokenUtil验证Token的有效性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值