我将很快构建一个Web应用程序,我将需要一个安全模型,以便不同的用户可以访问应用程序的不同部分和/或应用程序的这些特定部分中的不同数据集.我正在讨论以下两种实现安全性的方法:
白名单:默认情况下,用户可以访问任何内容,并被授予访问所需内容的权限.
要么
黑名单:默认情况下,用户可以访问所有内容,并且可以从他们不需要的内容中删除他们的访问权限.
有哪种方法是首选的最佳做法?如果有另一种方法可以更好地解决这个问题,那么也很有趣.
谢谢.
来自经典论文"计算机系统中的信息保护"(Saltzer&Schroeder 1975),其中描述了八个重要的设计原则,其中之一是:
故障安全默认值:基本访问权限决定权限而非排除权.E. Glaser在1965年提出的这一原则意味着默认情况是缺乏访问,而保护方案确定了允许访问的条件.替代方案,其中机制试图确定应拒绝访问的条件,为安全系统设计提供了错误的心理基础.保守的设计必须基于为什么对象应该可访问的参数,而不是为什么它们不应该访问.在大型系统中,某些对象将被不充分考虑,因此缺少权限的默认值更安全.提供明确许可的机制中的设计或实现错误往往会因拒绝许可而失败,这是一种安全的情况,因为它会被迅速检测到.另一方面,明确排除访问的机制中的设计或实现错误往往会因允许访问而失败,这种错误在正常使用中可能会被忽视.该原则既适用于保护机制的外观,也适用于其基本实施.
白名单.使用黑名单时,您必须考虑可能无效的所有输入.使用白名单,您只需考虑什么是有效的.
让我们想象一下,你有一套门钥匙,你需要给别人访问.
您是否愿意通过所有钥匙并尝试取出这个人绝对不需要的钥匙并给他们休息?或者你愿意给他们他们绝对需要的钥匙并拒绝他们剩下的?
哪个错误的可能性更大?