# 规范性

规范标准:系统的设计开发应符合国家信息安全、云平台管理、信息管理等方面的政策法规和集团相关制度的相关要求,集团内外系统间数据传递符合通用技术标准。

我公司开发管理理念和使用的开发框架和各类技术栈,均符合国家信息安全、云平台管理、信息管理等方面的政策法规,我公司为集团信息化服务多年中,一致严格遵守集团系统开发的相关规定,未出现任何一起违规行为。此次项目中我们也将按照国家相关政策法规和集团最新相关制度要求,做好系统规范标准工作。

# 安全性

# 安全保密

在关键数据处理、用户管理、访问等方面设计加密、认证、授权、日志等管理功能,提高系统安全保密性。

安全保密作为系统的基本要求也是重要要求,我公司将为该项目设计一整套安全策略,确保管理系统安全保密方面稳定可靠。

具体安全策略我公司计划从以下几个方面进行:

  • 保证数据信息传输安全解决方案

首先采购人对安全有较高要求,根据过往项目经验,我公司首先将在数据信息传输安全上进行有效防范,做到数据加密传输,利用数字签名、https 证书等手段确保数据传输过程中不被泄漏、监听和破解。

  1. 数据加密

首先采用数据加密的方式将传输数据进行加密处理,保证数据即使被窃取也无法破解。数据加密⼀直是保密数据的重要部分,常见的加密算法有可逆加密算法和不可逆加密算法,可逆加密算法⼜分为对称加密算法和⾮对称加密算法。

⽐如⼀个系统的登陆操作,客户输⼊⽤户名登陆,如果不进⾏任何保障措施,⽤户名和密码明⽂传输,被不法分⼦截获数据后,显然是不安全的。如果我们这时对密码进⾏不可逆加密,如md5,对⽤户名进⾏可逆加密,如des,这时候在截获数据时,得到的将是⼀串密⽂,显然,即使要破解,也需要相当时间。

  1. 数据签名

其次采用数据签名的方式,对数据进行签名操作。数据签名,相当于对传输的数据,进⾏⼀些不可逆加密算法后,如md5,⽣成⼀段签名字符串sign。

⽐如上述列⼦中,登陆操作中如果还要传输IP,地点等等数据,这些数据明显没那么重要,这时可以对全部传输数据进⾏签名,⽣成sign,将其传⼊后端,后端⽤同样算法及密钥计算⽐较sign,如果⼀致认为数据正确,直接拿到IP,地点等数据(不⽤解密,相对于解密各个信息,理论上所有信息计算签名要节省时间),不⼀致则认为被修改过,返回错误信息。

  1. https(数字证书机制)

我们将使用https加密证书对网站进行访问,为保证客户端与服务器端安全地协商出⼀个对称加密算法。剩下的就是通信时双⽅使⽤这个对称加密算法进⾏加密解密。

  1. 防止SQL注入攻击解决方案

防止SQL注入是一项比较重要的安全防范事项,我公司在长期的信息化服务中,已经把SQL注入防范作为我公司交付信息化项目的基础要求和必须要求。

我公司具体SQL防注入的介绍如下:

  1. SQL注入

SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。

SQL注入利用的是正常的HTTP服务端口,表面上看来和正常的web访问没有区别,隐蔽性极强,不易被发现。

  1. SQL注入的危害

SQL注入的主要危害包括:

  • 未经授权状况下操作数据中的数据
  • 恶意篡改网页内容
  • 私自添加系统账号或是数据库使用者账号
  • 网页挂木马。

我公司计划通过以下方式进行防SQL注入防御手段:

  • 参数传值

在编写SQL脚本时,禁止将变量直接写入到SQL语句,必须通过设置相应的参数来传递相关的变量。从而抑制SQL注入。数据输入不能直接嵌入到查询语句中。同时要过滤输入的内容,过滤掉不安全的输入数据。或者采用参数传值的方式传递输入变量,这样可以最大程度防范SQL注入攻击。

  • 分级管理

对用户进行分级管理,严格控制用户的权限,对于普通用户,禁止给予数据库建立、删除、修改等相关权限,只有系统管理员才具有增、删、改、查的权限。

  • 多层验证

