C#使用ServiceStack.Redis通过密码连接Redis
2023-09-11 14:16:28 时间
1.前言
最近系统被国内行业某龙头企业采用准备本地化部署,但是在操作Redis方面代码里面一直有个隐患,可能过不了该企业的网络安全扫描,所以花了半天的时间对该问题进行了深究。
一直以来我们只是对Redis的使用端口做了控制,局域网内免密码操作的Redis,但是免密操作总是存在风险,但是如何使用ServiceStack.Redis通过密码连接Redis?
2.正题
ServiceStack.Redis在4.0之后需要商用授权,而我们又使用的是很久的版本2.2,这个版本的ServiceStack.Redis在进行newRedisClient时候并没有提供可以传入密码参数的方法。
很是费解,无奈开始对源码进行分析,我这里使用了ILSpy.exe工具将ServiceStack操作Redis的几个dll都添加了进去开始分析,找到我们在初始化Redis操作的RedisClient类
我们使用的是这个方法进行实例化RedisClient的
public RedisClient(string host, int port)
: base(host, port)
{
Init();
}
随后找到了RedisNativeClient类,RedisClient的父类
一顿源码阅读后,找到了如何连接Redis的方法
这里有行代码:
if (Password != null)
{
SendExpectSuccess(Commands.Auth, Password.ToUtf8Bytes());
}
如果密码不为null的时候会通过密码进行鉴权,而Password又是RedisNativeClient类的公共属性,所以我们只需要在实例化Redis后给RedisNativeClient的Password属性进行赋值即可
所以,我在实例化Redis后对是否需要登录密码赋值进行了判断,如果实例化的时候传入了非空的密码,我认为前端调用的时候需要密码进行鉴权,这个时候就把传入的密码对RedisNativeClient的Password进行赋值
最后完成了使用旧版本的ServiceStack.Redis,也可以进行密码操作。
3.总结
分析了一圈其实就两行代码:
//判断密码是否为空
if (!string.IsNullOrEmpty(token.FRedisPsd) && Redis.Password == null)
{
//不为空,赋值
Redis.Password = token.FRedisPsd;
}
相关文章
- redis集群与分片(2)-Redis Cluster集群的搭建与实践
- redis实战笔记(5)-第5章 使用 Redis构建支持程序
- redis实战笔记(3)-第3章 Redis命令
- 零散逻辑验证不再烦恼:基于Python和Redis的实践
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
- 【面试】吃透了这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏) c#自定义Attribute获取接口实现 纯JS ajax 聊聊DataTable下载 二进制数据的序列化反序列化和Json的序列化反序列化的重要区别
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)
- 【卷土重来之C#学习笔记】(二)c#编程概述
- PHP+Redis 定长队列(redis.call)
- Spring Cache + Redis;用Spring Cache的注解自动管理Redis缓存
- NoSQL and Redis
- redis中setbit的用法
- 【Redis】redis安装与客户端redis-cli的使用(批量操作)
- Redis超详细入门(图文结合)原来redis这么简单
- windows redis 取消auth验证(包含linux)
- 【Redis数据结构 序】使用redis-py操作Redis数据库
- redis常用数据类型之字符串
- Ubuntu 18 + Redis安装
- 【redis使用全解析】常见运维操作
- Redis基础:特点(内存运行、原子性、持久化)、5种基本数据类型与3种特殊数据类型、redis命令、发布订阅机制、事务(单条命令原子性事务不是原子性)、数据备份与恢复、安全
- Spring Boot 2 + Redis例子
- 曹工说Redis源码(6)-- redis server 主循环大体流程解析
- C#的StackExchange.Redis实现订阅分发模式