毕业生的商业软件开发之路-最小权限原则
最小权限原则
C#是基于.NET框架的,而.NET框架相对于微软以前的软件开发框架来说对安全性进行了本质性的提升,此时使用C#进行软件开发时需要注意最小权限申请原则。
所谓最小权限原则就是软件在保证功能能正常执行的情况下,只访问当下所需的信息或者资源,而尽量避免访问不需要的信息或资源,应用程序对系统的权限只能刚刚好让程序功能正常运行;也就是程序高风亮节,主动放弃权限,以示清白。
可以这么理解最小权限原则,对于人类社会,绝对的权力导致绝对的腐败,也就是说一个人权力如果非常大,必然会导致腐败,会占据大量的社会资源而不合理利用,其个人行为会冲击社会的稳定,破坏社会公平,影响社会稳定。因此需要建立一套社会制度,使得每个人不能拥有太大的权力,权力必须受到制约,社会才能和谐发展。
同样,对于计算机的世界,绝对的权力也导致绝对的安全风险,一个程序具有太大的权限,必然会导致系统的不稳定,因为没有什么程序是绝对稳定可靠的,高权限的程序可能有意或者无意的占据着大量的系统资源而不合理利用,个别程序的错误会导致整个系统的崩溃。因此程序不能拥有过量的权限,只能拥有尽可能少的权限,这样整个系统才能安全稳定。这就是最小权限原则。
例如下图所示,某应用程序只需要连接数据库就能正常运行,但在程序运行中,若程序没有特别声明,系统会将当前用户的所有的权限赋予这个应用程序,不但包括连接数据库,还可能包括读取文件和注册表等重要系统资源的权限。此时应用程序不但有着访问数据库的通道,同时还保留着访问文件系统和注册表的通道。
当应用程序正常运行时,能完成应有的功能,同时不会对用户造成任何安全问题,此时用户没有发现问题,非常满意。
不过现代的软件运行环境的安全性比较复杂,病毒、木马、黑客攻击等安全风险都是必须要考虑的,若不考虑则会损害用户的利益。如下图所示:
当应用程序被黑客攻击并被挟持,则黑客会通过应用程序执行不应该执行的功能,比如访问用户系统的文件系统或者注册表,读取或写入敏感数据,造成信息安全事故,这会损害用户的利益,用户很生气,后果很严重。
应用程序可能存在BUG,比如应用程序在开发过程中存在保存调试信息文件的功能,实际运行过程中不应当执行这样的操作,但由于程序错误而意外的执行这样的操作,此时应用程序会写大量的垃圾文件,浪费用户系统的存储资源,也损害用户的利益。
这时候应用程序是不安全的,存在很大的安全风险。
若开发人员在开发这个应用程序时遵循了最小权限原则,主动让应用程序声明没有访问文件系统和注册表的权限。此时应用程序运行如下图所示。
虽然有黑客劫持了应用程序、或者应用程序本身存在BUG,使得应用程序试图访问用户的文件系统或者注册表。由于事先声明没有这方面的权限,因此应用程序无法执行这些操作,反而会导致应用程序错误,提醒用户发生了异常。这样开发人员的深谋远虑保护了用户的利益,用户很庆幸有这样称职的开发人员替他们开发应用系统。
根据上面的分析可以指导,最小权限原则是解决安全风险比较有效的技术手段。能够降低由于黑客攻击或者程序错误而导致的安全问题带来的后果,增强系统的安全防御能力。
由于没有权限而导致的拒绝访问的程序错误很容易导致应用程序无条件立即退出,此时用户输入的数据会来不及保存而丢失,这会损害用户的利益的,而在开发过程中使用最小权限原则能尽早暴露并解决这个问题就能避免这种情况,保护用户的利益。
在开发实践中遵守最小权限原则需要开发人员始终有着安全风险意识,认识到未来的应用程序可能面临着各种各样的安全风险,因此需要小心翼翼的开发应用程序,尽量降低应用程序正常运行所需要的权限,主动放弃不必要的权限,精打细算。
比如要读取文件内容时,只需以只读的方式打开文件,而不是以可读写的方式打开文件;若要保存临时文件,则将临时文件保存在临时目录下,而不是保存在应用程序目录或者系统目录下;系统配置能保存到系统配置文件中就不用保存到系统注册表中,等等等。
现在环境下,信息安全事故频发,有些事故损失还比较大,此时每一个软件开发人员都必须树立起安全意识,充分考虑到各种安全风险,采用各种技术手段来开发出安全的软件。此时最小权限原则就显得比较重要了。
posted on 2013-02-26 08:10 袁永福 电子病历,医疗信息化 阅读(1152) 评论(2) 编辑 收藏 举报