成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

永遠不要在代碼中使用“User”這個詞!

開發 前端 開發工具
當你意識到你在項目開始時做的輕量、簡單的設想竟然完全錯了時,你已經用了六個月的時間投入到這個項目上。

[[390084]] 

圖片來自 Pexels

現在你需要解決這些問題,才能讓這個系統繼續運行下去,你發現你用在這個項目上的精力遠遠超出了你的預期,如果一開始就用正確的方式來做,就不會發生這樣的事。

今天,我要告訴你的是一個經常犯的錯誤,一個會給你帶來無窮無盡的問題的單詞,那就是“users”。

這個單詞有兩個最基本的錯誤:

  • 對你的需求來說 “User” 幾乎從來都不是一個好的描述。
  • “User” 會導致一個基本的設計安全缺陷。

“user” 的概念是模糊不清的,使用更精準的術語幾乎總是能起到更好的效果。

你沒有使用者

最開始,沒有任何一個軟件系統真的有使用者存在。乍一看“user”是一個好的描述,但是你稍微一想就會意識到你的業務邏輯實際上比這要復雜的多。

我會使用三個例子,從一個極端的情況出發。

①機票預訂系統沒有“users”

我曾經給機票預訂系統寫過訪問控制邏輯,下面只是一小部分需求:

  • 旅客可以使用預定記錄碼通過網站查看預定信息。
  • 購買者可以通過信用卡號后四位數在網站上修改預訂信息。
  • 旅行社可以查看和修改他們的預訂。
  • 航空公司的值機人員可以根據角色和航空公司來查看和修改預訂信息,這需要旅客提供身份信息。

不再一一列舉。一些與人類相關的基本概念是“旅客”,“代理”(網站也可是看作代理)和“購買者”。

“user”這個概念根本沒用,并且在許多請求中我根本不會使用這個單詞,舉個例子,我們的請求必須包括旅客和代理人的證件,而不是使用者的證件。

②Unix 沒有 “users”

我們看一個不太一樣的例子。Unix(這些天被稱為 POSIX)有用戶,他們可以登錄并執行代碼。這樣看起來很不錯吧?我們深入看一下。

如果我們把所有都當作“users”的話,我們將會有:使用終端或者圖形界面登錄的人。

  • 像郵件或者 web 服務器這種系統服務也會以“users”的身份運行,例如 nginx 可以以 httpd 用戶運行。
  • 在服務器上經常會有多人共享一個管理員賬號用來 SSH 登錄(例如,亞馬遜的 Ubuntu 虛擬機默認 SSH 賬號就是‘ubuntu’)。
  • root 身份,和上面其他身份都不同。

上面四個是幾乎不同的概念,但是在 POSIX 上他們都是 “users”。一會兒我們就會看到,把這些概念都稱為‘user’會導致很多安全問題。

在操作上,因為 POSIX 的用戶模型邊界存在,我們甚至不能找到一種方式說“只能讓 Alice 和 Bob 通過這個賬號登錄”。

③SaaS 服務提供商沒有 “users”

Jeremy Green 最近就用戶模型在 SaaS 中的應用在推特上發文,它第一次提醒了我寫下這篇文章。

他的基本觀點是 SaaS 服務幾乎總是:

  • 某個組織中的一個人支付服務費用。
  • 一個或多個人共同使用這個服務。

如果你一開始就把這些人作為一個用戶,你將會陷入一個痛苦的世界。你無法建立團隊模型,你無法組建同時為多人支付的模型,然后你就會開始改造你的系統。現在你在 SaaS 案例中學到了一課,我們來看一看你的生活。

但是這只是眾多例子中的一個:“users”的概念太模糊了。如果你開始懷疑“user”這個詞,最終你可能發現最終你其實只需要兩個概念:團隊(用來組織關系和支付)和成員(實際使用服務的人)。

“Users” 是一個安全問題

“user”這個單詞不僅是業務邏輯的問題,它也導致了一系列安全問題。

