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 的方法,然后提供一些对外的调用接口,当然为了提高安全性、还需要有签名验证码,防止数据中途被截取篡改。
虽然有很少精力旺盛、无聊的人会干这样的事情、或者根本没遇见过这个样的人、但是只要遇到了,被破坏了,人家就说你系统不行、不安全、不稳健,太弱智、太低档次、架构不合理、能力不行、很差劲、没入门、门外汉、蛮干、糟烂系统。
/// <summary>
/// 获取登录操作的验证码
/// code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
/// </summary>
/// <param name="userInfo">用户信息</param>
/// <returns>操作码</returns>
public static BaseResult GetAuthorizationCode(BaseUserInfo userInfo)
{
BaseResult result = new BaseResult(); if (ServiceUtil.VerifySignature(userInfo))
{
// 产生一个授权码
string authorizationCode = Guid.NewGuid().ToString("N");
// 设置缓存服务器,消费一次,5分钟过期。
using (var redisClient = PooledRedisHelper.GetTokenClient())
{
// 2016-03-03 吉日嘎拉 让缓存早点儿失效
DateTime expiresAt = DateTime.Now.AddMinutes();
string key = "code:" + authorizationCode;
redisClient.Set(key, userInfo.OpenId, expiresAt);
}
result.ResultValue = authorizationCode;
result.Status = true;
result.StatusCode = Status.OK.ToString();
result.StatusMessage = Status.OK.ToDescription();
result.CreateSignature(userInfo);
} return result;
}
/// <summary>
/// 验证授权码
/// 用掉一次后,一定要消费掉,确保只能用一次。
/// </summary>
/// <param name="userInfo">当前用户信息</param>
/// <param name="code">授权码</param>
/// <param name="openId">用户唯一识别码</param>
/// <returns>验证成功</returns>
public static bool VerifyAuthorizationCode(BaseUserInfo userInfo, string code, out string openId)
{
bool result = false;
openId = string.Empty; if (userInfo != null && !ServiceUtil.VerifySignature(userInfo))
{
return result;
} using (var redisClient = PooledRedisHelper.GetTokenClient())
{
// 2016-03-03 吉日嘎拉 让缓存早点儿失效
string key = "code:" + code;
openId = redisClient.Get<string>(key);
if (!string.IsNullOrEmpty(openId))
{
result = true;
if (userInfo != null && !string.IsNullOrEmpty(userInfo.OpenId))
{
result = userInfo.OpenId.Equals(openId);
}
}
redisClient.Remove(key);
} return result;
}
以前版本的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的朋友圈越来越大吧。
写代码的大多 都是男人、看文章累了、休息一下眼睛,夏天了看看妹子吧,然后鼓足精神好好工作吧。
C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享的更多相关文章
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本 《Linux系统防CC攻击自动拉黑IP增强版Shell脚本》来自张戈博客
前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存黑名单突然无法过滤后台,导致WordPress无法登录!虽然,可以通过修改本地hosts文件来解决这个 ...
- HTML标签防XSS攻击过滤模块--待优化
HTML标签防XSS攻击过滤模块 http://cnodejs.org/topic/5058962f8ea56b5e7806b2a3
- Node.JS实战36:写一个WAF中间件!防黑客,防攻击
如果用Node.JS做Web服务,很多时候是会选择Express的. 本文,将展示如何如何实现一个WAF中间件. WAF有什么用? WAF即Web Application Firewall,Web应用 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 增加安全性增加内网的电脑才可以调用的限制
大型业务应用系统很容易受到各种攻击,每加上一道防护就可以减少80%-90%的攻击.我们的核心接口组件里也做了一些限制,有些接口方法只有内网的用户才可以调用,防止外网的用户调用,这样安全性会有很大的提升 ...
- Avast!:小型网站最易遭受的3种黑客攻击
avast是捷克研发的杀毒软件,从网站上找到一篇avast关于网站安全的文章,觉得颇有意思,因此想到翻译过来与大家共享.有不对之处还望大家批评指正. 一个拥有上万访问者的小型网站管理员发来一份信,向我 ...
- 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...
- OpenResty(nginx扩展)实现防cc攻击
OpenResty(nginx扩展)实现防cc攻击 导读 OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强 ...
- nginx利用limit模块设置IP并发防CC攻击
nginx利用limit模块设置IP并发防CC攻击 分类: 系统2013-01-21 09:02 759人阅读 评论(0) 收藏 举报 来源:http://blog.xencdn.net/nginx- ...
- 防cc攻击策略
黑客攻击你的网站,会采取各种各样的手段,其中为了降低你网站的访问速度,甚至让你的服务器瘫痪,它会不断的刷新你的网站,或者模拟很多用户同一时间大量的访问你的网站, 这就是所谓的CC攻击,这就需要我们在程 ...
随机推荐
- 使用TabPageIndicator的样式问题
在使用TabPageIndicator往往会出现一些样式问题,导致看不到字,下面是总结的步骤: 1.布局<LinearLayout xmlns:android="http://sche ...
- B/S结构的流程简单概述
在介绍appl ication 对象之前,先简单介绍一些Web 服务器的实现原理. 对于大部分浏览器而言,它通常负责完成三件事情: (1)向远程服务器发送请求. (2)读取远程服务器返 ...
- link与@import的区别
我们都知道link与@import都可以引入css样式表,那么这两种的区别是什么呢?先说说它们各自的链接方式,然后说说它们的区别~~~ link链入的方式: <link rel="st ...
- 移动web之用CSS样式写如苹果手机的开关键
话说这个问题纠结了近一个小时,为什么呢?看看就知道了. 在公司的商旅Web移动版本项目上有这么一个交互,需要模仿iphone自带的开关,好吧,肯定没什么问题. Tip:请使用Chrome查看以下案例 ...
- 1-7 basket.js localstorage.js缓存css、js
basket.js 源码分析 api 使用文档: http://t3n.de/news/basketjs-performance-localstorage-515119/ 一.前言 b ...
- 解决JqueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug
前些日子不是在做 使用Jquery-UI实现一次拖拽多个选中的元素操作嘛,在持续完善这个组件时遇到了一个关于拖放排序的bug.今天就着图片和代码重现一下,也顺便告诉大家如何解决这个问题. 首先先上图描 ...
- SharePoint 2013 文档库中PPT转换PDF
通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) ...
- Android开发学习——打电话应用
打电话应用 system/app/phone.apk 这个是打电话应用,这个Java API 不允许应用级程序员改写,系统级才可以 system/app/dialer.apk 这个是拨号器应用,可 ...
- Fragment配合RadioGroup实现点击切换布局
这里用了 compile 'com.jakewharton:butterknife:7.0.1' compile 'org.greenrobot:eventbus:3.0.0' MainActivit ...
- ORA-01950: no privileges on tablespace xxxx
案例场景: 新建了一个表空间后TBS_MARKET_DAT,希望将归档的数据放置在这个表空间. SQL> CREATE TABLESPACE TBS_MARKET_DAT 2 DATAFI ...