海上孤帆 发表于 2024-10-10 11:44:54

安全设计:全方位构筑数字堡垒

一、安全设计之身份认证
(一)多种身份认证技术解析
用户名 / 密码方式是最为常见和基本的身份认证方法,但其安全性依赖于口令,一旦泄露,用户即可被冒充。例如,很多用户为了记忆方便,采用生日、身份证号等容易被猜测的字符串作为密码,这是非常不安全的。
IC 卡认证,如信用卡大小的 C 卡和 USB 密钥等,用户需要插入智能卡并输入密码才能进行身份验证。智能卡具有硬盘加密功能,安全性较高,是一种双因素的认证方式,即使 PIN 或智能卡被窃取,用户仍不会被冒充。
动态口令是应用较广的一种身份识别方式,一般是长度为 5 - 8 的字符串,由数字、字母、特殊字符、控制字符等组成。例如,ERP 系统动态密码生成终端可以采用短信密码、动态令牌解决方案,以手机短信形式请求包含 6 位随机数的动态密码,或者使用基于时间同步的硬件令牌,每 60 秒变换一次动态密码,密码一次有效。
生物特征认证是以人体惟一的、可靠的、稳定的生物特征(如指纹、虹膜、脸部、掌纹等)为依据,采用计算机的强大功能和网络技术进行图像处理和模式识别。该技术具有很好的安全性、可靠性和有效性,与传统的身份确认手段相比,无疑产生了质的飞跃。
USB Key 认证是近几年发展起来的一种方便、安全的身份认证技术。它采用软硬件相结合、一次一密的强双因子认证模式,很好地解决了安全性与易用性之间的矛盾。


(二)身份认证系统构成及特点
动态认证系统主要由令牌、身份认证软件、API 接口三部分组成。其特点表现为适应各种网络环境,能对信息资源提供深度保护;遵循相关标准协议,具备高度通用性;利用函数对接实现与客户软件无缝连接;提供令牌和认证服务器的物理安全保护,防止强行窃取相关信息;采用专用认证服务软件进行集中认证,既提高效率,又简化系统管理。
(三)认证系统与客户系统集成
动态身份认证服务器提供了与客户服务器的软件接口,即认证服务接口函数。通过对它的调用得到认证服务器提供的认证服务。函数接受调用请求后,能自动决定把请求发往认证服务器或后备服务器,随后把认证结果返回给客户服务器。当客户服务器上的应用程序收到网络客户的存取要求时,调用令牌、认证客户端函数,后者负责向认证服务器发送认证请求并反馈认证结果。应用程序根据反馈的认证结果决定用户访问授权或请求拒绝。例如,在 ERP 系统中,针对传统 “用户名 + 静态密码” 认证方式存在的缺陷,采用 “静态密码 + 动态密码” 双因素身份认证的解决方案,通过在静态密码基础之上加上动态密码进行二次认证,首先验证动态密码然后验证静态密码,防止盗号产生的 ERP 系统数据失窃或者泄露,提升数据安全性。


二、安全设计之授权管理
(一)RBAC 与 ABAC 授权管理方法
RBAC(基于角色的访问控制)是一种通过角色关联权限,角色再关联用户的授权方式。在 RBAC 中,用户与角色是多对多的关系,角色与权限也是多对多的关系。例如,在一个企业中,员工可以拥有多个角色,如 “项目经理”“部门主管” 等,每个角色又对应着不同的权限,如 “项目经理” 可以审批项目预算、分配任务等,“部门主管” 可以管理部门人员、审批请假申请等。
RBAC 的特点在于简化了用户与权限的管理,通过角色将用户与权限解耦,使得权限管理更加规范和便捷。当企业规模较大、用户数量众多时,通过给用户分配角色,可以一次性对多个用户进行权限设置,大大提高了管理效率。其应用场景广泛,特别是在 2B 方向的 SAAS 领域。
ABAC(基于属性的访问控制)则是基于一组与请求者、环境和 / 或资源本身相关的特征或属性进行访问控制决策。例如,企业可以根据用户的职位、时间、地点、IP 等属性制定不同的访问控制策略。如果是 “财务人员” 在工作时间且在公司内网,可以访问财务系统;如果是 “销售人员” 在外出拜访客户时,只能通过特定的设备和网络访问部分客户信息。
ABAC 的特点是非常灵活,能够实现细粒度的权限管理和动态访问控制。几乎能满足所有类型的需求,但模型构建相对复杂。其应用场景通常是在对权限管理要求非常高、访问场景复杂的环境中,如金融机构、高科技企业等。


