当你意识到你在项目开始时所做的轻量级、简单的假设被证明是完全错误的,你已经在这个项目上花费了六个月的时间。现在你需要解决这些问题以保持这个系统的运行,你发现你在这个项目上付出的努力比你预期的要多得多,如果你一开始就以正确的方式做这件事,就不会发生这种情况。今天,我要告诉大家一个常见的错误,一个会给你带来无穷无尽问题的词,那就是“用户”这个词有两个基本错误:’几乎从来都不是一个好的描述。“用户”导致基本的设计安全缺陷。“用户”的概念是模棱两可的,使用更精确的术语几乎总是更好。你没有用户。一开始,没有软件系统真正拥有用户。乍一看,“用户”是一个很好的描述,但当你仔细考虑一下时,你会发现你的业务逻辑实际上比这复杂得多。我将从一个极端案例开始,使用三个示例。航空公司预订系统没有“用户”。我曾经为航空公司预订系统编写访问控制逻辑。以下仅为一小部分要求:旅客可以使用预订记录码通过网站查看预订信息。买家可通过信用卡号后四位修改网站预订信息。旅行社可以查看和修改他们的预订。航空公司值机人员可以根据角色和航空公司查看和修改预订信息,这需要乘客提供身份信息。不再一一列举。与人类相关的一些基本概念是“旅行者”、“代理人”(网站也可以认为是代理人)和“买家”。“用户”这个概念根本没有用,很多请求中我根本不会用到这个词,比如我们的请求中必须包含乘客和代理人的凭证,而不是用户的凭证。Unix没有“用户”。让我们看一个不同的例子。Unix(现在称为POSIX)有用户,他们可以登录并执行代码。看起来不错,不是吗?让我们深入了解一下。如果我们把所有东西都当作“用户”,我们就会有:使用终端或图形界面登录的电子邮件或网络服务器等系统服务也将作为“用户”运行,例如nginx可以作为httpd用户运行。在服务器上,经常会有多人共用一个管理员账号进行SSH登录(比如亚马逊的Ubuntu虚拟机默认的SSH账号是'ubuntu')。root身份不同于上面的其他身份。以上四种几乎是不同的概念,但在POSIX上都是“用户”。稍后我们将看到,将这些概念全部称为“用户”会导致许多安全问题。在操作上,由于POSIX用户模型边界,我们甚至无法找到一种方式来表示“只有Alice和Bob可以使用该帐户登录”。SaaS服务商没有“用户”JeremyGreen最近在推特上谈到了用户模型在SaaS中的应用,这首先提醒了我写这篇文章。他的基本观点是,SaaS服务几乎总是:组织中的某个人为服务付费。一个或多个人共同使用此服务。如果您将这些人作为用户开始,您将陷入痛苦的世界。你不能建立一个团队模型,你不能建立一个同时支付多人的模型,然后你就开始重塑你的系统。现在您在SaaS案例中吸取了教训,让我们来看看您的生活。但这只是众多例子中的一个:“用户”这个概念太模糊了。如果你开始怀疑“用户”这个词,最终你可能会发现,到头来你真的只需要两个概念:团队(用来组织关系和支付)和成员(实际使用服务的人)。“用户”是安全问题“用户”这个词不仅是业务逻辑的问题,还会引发一系列的安全问题。“用户”这个词非常模糊,它本质上融合了两个概念:一个人。他们在软件中的表现。为了说明这个问题,假设您正在访问一个恶意网站,其服务器上的图像导致您的浏览器内存溢出。远程网站控制您的浏览器并开始将您的文件上传到其服务。为什么它能做到这一点?因为浏览器以系统用户身份运行,所以它被认为与作为人类的你一样,而实际上你是不同的。作为“用户”,您不想上传文件。但是系统的账号也是'user',可以上传文件。如果浏览器运行在你的账户下,他的所有行为都将被视为你的意图,也就是说,你让它这样做。事实上,没有。这就是所谓的ConfusedDeputy问题。如果您使用“用户”一词来描述两个根本不同的事物,那么问题很可能是您设计的一部分。前期设计的价值用更少的精力解决同样的问题是成为高效程序员的关键。用像“用户”这样模糊的概念来组织你的软件将浪费大量的时间和精力来解决未来出现的问题。立即开始编码似乎很有成效,但事实恰恰相反。下次你开始一个新的软件项目时,花几个小时预先确定你的术语和概念:你仍然不会完全正确,但你会做得更好。您的未来将感谢您所做的所有废物预防工作。以上是良旭教程网为各位小伙伴分享的User这个词,千万不要在代码中使用。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。
