我将很快构建一个Web应用程序,我将需要一个安全模型,以便不同的用户可以访问应用程序的不同部分和/或应用程序的这些特定部分中的不同数据集。我正在讨论以下两种实现安全性的方法:
白名单默认情况下,用户可以访问任何内容,并被授予对所需内容的访问权限。
或
黑名单默认情况下,用户可以访问所有内容,并且可以从他们不需要的内容中删除他们的访问权限。
有哪种方法首选的最佳做法?如果有另一种方法可以更好地解决这个问题,那么也很有趣。
感谢。
答案 0 :(得分:23)
来自经典论文"The Protection of Information in Computer Systems" (Saltzer & Schroeder 1975),其中描述了八个重要的设计原则,其中之一是:
故障安全默认值:基本访问权限 关于许可的决定而不是 排除。建议这个原则 由E. Glaser在1965年8表示 默认情况是缺乏访问权限, 并且保护方案确定 访问的条件 允许的。替代方案,其中 机制试图识别 访问的条件 被拒绝,出错了 安全系统的心理基础 设计。保守的设计必须是 基于对象应该为什么的参数 可以访问,而不是为什么 不应该。在一个大型系统中 对象将是不充分的 考虑,所以默认缺乏 许可更安全。一个设计或 机制中的实施错误 这给了明确的许可倾向 通过拒绝许可而失败,一个安全 情况,因为它会很快 检测。另一方面,一个设计 或实施中的错误 明确排除的机制 通过允许访问往往会失败 访问,可能会失败 在正常使用中未被注意到。这个 原则适用于外在的 保护机制的外观 及其基本实施。
答案 1 :(得分:11)
白名单。使用黑名单时,您必须考虑可能无效的所有输入。使用白名单,您只需考虑什么是有效的。
答案 2 :(得分:6)
让我们想象一下,你有一套门钥匙,你可以让别人访问。
您是否愿意通过所有的钥匙并尝试取出这个人绝对不需要的钥匙,然后给他们休息?或者你宁愿给他们他们绝对需要的钥匙而拒绝他们剩下的钥匙?
哪个错误的可能性更大?
答案 3 :(得分:3)
安全性始终围绕您所谓的“白名单”。把它们锁在一切之外,只打开他们需要的东西。
答案 4 :(得分:2)
你不知道你不知道的是什么。
有许多方法可以逃避用户验证(使用UTF-8或其他编码等),以及多种方式来进行跨站点脚本攻击。您确定可以提出涵盖所有可能攻击的黑名单吗?这个清单可能是无限的。
然而,提出好的清单会更容易,因此更加安全。
答案 5 :(得分:1)
在Web应用程序的场景中,我总是使用白名单。通常,为用户提供的功率太少而不是太多。
答案 6 :(得分:1)
即使您错过了一些不易受攻击的事情,也要始终使用白名单。
答案 7 :(得分:0)
悲观的看法说白名单,乐观的观点会说黑名单。在线,我更加尊重安全性,所以如果需要白名单/黑名单,请务必使用白名单。