(二)其他授权管理模型介绍
ACL(访问控制列表)是一种传统的权限管理模型,每一个需要被访问控制机制保护的资源对象都维持一个独立的关联映射表,记录了对该客体进行访问的实体被授予访问客体的权限以及允许对客体执行哪些操作。例如,在文件系统中,每一个文件都有一个 ACL,记录了哪些用户可以对该文件进行读、写、执行等操作。
实现方式通常是通过维护一个列表,记录主体(用户或用户组)对资源的操作权限。应用场景广泛,如文件系统权限管理、网络设备中的流量控制等。但在大用户量、多业务应用的环境下,ACL 的添加、删除和更改比较复杂,容易出现错误。
DAC(自主访问控制)规定资源可以被哪些主体进行哪些操作,同时,主体可以将资源、操作的权限授予其他主体。在 DAC 模型下,拥有权限的用户可以自主地将权限授予其他用户。例如,在一个文档管理系统中,用户 A 可以将自己拥有的文档的访问权限授予用户 B。
实现方式是在 ACL 的基础上,将授权的权力下放,让用户可以自主授权。应用场景常见于一些需要灵活授权的系统,如文件共享系统等。但 DAC 的安全风险也来自自主,可能会导致权限管理过于分散。
MAC(强制访问控制)规定资源可以被哪些类别的主体进行哪些操作,同时规定主体可以对哪些级别的资源进行哪些操作。当一个操作同时满足这两个条件时,才允许操作。例如,在军事系统中,文件被分为不同的安全级别,用户也被赋予不同的安全级别,只有用户的安全级别高于或等于文件的安全级别时,才能访问该文件。
实现方式是对主体和资源都赋予一定的安全级别,由系统硬性限制访问权限。应用场景主要是在机密机构或者其他等级观念强烈的行业,如军事、政府等领域。但对于商业服务系统,由于其不够灵活而不太适用。




海上孤帆 发表于 2024-10-10 11:45:10

三、安全设计之数据加密
(一)MySQL 中的数据加密
MySQL 数据库通常使用多种加密技术来保护数据的安全。对于密码安全问题,可以采用加密函数对密码进行处理,如使用 SHA-256、MD5 等哈希算法生成密码的哈希值存储在数据库中。例如,可以使用SELECT SHA2('my_password',256);将密码存储为 SHA-256 哈希值,即使数据库被泄露,攻击者也无法直接获取用户的明文密码。
MySQL 还自带一些加密函数,如AES_ENCRYPT()和AES_DECRYPT()函数,可以方便地对数据进行加密和解密操作。通过使用 AES 加密,数据库管理员可以确保即使数据库被不法分子获取,也无法轻易解密其中的敏感信息。例如:SELECT AES_ENCRYPT('my_secret_data', 'my_key');进行加密,SELECT AES_DECRYPT(encrypted_data, 'my_key');进行解密。
除了使用自带函数,还可以结合其他加密库来增强数据加密效果。例如,使用第三方库对数据进行更复杂的加密操作,进一步保护数据资产。


(二)API 接口加密
在项目中,API 接口加密具有重要作用。首先,它可以保护敏感数据,API 接口常常传输敏感数据,如用户个人信息、支付信息等,未加密的数据容易被攻击者截获,导致数据泄露和安全风险。其次,加密可以防止数据篡改,确保数据在传输过程中不被篡改或损坏,保证数据的完整性和可信度。最后,满足合规要求,许多法规和标准要求对敏感数据进行加密,以确保数据的机密性和完整性。
常用的接口加密实现方式有:
使用 HTTPS 协议:HTTPS 是一种基于 SSL/TLS 协议的加密通信协议,可以对 API 接口的数据进行加密。通过将 HTTP 协议升级为 HTTPS 协议,可以确保数据在传输过程中的安全。
使用 API 网关:对所有 API 请求进行统一管理和加密,提供身份验证、授权、流量管理和加密等功能,确保 API 接口的安全性。
自定义加密算法:如果需要更高级别的安全性,可以自定义加密算法对 API 接口的数据进行加密,涉及加密算法的选择、密钥管理、加密模式等因素。
下面通过 Java 代码进行一个示例演示采用 AES(对称加密)算法对 api 接口进行加密和解密的操作:
import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;