为确保系统的安全,我们将访问者的数据输入必须经过严格的验证才能进入系统,验证没通过的输入直接被拒绝访问数据库,并且向上层系统发出错误提示信息。同时在客户端访问程序中验证访问者的相关输入信息,从而更有效的防止简单的SQL注入。但是如果多层验证中的下层如果验证数据通过,那么绕过客户端的攻击者就能够随意访问系统。因此在进行多层验证时,要每个层次相互配合,只有在客户端和系统端都进行有效的验证防护,才能更好地防范SQL注入攻击。

  • 数据库信息加密

我们将针对系统中的数据信息采用MD5加盐不可逆加密方式进行关键数据进行加密存储,保证数据安全。

# 防止XSS攻击解决方案

不光防止SQL注入在我公司是一项基础和必须要求,同时防止XSS攻击也是我公司重点安全防范的要求,我公司在长期的信息化服务中,也已经把防止XSS攻击防范作为我公司交付信息化项目的基础要求和必须要求。我公司具体防止XSS攻击的介绍如下:

  1. XSS攻击

XSS攻击通常指的是通过利用系统开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到系统网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

  1. XSS攻击防御手段
  • 使用XSSFilter(输入检查)

针对用户提交的数据进行有效的验证,只接收我们规定的长度或内容的提交,过滤掉其他的输入内容。

  • 表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

  • 过滤 js 事件的标签:onclick、onerror、onfocus等。

  • 检查HTML实体

当需要往 HTML 标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行 HTML Entity 编码,在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。

  1. 设置 http Only cookie

许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。

# 防止CSRF攻击解决方案

防止CSRF攻击也就是跨站请求伪造,作为防止恶意冒充用户对被攻击的网站执行某项操作,此项防范较为重要,我公司在XXX系统等均加入防止CSRF攻击。

我公司针对CSRF攻击防范具体方案如下:

  1. 什么是CSRF攻击

通常缩写为CSRF或者XSRF,中文名跨站请求伪造。是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

CSRF攻击手段是通过发起改变状态的请求,而不是窃取用户的数据,因为攻击者无法得到服务器返回的响应。

  1. CSRF攻击防御手段
  • 重要数据交互采用POST进行接收,当然POST也不是万能的,伪造一个form表单即可破解。
  • 使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。
  • 出于用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为一种辅助手段,不能作为主要解决方案。
  • 验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。
  • 为每个表单添加令牌token并验证。

# 防止通过上传漏洞攻击解决方案

  • 什么是通过上传漏洞攻击

通过上传漏洞攻击是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

  • 防止通过上传漏洞攻击手段
  1. 文件上传的目录设置为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

  1. 判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

  1. 使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

  1. 单独设置文件服务器域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

  1. 限制上传文件大小

主要就是防止DDOS攻击:

①限制上传文件的大小,防止由于内存、磁盘耗尽造成的拒绝服务。

②可以配置web server允许的最大Post大小。

③可以在代码层面获取上传文件的大小,根据文件类型的不同进行进一步的过滤。

  1. 确保上传文件被访问正确返回

①将文件上传目录设置为静态资源目录,防止被解析为脚本执行。

②使用代理页面隐藏文件真实路径。

③使用上述方法时,确保Content-Type与实际文件类型一致。

④如果文件不允许在页面展示,仅允许下载,请设置Content-disposition:attachment。

# 数据备份机制解决方案

对于数据备份我公司有一套自由的数据备份要求和机制,同时根据采购人要求的此次项目数据库采用的是集团MySQL数据库服务器集群或达梦数据库集群以及此次项目文件服务器采用集团统一提供的对象存储服务器的情况,为确保采购人此次项目的数据安全,我们将严格按照我公司多年信息化项目实施经验制定符合此项目实际的数据备份机制。

具体如下:

系统的所有业务数据包括业务表单数据、上传附件、照片等都存储在基于磁盘阵列上,保障但磁盘损坏不影响数据的安全性。同时在系统运行过程中,需要考虑数据的备份机制、备份方式防止数据丢失。 按照数据类型,系统备份分为结构数据备份、非结构数据备份。结构化数据备份是指基于数据库存储的数据,而非结构化数据是指制度文档、照片、身份证扫描件等文件系统数据。

  • 备份机制
  1. 结构数据备份

