自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

千萬別在代碼中使用“用戶”這個詞

譯文
開發(fā) 項目管理
一個項目你搞了六個月,突然你意識到一開始做出的一個小小的簡單假設(shè)完全錯誤。而現(xiàn)在你需要修復(fù)問題,同時保持現(xiàn)有系統(tǒng)正常運行;不用說,耗費的精力比當(dāng)初一開始就弄好要多得多。今天我想告訴諸位一個常見的錯誤,僅僅一個詞會給你帶來無盡的麻煩。我指的是“用戶”這個詞。

[[245493]]

【51CTO.com快譯】一個項目你搞了六個月,突然你意識到一開始做出的一個小小的簡單假設(shè)完全錯誤。而現(xiàn)在你需要修復(fù)問題,同時保持現(xiàn)有系統(tǒng)正常運行;不用說,耗費的精力比當(dāng)初一開始就弄好要多得多。

今天我想告訴諸位一個常見的錯誤,僅僅一個詞會給你帶來無盡的麻煩。我指的是“用戶”這個詞。

這個詞存在兩個基本問題:

1. “用戶”幾乎從來無法很好地描述你的需求。

2. “用戶”助長了一個基本的安全設(shè)計缺陷。

“用戶”這個概念含糊不清,建議你使用更準(zhǔn)確的術(shù)語。

你沒有用戶

首先,沒有哪個軟件系統(tǒng)實際上有“用戶”。乍一看,“用戶”是很到位的描述,但一旦你更認(rèn)真地分析,就會認(rèn)識到你的業(yè)務(wù)邏輯實際上更復(fù)雜。

我們將考慮三個例子,先說一種極端情況。

航空公司預(yù)訂系統(tǒng)沒有“用戶”

我曾為一套航空公司預(yù)訂系統(tǒng)開發(fā)過訪問控制邏輯。以下是一小部分需求:

  • 如果乘客有預(yù)訂號(PNR),可以通過網(wǎng)站查看預(yù)訂。
  • 如果購票者有信用卡號碼的***4位數(shù)字,可以通過網(wǎng)站修改預(yù)訂。
  • 旅行代理人可以查看和修改通過其旅行社完成的預(yù)訂。
  • 有了乘客的身份信息,航空登記代理人可以根據(jù)其角色和機(jī)場來查看和修改預(yù)訂。

不一而足。與人員對應(yīng)的幾個基本概念是“乘客”、“代理人”(網(wǎng)站也可能是代理人)和“購票者”。“用戶”這個概念根本就沒用,我們根本沒有用這個詞――比如在許多請求中,我們要加入乘客和代理人的登錄信息(credential)。

Unix沒有“用戶”

不妨看一個全然不同的情況。Unix(如今名為POSIX)有用戶:用戶可以登錄并運行代碼。這似乎很好,是不是?但不妨仔細(xì)看一下。

如果我們果真經(jīng)歷了所謂的用戶活動,我們有:

  • 通過終端或圖形用戶界面登錄的人員。
  • 還有以“用戶”的身份來運行的系統(tǒng)服務(wù)(比如郵件或Web服務(wù)器),比如nginx可能以httpd用戶的身份來運行。
  • 在服務(wù)器上,常常有多個人員共享的管理帳戶,這些人使用該“用戶”進(jìn)行SSH連接(比如,ubuntu是運行Ubuntu的AWS虛擬機(jī)上的默認(rèn)SSH帳戶)。
  • root,它與上述任何一個都不完全相同。

這是四個截然不同的概念,但在POSIX中它們都叫“用戶”。正如我們稍后會看到的,將所有這些概念籠統(tǒng)稱之為“用戶”這個模糊概念可能會導(dǎo)致許多安全問題。

但就實際操作上,我們甚至沒有辦法在POSIX用戶模式的邊界內(nèi)說“只有Alice和Bob可以登錄到共享的管理員帳戶。”

SaaS提供商沒有“用戶”