public class APIEncryption {

private static final String ALGORITHM = "AES";

private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";

private static final String SECRET_KEY = "your-secret-key"; // 替换为实际的密钥



// 加密方法

public static String encrypt(String plainText) throws Exception {

Cipher cipher = Cipher.getInstance(TRANSFORMATION);

cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM));

byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());

return Base64.getEncoder().encodeToString(encryptedBytes);

}



// 解密方法

public static String decrypt(String encryptedText) throws Exception {

Cipher cipher = Cipher.getInstance(TRANSFORMATION);

cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM));

byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));

return new String(decryptedBytes);

}

}


(三)UniApp 数据加密与安全保护
在 UniApp 中,可以使用对称加密(如 AES)和非对称加密(如 RSA)对数据进行加密。例如,安装crypto-js库,在需要加密和解密的页面中引入该库,使用 AES 算法对敏感数据进行加密:
// 密钥

const key = CryptoJS.enc.Utf8.parse('1234567890123456')

// 偏移量

const iv = CryptoJS.enc.Utf8.parse('1234567890123456')

// 需要加密的数据

const data = '需要加密的数据'

// 加密后的数据

const encryptedData = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString()

console.log(encryptedData)



使用 AES 算法对加密的数据进行解密:

// 密钥

const key = CryptoJS.enc.Utf8.parse('1234567890123456')

// 偏移量

const iv = CryptoJS.enc.Utf8.parse('1234567890123456')

// 需要解密的数据

const encryptedData = '加密后的数据'

// 解密后的数据

const decryptedData = CryptoJS.AES.decrypt(encryptedData, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8)

console.log(decryptedData)
在 UniApp 中还可以使用 RSA 算法实现数字签名校验,生成密钥对,使用私钥对数据进行签名,然后使用公钥对签名进行验证。
为了防止劫持与篡改,可以使用 HTTPS 保护数据传输,在manifest.json文件中进行相应配置。同时,还可以通过权限控制来限制不同用户对数据的访问权限,例如使用 OAuth 等身份验证协议进行权限控制。
四、安全设计之安全审计

(一)安全审计的概念和目的
安全审计是一个新概念,它指由专业审计人员根据有关的法律法规、财产所有者的委托和管理当局的授权,对计算机网络环境下的有关活动或行为进行系统的、独立的检查验证,并作出相应评价。安全审计的目标在于保障信息系统安全,通过对系统的安全策略、操作和事件进行评估和审查,及时发现并识别出信息系统的安全漏洞,包括系统漏洞、应用漏洞、网络漏洞等,评估风险,确定哪些漏洞可能会对系统造成威胁,以及这些威胁的程度和影响范围。同时,安全审计也为潜在安全风险的防范提供有力支持,通过定期进行安全审计,可以及时发现并纠正安全问题,预防潜在的攻击行为。此外,安全审计还能为事故调查提供依据,当安全事件发生后,安全审计记录的系统安全事件可以帮助安全人员审计系统的可靠性和安全性,对妨碍系统运行的明显企图及时报告给安全控制台,及时采取措施。