“user” 這個單詞如此的模糊以至于從根本上將兩個概念合并了:

  • 一個人。
  • 他們在軟件中的代表性。

為了說明這個問題,假設你正在訪問一個居心不良的網站,在它服務器上的圖片導致了你的瀏覽器內存溢出。

遠程網站控制著你的瀏覽器,并且開始將你的文件上傳到他的服務上。為什么它能這樣做?

因為瀏覽器是以系統用戶的身份運行的,它被認為與人類身份的你相同,實際上你們是不同的。

你作為’user’,不想上傳文件。但是系統的賬號也是‘user’,能夠上傳文件,如果瀏覽器運行在你的賬號之下,他所有的行為會被當作是你的意圖,也就是說是你讓它這么做的,實際上不是。

這就是被稱為 Confused Deputy 的問題。如果你使用“用戶”這個詞來描述兩個根本不同的東西,那么這個問題就更有可能成為你設計的一部分。

前期設計的價值

花更少的功夫處理相同的問題是成為高產程序員的關鍵。使用模糊不清的概念比如“用戶”來組織你的軟件,將會話費大量時間和精力來解決未來發生的問題。一上來就開始編碼看起來是高產的,事實恰好相反。

下次你開始一個新的軟件項目時,花幾個小時預先確定你的術語和概念:你仍然不會完全正確,但你會做得更好。未來的你將感謝你所做的所有預防浪費的工作。

作者:有馬·譯

編輯:陶家龍

出處:http://suo.im/4umFxa

 

責任編輯:武曉燕 來源: suo.im/4umFxa
相關推薦

2018-10-11 09:00:00

軟件開發代碼用戶

2019-04-15 14:05:56

MySQLUTF-8數據庫

2023-08-31 09:10:18

JavaScript調試

2018-06-25 14:29:45

MySQLbug數據庫

2023-09-27 10:19:37

類型video函數

2018-07-16 16:29:26

編程函數代碼

2022-08-10 14:36:05

Python循環函數

2023-03-20 11:36:28

Linux命令

2015-06-09 15:03:38

大數據豈止于大

2014-08-20 11:17:03

2013-12-09 11:06:47

2013-07-23 09:00:59

程序員生產效率

2020-06-04 08:10:30

Python字符串開發

2021-10-18 10:53:26

Go 代碼技術

2020-06-23 14:52:04

Python無用分號語言

2023-11-30 09:00:00

TypeScript開發

2015-09-01 10:29:44

數據安全

2021-04-26 09:33:46

Go Iota語言

2009-09-11 08:39:33

2015-10-10 10:36:00

warning category
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美三级成人理伦 | 久久久久国产一区二区三区四区 | 欧美一级片在线看 | 91在线影院 | 日本一区二区影视 | 在线观看亚洲专区 | 成人黄色网址大全 | 国产极品粉嫩美女呻吟在线看人 | 日韩中文字幕区 | 九色 在线 | 亚洲欧美视频一区 | 毛片一级黄色 | 一区二区伦理电影 | 天天操操操操操 | 久久日韩粉嫩一区二区三区 | 国产精品一区二区在线 | caoporn地址 | 日日射夜夜骑 | 亚洲一区二区三区在线免费 | 亚洲综合五月天婷婷 | 天天影视色综合 | 在线一级片 | 国产麻豆一区二区三区 | 欧美视频在线看 | 亚洲精品区 | 一区二区国产精品 | 不卡一区二区在线观看 | 亚洲在线 | 97精品久久 | 亚洲一区二区黄 | 亚洲一区二区av在线 | 亚洲一区二区免费视频 | 91福利在线观看视频 | 天天久久 | 日韩一级精品视频在线观看 | 国产ts人妖一区二区三区 | 国产欧美一区二区精品忘忧草 | 婷婷开心激情综合五月天 | 色一级| 亚洲永久入口 | 婷婷福利 |