任务详情
在软件开发和系统架构设计中,安全设计原则是一组指导方针,旨在帮助开发者和设计师构建更安全的系统。这些原则可以减少系统的脆弱性,提高对抗潜在威胁的能力。通过各种资料,尽可能多的搜集安全原则。
- 给出所有你能找到的安全原则的名称,内容和来源信息(图书名称,网站链接,...)。
- 根据2/8原则,选择你认为最重要的20%,给出应用实例(代码编写,命令行应用等),写出实践过程
实践过程
- 安全原则名称
原则1:最小化攻击面:
系统每增加一个功能特性就有可能会引入新的风险,通过安全开发可以减少攻击面进而达到控制系统整体风险的目的。
原则2:Secure default:
在软件领域的含义就是:让默认的配置和策略尽可能的安全。比如,在许多场合,安全和产品体验经常会发生冲突,这时候应当选择安全优先,在安全的前提下,可以允许通过手动关闭安全配置或策略来提升产品体验。
原则3:最小权限原则(Principle of Least Privilege):
用户仅被授予完成其任务所需的最低权限。
原则4:纵深防御:
从不同的维度去实施安全保护措施来缓解被攻击的风险。实施纵深防御策略,可以让攻击变得更加难以实施,漏洞变得更加难以利用。
原则5:Fail securely:
即业务系统能够正确安全地处理各种异常和错误。
原则6:不要信任第三方系统
不少产品需要和第三方的业务系统对接,并使用其提供的数据,但是一般情况下,我们是无法掌控这些第三方系统的安全设计和开发过程的,所以它们也可能会存在安全漏洞,进而被人攻击,因此,我们必须充分考虑到当第三方系统被攻击时,如何保障自己的业务系统的安全性。
原则7:业务隔离:
基本思想是将业务系统尽分成尽可能多的独立单元,但某个单元出现安全缺陷时,可以将损害程度降到最低,通俗地说,就是不要把所有鸡蛋都放在一个篮子里。
原则8:公开设计:
有些人认为,只要产品内部的实现细节不被外人知道,那么产品就是安全的,但其实这是一种保护效果比较差的方法。当然,并不是说这样做毫无意义,也的确增加了攻击的难度,但是不能对其形成过多依赖,甚至把它当成主要或唯一的安全防护手段。
原则9:简化系统设计
“最小化攻击面”和“简化系统设计”原则是相辅相成的,由于复杂的系统设计会导致攻击面变宽,所以如果存在多种系统设计方案,则应尽量选择最简单的那种方案。
原则10:强密码策略(Strong Password Policy):要求用户使用足够长、复杂和随机的密码,并定期更改密码。
原则11:失败保险默认原则
该原则指的是系统的设计、实现和运营应该是透明和公开的,使得外界可以了解系统的工作原理和内部机制。这样做有以下优点:
原则12:分层安全(Layered Security):通过在不同层面上实施多重安全措施来保护系统,例如网络层、应用层和数据层。
原则13:经济性原则(Economy of Mechanism)
安全机制设计尽可能简单短小,从而在排查缺陷、检测漏洞时代码更容易处理
原则15:默认拒绝原则(Fail-Safe Defaults)
只要没有授权的信息就不允许访问
不能出现本该允许的请求被拒绝与本该拒绝的请求被允许
原则16:开放设计原则(Open Design)
不将安全机制的设计作为秘密,不将系统安全性寄托在保守安全机制设计秘密的基础上
应在隔开安全机制设计方案的前提下,借助容易保护的特定元素,如密钥、口令等来增强系统的安全性
开放设计有助于安全机制接受广泛的审查
来源:https://www.cnblogs.com/fishou/p/4197422.html
https://www.cnblogs.com/liugangjiayou/p/12657828.html
- 应用实例
最小权限原则(Principle of Least Privilege):用户仅被授予完成其任务所需的最低权限。
在命令行应用中的实践过程:
在Linux系统中,使用sudo命令来执行特权操作时,仅授予需要执行该操作的用户最低权限。例如,如果用户只需要执行文件的读取操作,不应授予其写入或删除文件的权限。
在Windows系统中,使用用户账户控制 (User Account Control, UAC) 来限制用户对系统资源的访问权限。当需要执行需要管理员权限的操作时,系统会提示用户确认,以防止意外或恶意操作。
通过实施最小权限原则,可以减少用户或进程的权限范围,限制其对敏感数据和功能的访问,从而降低系统被滥用或攻击的风险。这种实践可以在应用程序开发和系统管理中广泛应用。
通过在Python应用程序中实施最小权限原则:
# 创建数据库连接
conn = sqlite3.connect('example.db')
# 创建只读权限的数据库游标
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
result = cursor.fetchall()
for row in result:
print(row)
# 关闭数据库连接
conn.close()
创建了一个SQLite数据库连接,并使用只读权限的游标执行了一个查询操作。通过将用户的权限限制为只读,确保在该应用程序中,用户无法执行任何修改数据库的操作。这样一来,即使应用程序的其他部分出现了漏洞或被攻击,用户也无法对数据库进行恶意操作。
遵循了最小权限原则,确保用户仅被授予完成其任务所需的最低权限。这样可以减少潜在的安全风险,增加了应用程序的安全性。当然,在实际开发中,还需要结合其他安全措施来全面保护应用程序的安全。