(二)安全审计的方法和步骤
安全审计的常用方法有很多。风险评估是一种重要方法,通过评估组织的 IT 基础设施,确定潜在的安全风险,包括确定需要保护的资产、可能对这些资产构成风险的威胁以及可能被攻击者利用的漏洞。漏洞扫描工具可用于识别组织 IT 基础设施中的任何安全漏洞,包括操作系统、应用程序和网络基础设施中的漏洞。渗透测试可以模拟真实世界中对组织 IT 基础设施的攻击,有助于识别任何可能被攻击者利用的安全漏洞。代码审查则是对程序源代码进行检查和分析,发现源代码在软件设计、测试、应用部署等各阶段中可能存在的安全缺陷或安全漏洞。
安全审计的步骤和流程如下:首先确定目标,在执行审计之前,审计师应清楚了解组织的 IT 环境、目标和风险,同时了解网络安全框架和最佳实践。接着收集信息,可以通过风险评估、漏洞扫描工具、渗透测试等方式完成,观察结果和数据。然后制定计划,根据收集到的信息制定详细的审计计划。之后执行审计,评估组织网络安全控制措施的有效性,审查已收集的数据,确定任何潜在的安全漏洞或风险。再将审计结果记录在报告中,并提出改进建议,报告应简明扼要,通俗易懂,包括可由组织实施以改善其安全状况的建议。最后跟进整改,审计师应跟踪组织安全状况的进展,并根据需要提出进一步的改进建议。


(三)安全审计的工具和技术
安全审计的工具众多,如 Nessus 是一款广泛使用的漏洞扫描工具,它可以扫描网络中的各种设备,发现潜在的安全漏洞。OpenVAS 也是一款强大的开源漏洞扫描器,能够对系统进行全面的安全评估。Nikto 主要用于 Web 服务器的漏洞扫描,可以检测出多种 Web 应用漏洞。
安全审计技术包括渗透测试、漏洞扫描、风险评估等。渗透测试通过模拟黑客攻击等方式,对信息系统进行渗透测试,以发现和评估系统的安全性。漏洞扫描利用专业的漏洞扫描工具,对信息系统进行扫描,发现并报告潜在的安全漏洞。风险评估则对信息系统的安全风险进行评估,确定漏洞对系统的威胁程度和影响范围。
安全审计标准有 ISO 27001、PCI DSS、HIPAA 等。ISO 27001 是信息安全管理体系标准,为组织提供了一套全面的信息安全管理框架。PCI DSS 是支付卡行业数据安全标准,旨在确保支付卡数据的安全。HIPAA 是美国健康保险便携性和责任法案,对医疗保健行业的信息安全提出了严格要求。




海上孤帆 发表于 2024-10-10 11:45:19

五、安全设计之漏洞管理
(一)漏洞发现与分类
漏洞发现的方法:
主动扫描:使用专业的漏洞扫描工具,定期对系统进行全面扫描,以发现潜在的安全漏洞。例如,Nessus 和 OpenVAS 等工具可以扫描网络中的各种设备,包括服务器、工作站、网络设备等,发现操作系统、应用程序和网络基础设施中的漏洞。据统计,主动扫描能够发现约 70% 的已知漏洞。
被动检测:通过部署入侵检测系统(IDS)和入侵防御系统(IPS)等设备,实时监测网络流量,发现异常行为和潜在的漏洞利用尝试。当检测到可疑的网络流量时,系统会发出警报,以便安全人员及时进行调查和处理。
漏洞报告:鼓励内部员工和外部安全研究人员报告发现的安全漏洞。可以建立漏洞奖励计划,提高大家发现漏洞的积极性。例如,一些大型互联网公司每年都会收到大量来自外部安全研究人员的漏洞报告,有效提高了系统的安全性。
漏洞的分类方法:
按严重程度分类:
紧急:可以直接被利用的漏洞,且利用难度较低。被攻击之后可能对网站或服务器的正常运行造成严重影响,或对用户财产及个人信息造成重大损失。
高危:被利用之后,造成的影响较大,但直接利用难度较高的漏洞。或本身无法直接攻击,但能为进一步攻击造成极大便利的漏洞。
中危:利用难度极高,或满足严格条件才能实现攻击的漏洞。或漏洞本身无法被直接攻击,但能为进一步攻击起较大帮助作用的漏洞。
低危:无法直接实现攻击,但提供的信息可能让攻击者更容易找到其他安全漏洞。
信息:本身对网站安全没有直接影响,提供的信息可能为攻击者提供少量帮助,或可用于其他手段的攻击,如社工等。
按类型分类:常见的漏洞类型有 XSS 漏洞、SQL 注入漏洞、CSRF 漏洞、SSRF 漏洞、文件包含漏洞等。以 XSS 漏洞为例,依照攻击利用手法的不同,有本地利用漏洞、反射式漏洞、存储式漏洞三种类型。
按来源分类:可分为内部漏洞、外部漏洞和未知来源漏洞。内部漏洞通常是由于企业内部员工的不当操作或代码错误引起的;外部漏洞则是由外部攻击者发现的漏洞;未知来源漏洞是指来源不明的漏洞,可能是新出现的漏洞或者是尚未被发现的漏洞。
按修复优先级分类:根据漏洞的严重程度、影响范围和被利用的可能性等因素,确定漏洞的修复优先级。紧急和高危漏洞应优先修复,中危和低危漏洞可以根据实际情况安排修复时间。


