基于数据库的CS程序的简单安全体系

一直以来,我对CS程序情有独钟。

因为编程的目的无非是解决问题。而CS程序的可掌控性、模块独立性,要远好于BS或是其它方式。

最关键的是可视化的IDE,开发,测试,都要方便得多。

而且,有一个最关键的特性,就是用户感观好得多,因为操作系统的支撑,远超浏览器,而且有各种商用界面库可选择,操作快速得多。程序员,如果总是想着自己方便,那么早晚会被用户忘记。

这是因为,操作系统,永远占据着科技最前沿,浏览器永远无法追上操作系统的发展,而且这种差距只会越来越大。也许许多人不信。不信的人,就很可能像当年被java忽悠一样。我说的java 可不是安卓的那个java,现在刚入行的,可能完全不理解当年的java是怎么回事,大意当时的目的是为了取代windows 和其它操作系统。这个不是我的主题。


另外,CS程序,有一个特别特别重要的优势,就是白用了客户机的CUP和内存,硬盘!

试想想,如果腾迅采用BS模式,马化腾得多花多少冤枉银子?


不过,CS程序,有几个重要的难题,比如,是否支持离线功能?是否支持多种不同的版本的客户端?是采用跨平台方式,还是各平台独立方式?与CS并存的同时,是否还要开发Web版?

比如,我开发过几个大的CS程序,程序一开始,往往会有好长好长的环境检查代码,用过QQ的人也知道,然后会有占总程序1/3左右的初始化代码。还有哪些数据在本地缓存,哪些在服务器,等等。然后,还有详细的分级的,多线程的本地日志,关键的日志,要传到服务器,还要提供一个借误处理框,给用户一次把错误日志发到我们邮箱的机制。等等。


这些,也不是今天我要面对的。我们主要来说说安全。前面说那么多,是因为我写文章,部分目的,也是为了自己备忘。以后可能会讨论其它方面。


这里我说一下范围,我的目标对象不是腾迅那种超级大公司,我是说像我这样,一个人做一个独立的项目的。如果像大的团队,我们的安全模式,是把数据库完全本地化,或者完全隐藏,各节点通过加过密的信令来完成信息交互和数据同步。


可是,对于小团队来说,这是不现实的。多一个服务器,就要多给服务商一份维护费用。更不要说,要开发一个消息分配中心,或是其它的消息排队,甚至是负载均衡的机制,是不可承受之重。


所以,最简单的办法就是整个D版Sqlserver数据库,然后,装台破PC,买个固定IP就完事了。

然后,我们就要面对海量的攻击,甚至DDOS。


那些说,"你这是扯蛋呢吧?没人会这么干",的看官们,你们可以走了。我这从来不讲学究性质的事情。那些初创业,准备省下每一分钱的人,可以接着看。


OK,列一下我们要做的事:

1。 防火墙,如果有条件,最好在服务器前面,再加一个出口服务器,装上防火墙。

1)访问我们的人(也就是可以下载CS客户端的人)有多少?范围:只在一个省,还是全国,还是全世界。如果用人的少,我们就白名单的方式配置防火墙。

反之,防火墙就作为一种临时的防御武器,黑名单方式。

2)防火墙的使用,有一个限制,因为,在公司内,一个防火墙可能是整个公司的IT系统的防火墙,所以,它的策略不一定能为你提供帮助,更多时候,很可能成为负担。

比如,你的系统只有50人在用,可是因为其它系统的存在,防火墙那要面对数千用户。那这时,和没有它差不多。

另外,如果你的服务器,完全暴露在公网中,还有一个好处,就是攻击你的人,也要直接面对你。你很快就能锁定他。

而如果你前面,有出口服务器为你挡了一下,你看到的,就是来自于出口服务器的攻击,锁定对方,相对麻烦些。如果,你有证据,又有公安局的关系,可以将对方绳之以法,你要相信公安人员的能力,因为他们可以进入公网的路由器,在那个世界,谁干什么,都清清楚楚。因为,在肉鸡上种木马的人,总有一天,他要去收取信息的。

2. 数据库服务器

1) 端口要改掉,把1433改成别的端口:"Data Source=" + ipaddofhost + ",8888;Initial Catalog=我的数据库;Persist Security Info=True;User ID=xx;Password=xxxxxx"

2) sa用户一定要禁掉。如果你的服务器,只能内网和VPN用,就域认证的方式登录,自然是最好的选择,但对于公共服务程序,这是不可能的。当然,有的人,会使能sa,用户,然后把所有的sa用户的权限都去除,这样可使得攻击的程序掉到陷阱里。这也是一个比较黑的办法。但这种办法也有一个坏处,就是面对DDOS时,太多人登入,还是会影响正常的使用。当然,我没有试过,可以在1433上做一个这样的陷阱,上面对应一个独立的无用的Sqlserver 进程。


3) sql server 尽可能用新的版本,并且打上最新的补丁。

3. 程序:

1)密码不应当明文存放:    CS程序,有一个缺点,就是程序要在用户的机器上运行。如果还要登录到我们的数据库上,想要隐藏密码很困难。似乎Sqlserver也有ssl的方式登录,但那个我不会,谁会可以把贴子放在下面。我想说的是,我们的程序里面的用户名和密码,应当加密。

有许多加密算法。现在我发现,如果是用的.net语言,把个混淆器,如Xenocode,可以直接把里面的所有字符串混淆了。省得编程了,这是一个好办法。简单的就是好的。我没钱,有钱肯定买个Xenocode.

2)程序中应当使用多个级别的密码。至少要三级:

1。登录前的密码。这个很重要,很重要。许多人不关注这个事情。程序员要保证一件事,就是全面的常控性,你永远不要指望用户帮你做什么。比如,最近,有时我需要用户手工传个日志给我,太困难了,用户们,对计算机的操作能力,唉。不要提了。你不能用程序员的眼光来看待用户。

所以,我们在登录前,一定要有使客户端连上服务器的能力。

比如,它登上来,就可以知道自己的版本和服务器的版本是不是还能对上号,是不是有会兼容性问题,是否需要升级配置信息库,是否根本自己不能再存在了,必须要自杀然后启动升级程序,或者自己给自己升。

当然,这个用户,权限要很小,只与版本相关就可以了。

如果项目较大,可以用一个专门的数据库来存这方面信息,比如,如果用户那有加密狗或者liscence这类的机制,更是应当独立,以方便你们销售人员来查一年卖了多少套,而且不用担心他们会访问到客户数据。

好,关于这个用户,肯定还有许多功能,主要是与升级有关,就说到这。升级程序与本文无关,不多说的,当然,看过黑客D国的人的,都知道,那里面的先知就是升级程序,那个老太太(还是那个小女孩?),好像是,总之,升级程序,很重要很重要。看官自己慢慢想吧。

2)。登录后的权限。

用户登录后,程序就知道他的角色了,这里,你可以分配给他新的数据库连接字串。与之权力相匹配。也就是使其二次登录。

这个要小心处理。因为如果分不好,程序会出问题。

3)超级用户

超级用户,有权力对所有的用户进行操作,包括重置密码。这个用户相关的信息,尽可能不要写在CS中。方法有两个,一个是单独编写一个工具,只发给你的直接客户,也就是给你发工资,或是给你打分那个人。

第二种,就是用户名和密码要二次输入。这也是第三次登录。而且只对超级用户才会开放,因为只有他有密码。


4。 数据加密

这也是很重要的一环。所谓的安全,永远都是相对的。所谓的安全,就是知道的人越少越安全。可是越多的人使用你的服务,你的价值也就越大。

也就是说,不论怎么做,我们也是防那些顺手牵羊的人,贼偷方便。

所以,我们的数据,有可能会整体丢失。

所以,关键数据加密,就变得相当重要了。特别是用户和密码。如果有能力,尽可能把这一环也做上。


其它的:

1)时间要用数据库的时间,有时用户会改自己的时间,当一些关键的操作,最好到服务器上,获取一下时间。

程序启动时,最好自己为自己体检。除了那些常规检查外,还要检查一下自己以及关键的那几个库是否被人改动过。

最好的办法是,升级时,就把关键的exe 和dll的 md5 key,以及最后修改时间,存在数据库服务器上。启动时,主线程尽快打开界面,偷偷开一个线程,进行各种检查,并且把检查的结果写入本地日志,如果发现异常,特别是程序版本正确,而查出可执行文件被改过,除提示用户升和强制退出外,还要把日志上传服务器。同时,服务器端写一个webservice,自动把邮件发给你。这样做,也很必要,对那些准备破解你程序的人,可能会造成一定的麻烦。

这个时间,为什么在在数据库里,而不在升级服务器那里呢?因为等你自己开始维护服务器就知道,服务器本身也会中毒,病毒改了你的程序后,客户端就不知道是应当升级还是不升级,这样就糟透了。

总之,升级过程很重要,你是否设计得好,是否能避免掉到升级陷阱,主程序是否有能力更新升级程序,整体上是否有错误反转的能力,至关重要。特别是,当你的程序很贵,每个用户者有不同的加密狗时,这些对你就更重要。

用户如果掉到升级陷阱,就意味着你要同他单线联系,直接把新的升级程序发过去,这将是个不可原谅的错误。因为,很可能把你拖跨。当然,一个安全的办法,是再拥有一个网站,上面有最新的升级程序,但这样的一个坏处,是用户知道这件事情的存在。当然这不难做到。所以,升级程序界面,最好有一个指向这个位置的链接。

不说升级程序了,这个玩意太复杂了。


2。强有力的报警机制和日志

在服务器上,最好能有各种报警机制。以提醒你,有人在对你进行攻击。


3。 面对攻击时有一个平和的心态。省钱,就要付出代价。要是有钱,我们是不是在南极看企鹅呢?



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值