C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
好久没写文章了,突然间也不知道写什么好了一样,好多人可能以为我死了,写个文章分享一下、证明一下自己还在,很好的活着吧,刷个存在感。
放弃了很多娱乐、休闲、旅游、写文章、看书、陪伴家人,静心默默的用了接近2年多的时间突破了自己在.NET领域的最重大的软件项目建设记录。全程经历了公司的核心业务系统从无到有,几十套系统被有序的建设起来投入生产、上百人的研发队伍建设起来、影响全国几十万人日常办公的庞大的核心信息系统建设完毕、顺利进入维护完善阶段了。
很多人说.NET的各种好与坏。其实实实在在的开发几套大型系统,多用一些.NET技术了,开发效率高、简单好用、用实际证明一下.NET并不差、只是看是谁开发出来的。每行代码都精益求精的编写的性能卓越、功能稳定、大型系统也可以用.NET实现的(当然不是100%,没有绝对、能做到相对就可以了、毕竟有些后台处理java也有优势、短短1-2年招聘上百个.NET熟练精通的开发人员也不容易,有时候只能是2个开发语言的都招聘、分工配合、优势互补)。
最近遇到一个黑客、能把公司无线网络给劫持了、路由日志都能获取到了、SSL通讯也能劫持,而且还获取了单点登录的url,其实每个公司的网络管理员也可以得到这些核心机密信息,如何加强安全性、防止严重的信息泄露?
1:需要把单点登录的机制修改一下,不在url里传递OpenId、这个是后台系统获取用户信息的核心参数。
2:授权码,url,只能消费一次,就是截获了url,第2次也无法使用、无法通过链接进入系统、知道了单点登录的url也没大用。
3:由于公司有几十套系统、几十万用户,这么多数据如何存储?如何保证系统的性能?高效?而且需要最少的服务器资源?毕竟也需要进行成本控制。
Redis 可以设置一个key值的过期时间,例如5分钟不用就自动过期,不需要额外进行处理了。一个授权码发出去后,其实就是马上就会消费掉、考虑到系统卡、系统异常、系统复杂的情况,宽容一些,设置为5分钟不用就自动过期了,其实也可以设置为2-3分钟也问题不是很大,正常情况下一般是1-5秒内就消费掉了才正常。
Redis 的访问效率高、因为几十万人在用的系统,高峰期并发量非常大、平时可以达到1万多人实时在线、需要能有高效的读取效率、飞快的处理速度。
现有的底层的代码由于结构还是很完好、思路严谨,在这个基础上主要加了2个方法,一个是生成 AuthorizationCode 的方法,一个是消费 AuthorizationCode 的方法,然后提供一些对外的调用接口,当然为了提高安全性、还需要有签名验证码,防止数据中途被截取篡改。
虽然有很少精力旺盛、无聊的人会干这样的事情、或者根本没遇见过这个样的人、但是只要遇到了,被破坏了,人家就说你系统不行、不安全、不稳健,太弱智、太低档次、架构不合理、能力不行、很差劲、没入门、门外汉、蛮干、糟烂系统。
1 /// <summary> 2 /// 获取登录操作的验证码 3 /// code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。 4 /// </summary> 5 /// <param name="userInfo">用户信息</param> 6 /// <returns>操作码</returns> 7 public static BaseResult GetAuthorizationCode(BaseUserInfo userInfo) 8 { 9 BaseResult result = new BaseResult(); 10 11 if (ServiceUtil.VerifySignature(userInfo)) 12 { 13 // 产生一个授权码 14 string authorizationCode = Guid.NewGuid().ToString("N"); 15 // 设置缓存服务器,消费一次,5分钟过期。 16 using (var redisClient = PooledRedisHelper.GetTokenClient()) 17 { 18 // 2016-03-03 吉日嘎拉 让缓存早点儿失效 19 DateTime expiresAt = DateTime.Now.AddMinutes(5); 20 string key = "code:" + authorizationCode; 21 redisClient.Set(key, userInfo.OpenId, expiresAt); 22 } 23 result.ResultValue = authorizationCode; 24 result.Status = true; 25 result.StatusCode = Status.OK.ToString(); 26 result.StatusMessage = Status.OK.ToDescription(); 27 result.CreateSignature(userInfo); 28 } 29 30 return result; 31 }
1 /// <summary> 2 /// 验证授权码 3 /// 用掉一次后,一定要消费掉,确保只能用一次。 4 /// </summary> 5 /// <param name="userInfo">当前用户信息</param> 6 /// <param name="code">授权码</param> 7 /// <param name="openId">用户唯一识别码</param> 8 /// <returns>验证成功</returns> 9 public static bool VerifyAuthorizationCode(BaseUserInfo userInfo, string code, out string openId) 10 { 11 bool result = false; 12 openId = string.Empty; 13 14 if (userInfo != null && !ServiceUtil.VerifySignature(userInfo)) 15 { 16 return result; 17 } 18 19 using (var redisClient = PooledRedisHelper.GetTokenClient()) 20 { 21 // 2016-03-03 吉日嘎拉 让缓存早点儿失效 22 string key = "code:" + code; 23 openId = redisClient.Get<string>(key); 24 if (!string.IsNullOrEmpty(openId)) 25 { 26 result = true; 27 if (userInfo != null && !string.IsNullOrEmpty(userInfo.OpenId)) 28 { 29 result = userInfo.OpenId.Equals(openId); 30 } 31 } 32 redisClient.Remove(key); 33 } 34 35 return result; 36 }
以前版本的OpenId,也是有过期时间,但是把过期时间定为为16个小时了,黑客拿到OpenId后,在16个小时内什么事情都干出来了,而且可能还会进入其他系统里去了,安全性不高。然后把思路调整了一下,OpenId只在内部系统之间通讯用,外部通讯用 AuthorizationCode [Code],5分钟就过期,而且还只能用一次。只能进入一个子系统,无法进入全部子系统。虽然在理论上也存在被黑客劫持的概率、但是这个安全性比16个小时、能消费无数此次的还是安全很多很多、而且还能进入所有的系统的安全性比较下来,毛估估至少提高几十倍的安全性是有,从时间维度、可侵入的子系统范围上。
其实这个功能2年前就想修改、一直精力不够或者没足够重视安全性、年纪大了精力也有些不够了,毕竟整整38岁了,一直还在一线打拼写写核心代码。完成一些核心功能。
这次高度重视这个问题后,2天就代码写好了(功劳是前几天都睡足了),其实核心代码就是文章中的这几行代码。自己的系统被黑客攻克了或找出问题了,就得抓紧修改啊,不能有任何借口、马上、立刻、现在就修改过来。
当系统没几个人用时,单点登录怎么实现都可以、当系统每天有几十万人用时、就需要考虑:
1:需要多少的硬件设备?
2:需要消耗多少网络带宽?
3:需要多少存储设备?
4:算法需要的CPU计算量?
5:维护部署是否容易?
6:排查问题是否效率高?
7:子系统改造、衔接、难易程度如何?
8:安全程度如何?效率如何?
9:如何无缝的平稳过渡?
千万不能有投机心理、侥幸心理,踏踏实实把每个问题都处理好,优化好。
sso系统由于都是web的,无法post方式弹出一个网页、若能用post提交参数就安全多了、还可以加密、还可以传递很多参数,web的系统弹出页面都得是get方式的,欢迎在这方面有好思路的朋友门多沟通交流,本文章技术水平可能不够高深、本着分享的心态,写出来,欢迎大家留言,点评、Open的心态会让人提高很快、可以得到全行业人员的改进反馈。
开心生活每一天,再坚持2年写代码,我就写代码到40岁了,每天提高一点点、每天多认识几个好朋友、人生路会越来越宽、希望.NET的朋友圈越来越大吧。
写代码的大多 都是男人、看文章累了、休息一下眼睛,夏天了看看妹子吧,然后鼓足精神好好工作吧。
转载于:https://www.cnblogs.com/jirigala/p/5506022.html
C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享相关推荐
- 哈尔滨车牌摇号系统遭遇黑客攻击瘫痪
今天(6月20日),素有冰城美誉的哈尔滨本应于上午九点开始互联网机动车选号,不料遭黑客攻击,导致系统崩溃.为了防止大量号牌流入非法渠道,哈尔滨市公安交通警察支队接到上级机关通知决定暂缓开通互联网选号系 ...
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本
Linux系统防CC攻击自动拉黑IP增强版Shell脚本 文章目录 一.Shell代码 二.执行脚本 三.效果测试 四.附加说明 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原 ...
- Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)
这篇文章主要介绍了Linux系统防CC攻击自动拉黑IP增强版(Shell脚本),需要的朋友可以参考下 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存 ...
- 业务系统遭黑客攻击,深信达MCK解决服务器的最后一米安全问题
26日消息,据外媒报道,近日芬兰有一家心理治疗公司Vastaamo遭受黑客攻击,黑客在检测Vastaamo公司系统中的漏洞后,成功访问了该公司的数据库,窃取了数千名客户的数据. 据介绍,Vastaam ...
- 防黑客攻击手法之APP安全防护
在当今数字时代,移动应用的数量呈爆炸性增长,涵盖金融.电子商务.社区.医疗.房地产.工业等各行各业.在给人类带来便利的同时,也给黑客带来了可乘之机,移动黑产也越来越强大,他们的重点是从传统的PC网站转 ...
- 系统架构设计师面试java架构师 面试经验分享
一.[java架构师面试经验(广州) - 阿里巴巴] 面试过程: 面试问的技术底层是实现原理,高并发处理经验,工作中遇到的困难,以及计算机基础,网络基础数据结构,操作系统汇编语言计算机指令,消息中间件 ...
- 数据库安全防护措施之防黑客攻击
随着数据库的发展,数据库安全问题越来越受到业界人士的关注,学者们对数据库安全的定义也有不同,其中以其定义最为典型.它全面地描述了数据库的安全性,包括物理和逻辑数据库的完整性,元素的安全性,可审核性,访 ...
- 第一次经历黑客攻击服务器系统
晚上下班后有个陌生号码,电话我说请我去帮忙重装个服务器系统,因为上次也是我去的. 来到现场,以下是现场情况: server 2008 R2 32位, HP gen6服务器,蛮老的一款机子,连F10的智 ...
- web攻防教学防黑客攻击,预防网站攻击
最新文章
- mysql进程管理,MySQL管理
- 2021年春季学期-信号与系统-第十一次作业参考答案-第三小题
- Kali Linux渗透测试实战 2.2 操作系统指纹识别
- poj 1276 多重背包
- **PHP中替换换行符
- 一些常用的场景进行描述分析(权限管理、6个典型场景)
- 基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)
- 《诗经》诗无邪 —— 雅篇
- 【指纹识别】基于matlab GUI指纹识别门禁系统【含Matlab源码 1692期】
- ERROR - ORA-12560: TNS:protocol adapter error
- 遗传算法原理和Python实现
- CentOS 7 安装 Weadmin(ITOSS)
- 波波腾机器人_加入 Beta 版“机器人bobo” - TestFlight - Apple
- 系统技巧:电脑系统盘实用清理方案介绍
- jquery ui 主题_使用jQuery UI主题
- 事业单位工资计算机公积金计算,求问事业单位住房公积金如何计算
- 针对AirPods连接安卓手机时声音很小的解决方法
- 【C语言、C++基础编程题】【基础类题集】【平顶山学院ACM算法攻关部】
- (46)改变占空比与相移
- 2021高考成绩已出城市查询,查分时间已公布!高考结束后别急着浪,这些填志愿技巧考生需知晓...
热门文章
- WebStorm荣获InfoWorld2014年度科技奖
- hdu 2441(ACM(Array Complicated Manipulation))
- java知识点--基础篇(5)
- 如何发送Head请求
- statistics DATA in SHANGHAI
- excel里面如果有filter就不能直接sum,要复制转换一下
- 剑桥毕业之后创业的可能的在商学院的出路
- rhel5.5_Apache配置openssl支持https服务
- ssh 错误: ssh_exchange_identification
- 李开复:非常看好移动互联网的未来 --记CSDNCTO俱乐部李开复交流会