(二)漏洞管理流程与责任分工
安全漏洞管理流程:
漏洞发现与收集:通过主动扫描、被动检测和漏洞报告等方式,及时发现系统中的安全漏洞,并将漏洞信息进行收集和整理。
评估与分类:对发现的漏洞进行评估,确定漏洞的严重程度、影响范围和修复优先级。根据评估结果,对漏洞进行分类,以便采取相应的修复措施。
分析与复现:对高风险漏洞进行深入分析,了解漏洞的原理和利用方法,以便制定有效的修复方案。同时,通过复现漏洞,验证漏洞的真实性和严重性。
修复与验证:根据漏洞的修复方案,及时进行漏洞修复。修复完成后,进行验证测试,确保漏洞已被彻底修复,系统的安全性得到提高。
跟踪与监控:对已修复的漏洞进行跟踪和监控,防止漏洞再次出现。同时,持续关注系统的安全状况,及时发现新的安全漏洞。
责任分工:
安全管理人员:负责制定漏洞管理策略和流程,组织漏洞扫描和评估工作,协调漏洞修复和验证工作,跟踪和监控漏洞的修复情况。
开发人员:负责修复代码中的安全漏洞,确保软件的安全性。在开发过程中,应遵循安全编码规范,避免引入新的安全漏洞。
测试人员:负责对修复后的漏洞进行验证测试,确保漏洞已被彻底修复。同时,在测试过程中,应关注新的安全漏洞,及时向安全管理人员报告。
运维人员:负责部署漏洞补丁,确保系统的安全性。在运维过程中,应关注系统的安全状况,及时发现和处理安全事件。


(三)漏洞修复与防范措施
漏洞修复的机制:
漏洞补丁的发布:当发现安全漏洞时,软件厂商会及时发布漏洞补丁,以修复漏洞。用户应及时安装漏洞补丁,确保系统的安全性。
风险评估与优先级排序:在修复漏洞之前,应进行风险评估,确定漏洞的严重程度和影响范围。根据评估结果,对漏洞进行优先级排序,优先修复紧急和高危漏洞。
跟踪与监控:在修复漏洞后,应进行跟踪和监控,确保漏洞已被彻底修复,系统的安全性得到提高。同时,持续关注系统的安全状况,及时发现新的安全漏洞。
防范措施:
安全漏洞管理工具与平台的选择与应用:选择合适的漏洞管理工具和平台,如漏洞扫描器、入侵检测系统、入侵防御系统等,对系统进行全面的安全监测和管理。同时,应定期更新漏洞数据库,确保工具和平台的有效性。
团队协作与沟通机制:建立安全团队,加强团队成员之间的协作和沟通。安全管理人员、开发人员、测试人员和运维人员应密切配合,共同做好漏洞管理工作。同时,应建立良好的沟通机制,及时反馈漏洞信息和修复情况。
效果评估与追踪:定期对漏洞管理工作进行效果评估,总结经验教训,不断改进漏洞管理策略和流程。同时,应持续追踪系统的安全状况,及时发现和处理新的安全漏洞。


jingzizx 发表于 2024-10-10 17:06:09

:hug:

jingzizx 发表于 2024-10-10 17:06:22

安全目前是越来越重要
页: [1]
查看完整版本: 安全设计:全方位构筑数字堡垒