一直以来,我对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。 面对攻击时有一个平和的心态。省钱,就要付出代价。要是有钱,我们是不是在南极看企鹅呢?

基于数据库的CS程序的简单安全体系相关推荐

  1. 【ASP.NET教程-WP教程15】ASP.NET Web Pages - C# 和 VB 实例简单而强大的开发框架,可用于构建动态的、基于Web的应用程序。它提供了一种轻量级的方式来创建和管理网页

    ASP.NET Web Pages - C# 和 VB 实例 ASP.NET Web Pages 是一种简单而强大的开发框架,可用于构建动态的.基于Web的应用程序.它提供了一种轻量级的方式来创建和管 ...

  2. 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统

    基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+CS的图书销售管理系统GUI设计与实现,文章末尾附有本毕业设计的 ...

  3. 【微信小程序系列】微信小程序超简单教程,基本语法,获取用户基本数据信息,实现对云数据库的增删改查及小程序外部api的引用示例(附源码)

    [微信小程序系列]微信小程序超简单教程 小程序项目结构 静态页面的构成 HTML:结构 css:样式 js:行为 小程序 页面全部存放在pages, 而且pages目录只能存放页面 页面包括4个文件, ...

  4. linux系统下Qt应用程序重启,嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)...

    嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws) 应用软件一般都有这样的业务需求: 当有新版本的APP,则程序就需要执行更新,更新完毕后(所谓的更新大多就是以覆盖的方式),不需要关 ...

  5. springboot mysql行锁_SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

  6. 最简单的基于FFMPEG的Helloworld程序

    学习雷神的FFMPEG入门教程,本文基于命令行实现. 文件结构 G:\Coding\FFMpeg\Proj\Console>dir驱动器 G 中的卷没有标签.卷的序列号是 0FD5-0CC8G: ...

  7. 一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字。您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑

    一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字.您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑 import cv2 import numpy as np imp ...

  8. win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序

    本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...

  9. 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计

    一.权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如何来优化"系统菜单"的结构而告终.今天 ...

最新文章

  1. linux 关闭开机 ftp,解决linux ftp匿名上传、下载开机自启问题
  2. Excel多因素可重复方差分析
  3. 01.query的分类-条件查询和组合查询
  4. 六步带你轻松安装MongoDB
  5. 名片识别信息分类python_python文字识别
  6. 如何使用git命令将本地项目上传到Gitlab上
  7. 全局光照模型与Rendering Equation(全局光照的最为基础的核心理论) .
  8. 雷军:程序员如何成功创业?
  9. web 3d 资源库大全
  10. 在win10下下载wsl
  11. 元境技术助力元宇宙营销 联合发起商广协元宇宙营销研究院
  12. 火绒规则 禁止所有软件的安装_【技术宅】火绒安全软件防流氓规则编写及使用小白教程(附成品)...
  13. ROS自学实践(11):利用map_server功能包创建自己的地图
  14. mov 与 lea 区别
  15. puzzle(018.1)数墙、留方、黑白、数方
  16. 3D游戏(7)——模型与动画
  17. 2018.3.15 《曾国藩传》张宏杰
  18. 荣获中国专利金奖 百度连续四年AI专利申请和授予量全国第一
  19. 中国计算机学会推荐国际学术期刊  (计算机系统与高性能计算)
  20. 分分钟解决 MySQL 查询速度慢与性能差(中)

热门文章

  1. 【数据挖掘】聚类趋势估计、簇数确定、质量测定等评估方法详解(图文解释 超详细)
  2. android 电视调试打开,android 电视机串口调试方法及命令
  3. 游戏圈重磅活动来袭,9月25日-27日:首届北京国际游戏创新大会来了
  4. 【多目标轨迹预测】Path-Aware Graph Attention for HD Maps in Motion Prediction(ICRL 2022)翻译
  5. java微信退款接口demo_微信公众平台开发(6) 微信退款接口
  6. 怎么在浏览器网站前添加图标(图片)
  7. 自动化机器学习AutoML(1)
  8. android 详解画图,Android入门之画图详解
  9. 怎样编辑pdf文件的贝茨编号
  10. java exe指的是什么,3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分)...