结构数据包含所有日常业务所发生信息的特征数据,以行、列结构进行保存,并通过Mysql数据库子系统提供的数据索引进行检索和定位。系统的结构数据使用Mysql数据库系统进行存储。对结构数据的备份采取定期导出数据库文件方式备份,备份设备依据备份性质采取磁盘文件介质存储和磁带介质存储两种。

  1. 非结构数据备份

非结构数据包含所有日常业务所涉及和引用的数字文档,包括word、Excel文件、照片、视频、附件等数字文档,以符合文件子系统要求的独立文件进行保存,并通过文件子系统依据文件名称进行检索和定位。系统的非结构数据使用磁盘文件子系统进行存储。对非结构数据的备份采取文件子系统的复制功能进行完整数据备份。备份设备依据备份性质采取磁盘文件介质存储和磁带介质存储两种。

  • 备份策略

按照备份的数据量来划分,有以下3种备份策略:

  1. 全量备份。

备份系统中所有的数据。优点是恢复时间最短,操作最方便,也最可靠;缺点是备份数据量大,数据多时可能做一次全备份需很长时间。全备份也可以称为完全备份。

  1. 增量备份。

备份上一次备份以后更新的所有数据,其优点是每次备份的数据量少,占用空间少,备份时间短;缺点是恢复时需要全备份及多份增量备份。

  1. 差分备份。

备份上一次全备份以后更新的所有数据,其优缺点介于全备份和增量备份两者之间。

系统数据备份策略可按照每天进行增量备份,每周或每两周进行差分备份,每一个月进行全量备份的策略。

# 开放性

开放共享:通过对接集团内、外系统,支持云化部署。

针对采购人的开发共享要求,我公司在集团中有多年的信息化服务经验,熟知集团内网环境和相关系统开发要求,对于内网系统访问外网,外网访问内网都有成功的项目经验,同时支持云化部署SaaS模式。

# 先进性

技术先进:产品应采用业界先进、成熟的技术路线,采用流行的灵活且易扩展系统架构,使用先进的技术框架路线进行设计与开发。

我公司将为该项目搭建的是一套基于SpringBoot微服务架构搭建整体系统,该技术架构成熟稳定、性能突出。后台采用JAVA,前端采用主流渐进式JavaScript框架vue。采用前后端分离架构:SpringBoot2.x,Ant Design&Vue,Mybatis-plus,Shiro,JWT。满足采购人对技术先进性要求。

# 兼容性

兼容扩展:与多系统、多浏览器、多工具兼容。

由于系统采用Java语言进行后端开发,所以系统可以兼容Linux、Windows双平台的部署,同时也支持Docker的容器化部署,整个系统采用B/S架构,基于浏览器的技术进行开发部署,所以理论上只要有浏览器均可访问该系统,兼容Chrome、Edge、Firefox和IE11等目前主流浏览器,但由于基于安全性考虑,由于IE浏览器已经结束其生命周期和超出维护阶段,目前安全性较低,故系统推荐使用Chrome或者Edge进行访问,移动端则支持App和其它建立在浏览器上的应用进行访问。

# 扩展性

在此项目中,我们会将整个业务应用划分为:界面层、业务逻辑层、数据访问层。在软件体系架构设计以及以往的系统设计中,分层式结构是最常见,也是最重要的一种结构。在软件内部方面,在系统需要实现新增业务时,会根据业务具体情况对功能进行归纳整理,评估新增功能是否可以延用现有服务,还是另外建立新的服务。尽量减少对现有功能的改动。在软件外部方面,系统本身与外部第三方系统(如SSO、e Pms等)之间存在松耦合关系,系统的变化对其他系统无影响,其他系统和功能不需要进行改动。

在以往的系统设计中,通过增加处理核心数来增加系统的并行处理能力,但是这个方法具有一定的局限性,上限也相对较低,随着并行的任务增多,系统会因为争夺资源而达到性能上的拐点,系统性能会触及瓶颈,导致业务的数据处理速度变慢。因此我们系统将使用多台机器组成的微服务架构,以此来明显增强横向扩展能力,在服务器压力增大的时候,可以在用户无感知的情况下进行服务器增量。