Jeremy Green最近在推文中提到了軟件即服務(wù)(SaaS)中的用戶模式,這促使我寫下了這篇文章。他的基本觀點是,SaaS服務(wù)幾乎總是有:

  1.  一家企業(yè)組織中花錢購買服務(wù)的人。
  2. 該企業(yè)組織中一個或多個實際使用該服務(wù)的人。

如果你一開始將這些人合并成一個“用戶”,就會陷入痛苦的深淵。你無法為團(tuán)隊建模,也無法同時針對多個人為支付建模,現(xiàn)在你需要改造系統(tǒng)。

但這只是表明一個更廣泛問題的一個情況:“用戶”這個概念太模糊了。如果你一開始懷疑“用戶”這個詞,極有可能最終意識到你實際上至少有兩個概念:團(tuán)隊(花錢支付和擁有所有權(quán)的單位)和團(tuán)隊成員(實際使用服務(wù)的人) 。

“用戶”是安全問題

“用戶”這個詞不僅僅對業(yè)務(wù)邏輯來說是個問題:它還有嚴(yán)重的安全后果。“用戶”這個詞太含糊了,將兩個全然不同的概念混為一談:

  • 人員。
  • 人員在軟件中的表示。

想明白為什么這是個問題,假設(shè)你訪問了一個惡意網(wǎng)站,該網(wǎng)站托管了一個利用瀏覽器緩沖區(qū)溢出的圖片。遠(yuǎn)程站點現(xiàn)在控制你的瀏覽器,開始將你的所有文件上傳到其服務(wù)器。為什么它能這么做?

因為你的瀏覽器作為你的操作系統(tǒng)這個“用戶”來運行,該“用戶”被認(rèn)為與你這個人一樣,其實你是一種全然不同的“用戶”。你這個用戶不想上傳那些文件。操作系統(tǒng)帳戶(它也是用戶)可以上傳那些文件,又由于你的瀏覽器在你的用戶下運行,因此它的所有操作被認(rèn)為是你想要執(zhí)行的操作。

這就是所謂的困惑的代理問題(Confused Deputy Problem)。如果你使用“用戶”這個詞來描述兩個根本不同的東西是一回事,這個問題極有可能成為你設(shè)計的一部分。

預(yù)先設(shè)計的重要性

想成為高效的程序員,關(guān)鍵是花更少的精力完成同樣的工作。使用“用戶”這樣的含糊術(shù)語為軟件建模需要以后花費大量的時間和精力來修復(fù)。立即開始編寫代碼似乎很高效,但事實恰恰相反。

下次你開始搞新的軟件項目時,花幾個小時預(yù)先確定術(shù)語和概念:你仍然無法做到完全正確,但結(jié)果會好得多。將來你會慶幸自己避免了種種無為的勞動。

原文標(biāo)題:Never use the word “User” in your code,作者:Itamar Turner-Trauring

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來源: 51CTO
相關(guān)推薦

2021-03-29 08:05:15

User項目安全

2023-01-14 15:03:18

WiFi模型

2015-06-09 15:03:38

大數(shù)據(jù)豈止于大

2013-07-23 09:00:59

程序員生產(chǎn)效率

2024-11-07 10:04:48

2021-09-26 15:59:47

支付寶移動應(yīng)用

2017-12-15 15:26:50

網(wǎng)絡(luò)安全安全認(rèn)證深信服

2012-01-05 09:01:47

2014-09-01 09:50:58

程序員

2015-05-22 14:06:16

百度百度搜索這些詞

2019-06-26 08:30:32

計算機(jī)互聯(lián)網(wǎng)iOS

2012-02-21 09:22:45

2011-02-22 09:24:30

諾基亞微軟

2009-07-03 16:21:58

IT系統(tǒng)數(shù)據(jù)中心運維管理

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2021-08-06 09:20:41

IT管理IT領(lǐng)導(dǎo)者CIO

2024-07-26 00:00:08

2020-02-05 08:01:59

傳播爆發(fā)仿真程序

2020-08-25 11:04:48

SaaS云服務(wù)云安全

2022-03-08 09:00:00

Kubernetes容器技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號