• redis安全防护


    1、跨站点请求伪造

    漏洞描述:构建一个地址,比如说是删除某个博客网站博客的链接,然后诱使已经登录过该网站的用户点击恶意链接,可能会导致用户通过自己的手将曾经发布在该网站的博客在不知情的情况下删除了。这种构建恶意链接,假借受害者的手造成损失的攻击方式就叫CSRF-跨站点请求伪造

    修复建议:验证“Referer”头的值,并对每个提交的表单使用one-time-nonce

    实施操作

    1.工作台、前端模块配置及后端模块的application.properties文件里面的接口地址需要统一使用后端API接口的代理地址,保证API接口的IP和端口一样;

    2.配置nginx的配置文件nginx.conf里面的对应server节点,增加下面配置验证http请求的"Referer"头值,其中192.168.10.58修改为对应的服务器ip或者域名;

    valid_referers none blocked 192.168.10.58;
    if ($invalid_referer) {
    	return 403;
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


    2、Redis 未授权访问缺陷

    漏洞描述:

    redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。 Redis 安全模型的观念是: “请不要将Redis暴露在公开网络中, 因为让不受信任的客户接触到Redis是非常危险的” 。 Redis 作者之所以放弃解决未授权访问导致的不安全性是因为, 99.99%使用Redis的场景都是在沙盒化的环境中, 为了0.01%的可能性增加安全规则的同时也增加了复杂性, 虽然这个问题的并不是不能解决的, 但是这在他的设计哲学中仍是不划算的。 因为其他受信任用户需要使用Redis或者因为运维人员的疏忽等原因,部分Redis 绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,将会导致Redis服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。 利用Redis自身的相关方法,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器。

    修复建议:

    1. 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 127.0.0.1" ,去掉前面的"#"即可(Redis本来就是作为内存数据库,只要监听在本机即可);

    2. 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass" 设置复杂密码 (需要重启Redis服务才能生效);

    3. 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;

    4. 修改Redis默认端口,将默认的6379端口修改为其他端口;

    5. 禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度;

    6. Redis使用普通用户权限,禁止使用 root 权限启动Redis 服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;

    实施操作:

    1、按修复建议1、2、3、5、6实施操作即可,其中建议6的具体实施操作如下:

    step 1 查询Linux是否创建过redis用户和用户组:
    查询用户:

    cut -d : -f 1 /etc/passwd | grep redis
    
    • 1

    查询用户组:

    less /etc/group | grep redis
    
    • 1

    step 2 创建redis用户组合用户:

    创建redis用户组:

    groupadd redis
    
    • 1

    创建redis用户,并且不可登录:

    useradd -g redis -s /sbin/nologin -M redis
    
    • 1

    step 3 配置文件和文件夹的用户和用户组:

    chown -R redis:redis /data/redis/
    chown -R redis:redis /usr/local/redis/
    chown -R redis:redis /data/logs/redis/
    
    • 1
    • 2
    • 3

    step 4 杀死Redis进程:

    ps -ef | grep "redis-server" | grep -v grep | awk '{print $2}'| xargs kill -9
    
    • 1

    step 5 重启:

    sudo -u redis nohup /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf &
    
    • 1

    step 6 验证:

    ps -ef |grep redis
    
    • 1

    在这里插入图片描述

    2、修改应用的配置文件目录的platform.properties里面redis.password的值。

  • 相关阅读:
    eyb:Redis学习(3)
    初识Java 10-2 集合
    我居然被TransmittableThreadLocal框架作者评论了
    Shell基本语法--流程控制
    关于一些常见/好用的matlab工具箱介绍
    反射机制(Reflection)
    day03 mybatis
    C++ 多线程 线程安全队列设计
    计算机导论模拟试题一标准答案
    C#中类的使用介绍
  • 原文地址:https://blog.csdn.net/weixin_44953227/article/details/126050003