<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          永遠(yuǎn)不要在代碼中使用「User」這個單詞!

          共 2585字,需瀏覽 6分鐘

           ·

          2020-08-09 07:11

          點(diǎn)擊上方“碼農(nóng)突圍”,馬上關(guān)注
          這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包
          真愛,請?jiān)O(shè)置“星標(biāo)”或點(diǎn)個“在看”
          來源:21cto.com/article/2093
          當(dāng)你意識到你在項(xiàng)目開始時做的輕量、簡單的設(shè)想竟然完全錯了時,你已經(jīng)用了六個月的時間投入到這個項(xiàng)目上。
          現(xiàn)在你需要解決這些問題,才能讓這個系統(tǒng)繼續(xù)運(yùn)行下去,你發(fā)現(xiàn)你用在這個項(xiàng)目上的精力遠(yuǎn)遠(yuǎn)超出了你的預(yù)期,如果一開始就用正確的方式來做,就不會發(fā)生這樣的事。
          今天,我要告訴你的是一個經(jīng)常犯的錯誤,一個會給你帶來無窮無盡的問題的單詞,那就是“users”
          這個單詞有兩個最基本的錯誤:
          1. 對你的需求來說 “User” 幾乎從來都不是一個好的描述。
          2. “User” 會導(dǎo)致一個基本的設(shè)計(jì)安全缺陷?!皍ser” 的概念是模糊不清的,使用更精準(zhǔn)的術(shù)語幾乎總是能起到更好的效果。

          你沒有使用者

          最開始,沒有任何一個軟件系統(tǒng)真的有使用者存在。乍一看“user”是一個好的描述,但是你稍微一想就會意識到你的業(yè)務(wù)邏輯實(shí)際上比這要復(fù)雜的多。
          我會使用三個例子,從一個極端的情況出發(fā)。機(jī)票預(yù)訂系統(tǒng)沒有“users”
          我曾經(jīng)給機(jī)票預(yù)訂系統(tǒng)寫過訪問控制邏輯,下面只是一小部分需求:
          1. 旅客可以使用預(yù)定記錄碼通過網(wǎng)站查看預(yù)定信息。
          2. 購買者可以通過信用卡號后四位數(shù)在網(wǎng)站上修改預(yù)訂信息。
          3. 旅行社可以查看和修改他們的預(yù)訂。
          4. 航空公司的值機(jī)人員可以根據(jù)角色和航空公司來查看和修改預(yù)訂信息,這需要旅客提供身份信息。
          不再一一列舉。一些與人類相關(guān)的基本概念是“旅客”,“代理”(網(wǎng)站也可是看作代理)和“購買者”。“user”這個概念根本沒用,并且在許多請求中我根本不會使用這個單詞,舉個例子,我們的請求必須包括旅客和代理人的證件,而不是使用者的證件。

          Unix 沒有 “users”

          我們看一個不太一樣的例子。Unix (這些天被稱為POSIX)有用戶,他們可以登錄并執(zhí)行代碼。這樣看起來很不錯吧?我們深入看一下。
          如果我們把所有都當(dāng)作“users”的話,我們將會有:
          1. 使用終端或者圖形界面登錄的人
          2. 像郵件或者web服務(wù)器這種系統(tǒng)服務(wù)也會以“users”的身份運(yùn)行,例如nginx可以以httpd用戶運(yùn)行。
          3. 在服務(wù)器上經(jīng)常會有多人共享一個管理員賬號用來SSH登錄(例如,亞馬遜的Ubuntu虛擬機(jī)默認(rèn)SSH賬號就是‘ubuntu’)
          4. root 身份,和上面其他身份都不同。
          上面四個是幾乎不同的概念,但是在POSIX上他們都是 “users”. 一會兒我們就會看到,把這些概念都稱為‘user’會導(dǎo)致很多安全問題。
          在操作上,因?yàn)镻OSIX的用戶模型邊界存在,我們甚至不能找到一種方式說“只能讓 Alice 和 Bob 通過這個賬號登錄”。

          SaaS 服務(wù)提供商沒有 “users”

          Jeremy Green 最近就用戶模型在SaaS中的應(yīng)用在推特上發(fā)文,它第一次提醒了我寫下這篇文章,他的基本觀點(diǎn)是
          SaaS 服務(wù)幾乎總是:
          1. 某個組織中的一個人支付服務(wù)費(fèi)用。
          2. 一個或多個人共同使用這個服務(wù)。
          如果你一開始就把這些人作為一個用戶,你將會陷入一個痛苦的世界。你無法建立團(tuán)隊(duì)模型,你無法組建同時為多人支付的模型,然后你就會開始改造你的系統(tǒng)?,F(xiàn)在你在SaaS案例中學(xué)到了一課,我們來看一看你的生活。
          但是這只是眾多例子中的一個:“users”的概念太模糊了。如果你開始懷疑“user”這個詞,最終你可能發(fā)現(xiàn)最終你其實(shí)只需要兩個概念:團(tuán)隊(duì)(用來組織關(guān)系和支付)和成員(實(shí)際使用服務(wù)的人)。

          “Users” 是一個安全問題

          “user” 這個單詞不僅是業(yè)務(wù)邏輯的問題,它也導(dǎo)致了一系列安全問題。
          “user” 這個單詞如此的模糊以至于從根本上將兩個概念合并了:
          1. 一個人。
          2. 他們在軟件中的代表性。
          為了說明這個問題,假設(shè)你正在訪問一個居心不良的網(wǎng)站,在它服務(wù)器上的圖片導(dǎo)致了你的瀏覽器內(nèi)存溢出。遠(yuǎn)程網(wǎng)站控制著你的瀏覽器,并且開始將你的文件上傳到他的服務(wù)上。

          為什么它能這樣做?

          因?yàn)闉g覽器是以系統(tǒng)用戶的身份運(yùn)行的,它被認(rèn)為與人類身份的你相同,實(shí)際上你們是不同的。你作為’user’,不想上傳文件。但是系統(tǒng)的賬號也是‘user’,能夠上傳文件,如果瀏覽器運(yùn)行在你的賬號之下,他所有的行為會被當(dāng)作是你的意圖,也就是說是你讓它這么做的,實(shí)際上不是。
          這就是被稱為Confused Deputy的問題。如果你使用“用戶”這個詞來描述兩個根本不同的東西,那么這個問題就更有可能成為你設(shè)計(jì)的一部分。

          前期設(shè)計(jì)的價值

          花更少的功夫處理相同的問題是成為高產(chǎn)程序員的關(guān)鍵。使用模糊不清的概念比如“用戶”來組織你的軟件,將會話費(fèi)大量時間和精力來解決未來發(fā)生的問題。一上來就開始編碼看起來是高產(chǎn)的,事實(shí)恰好相反。
          下次你開始一個新的軟件項(xiàng)目時,花幾個小時預(yù)先確定你的術(shù)語和概念:你仍然不會完全正確,但你會做得更好。未來的你將感謝你所做的所有預(yù)防浪費(fèi)的工作。

          ---END---
          重磅!碼農(nóng)突圍-技術(shù)交流群已成立

          掃碼可添加碼農(nóng)突圍助手,可申請加入碼農(nóng)突圍大群和細(xì)分方向群,細(xì)分方向已涵蓋:Java、Python、機(jī)器學(xué)習(xí)、大數(shù)據(jù)、人工智能等群。
          一定要備注:開發(fā)方向+地點(diǎn)+學(xué)校/公司+昵稱(如Java開發(fā)+上海+拼夕夕+猴子),根據(jù)格式備注,可更快被通過且邀請進(jìn)群

          ▲長按加群

          推薦閱讀

          ? ?微軟蘇州集體抵制來自阿里、華為的跳槽者:請停止你的“奮斗逼”行為!網(wǎng)友:看到 955 不加班的公司名單,我酸了
          ???面試:如何決定使用 HashMap 還是 TreeMap?
          ???一千個不用 Null 的理由!
          ???干掉 "try catch "
          ?? 那些還在外包公司干的程序員們,快醒醒吧!
          ?? 面試官:為什么 HashMap 的加載因子是0.75?
          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
          獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù)?BAT?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
          如有收獲,點(diǎn)個在看,誠摯感謝明天見(??ω??)??

          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性爱网站大全 | 狠狠插视频 | A∨大香蕉 | 北条麻妃九九九视频 | 特黄AAAAAAA片免费看 |