为了满足拓展性,我们可以将系统拆分为独立的服务以及服务对应的数据库,多个业务紧密的业务也可以公用一个数据库来降低服务器间的请求资源消耗。拓展服务单独对应数据库,这样服务是独立的,数据库也是独立的。大大的降低了业务之间的耦合性,达到了拓展性的要求。

# 可靠性

稳定可靠:满足集中部署、大规模应用的需要,并保留一定冗余,为业务发展提供支持,无明显逻辑错误、编码规范。在高负荷状态下系统能够稳定运行且提供不间断的可靠服务。

针对稳定可靠的要求,我公司将为此项目采用微服务技术架构,降低各服务之间耦合,做好负载均衡,根据功能、特点、业务进行服务拆分并保留一定冗余,为各业务功能后续拓展提供便利,同时也不影响其它服务。

稳定可靠是一个软件的基础要求。只有稳定可靠的系统才能为用户持久服务。稳定可靠需要系统做好整体设计、充分测试以及容错机制。

具体我们将进行如下操作:

# 避错设计

软件可靠性也一样,减少出错,就要遵守一些准则。避错设计一共提了三大块,分别是考虑可靠性的设计准则,启发规则,以及正确的编程风格。

  • 考虑可靠性的软件设计准则
  1. 模块化,指的是我们可以将复杂问题分解为若干易于处理的子问题;过程、函数、子程序和宏,都可作为模块。
  2. 模块独立,则是要求每一个模块完成一个相对独立的特定子功能。
  3. 信息隐蔽,是说一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
  4. 局部化,使得一些关系密切的软件元素物理上彼此靠近,例如在一些模块中使用局部数据元素。
  • 启发规则
  1. 提高模块独立性,力求实现高内聚低耦合。
  2. 控制模块规模,模块的实现语句不宜过多,通常不超过60行。
  3. 控制软件的深度、宽度、扇入、扇出。
  • 正确的编码风格。

代码简明、清晰、易读、易懂;有正确、完整的文档等。

# 查错设计

避错设计虽然可以大幅度降低引入的错误或缺陷,但不太可能完全避免缺陷的发生,因此,查错设计就非常重要。查错设计分为主动式查错和被动式查错两种。

  • 主动式查错,顾名思义,是主动进行对程序状态的检查。

举例如下:

  1. 提供服务器定期监控功能,查看定位CPU高耗线程,提示系统管理员关注。
  2. 提供服务端软件心跳监测功能,实时监控服务器的运行状态。
  • 被动式查错,在程序不同位置设置监测点等待错误征兆的出现,从而查出缺陷。

举例如下:

  1. 在各单元/模块处理业务逻辑前,应首先判断所有输入参数、条件的合法性。

# 容错设计

容错的含义:在发生故障的情况下,系统不失效,仍然能够正常工作的特性。软件的容错设计与硬件的冗余设计极为相似。

容错软件:

在一定程度上,对自身故障具有屏蔽能力

在一定程度上,能从错误状态自动恢复到正常状态

因缺陷而发生故障时,仍然能够在一定程度上完成预期的功能

软件设计为什么要容错?原因如下:

  1. 没有保证软件无缺陷的方法,开发极低缺陷率软件的成本通常会非常高,有时接受带有缺陷的软件可能更为经济。
  2. 即使系统看起来很可靠,也需要容错。例如规格说明可能存在缺陷,验证和确认活动可能不正确。
  3. 在关键情形下,软件系统必须容错。有高可用需求,系统失效代价很高时,必须要容错。

# 可管理性

可管理性对于保持信息管理系统顺利运行至关重要,主要的管理内容包括如下几个方面。

监控系统的运行状况,并在服务状态不佳时快速恢复服务。跟踪问题的原因,例如系统故障或性能下降。及时更新软件和平台,比如安全补丁。了解系统间的相互作用,以便在异常变更造成损失前进行规避。预测未来的问题,并在问题出现之前加以解决(例如,容量规划)。建立部署,配置、管理方面的良好实践,编写相应工具。执行复杂的维护任务,例如将应用程序从一个平台迁移到另一个平台。当配置变更时,维持系统的安全性。定义工作流程,使运维操作可预测,并保持生产环境稳定。

# To Be Continued!😎

Last Updated: 9/19/2022, 9:49:23 AM