<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>

          為什么不能在代碼中使用「User」這個單詞?

          共 3204字,需瀏覽 7分鐘

           ·

          2020-08-16 06:11




          來源:21cto.com/article/2093

          當(dāng)你意識到你在項目開始時做的輕量、簡單的設(shè)想竟然完全錯了時,你已經(jīng)用了六個月的時間投入到這個項目上。
          現(xiàn)在你需要解決這些問題,才能讓這個系統(tǒng)繼續(xù)運(yùn)行下去,你發(fā)現(xiàn)你用在這個項目上的精力遠(yuǎn)遠(yuǎn)超出了你的預(yù)期,如果一開始就用正確的方式來做,就不會發(fā)生這樣的事。
          今天,我要告訴你的是一個經(jīng)常犯的錯誤,一個會給你帶來無窮無盡的問題的單詞,那就是“users”
          這個單詞有兩個最基本的錯誤:
          1. 對你的需求來說 “User” 幾乎從來都不是一個好的描述。
          2. “User” 會導(dǎo)致一個基本的設(shè)計安全缺陷。“user” 的概念是模糊不清的,使用更精準(zhǔn)的術(shù)語幾乎總是能起到更好的效果。

          你沒有使用者

          最開始,沒有任何一個軟件系統(tǒng)真的有使用者存在。乍一看“user”是一個好的描述,但是你稍微一想就會意識到你的業(yè)務(wù)邏輯實際上比這要復(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)致很多安全問題。
          在操作上,因為POSIX的用戶模型邊界存在,我們甚至不能找到一種方式說“只能讓 Alice 和 Bob 通過這個賬號登錄”。

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

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

          “Users” 是一個安全問題

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

          為什么它能這樣做?

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

          前期設(shè)計的價值

          花更少的功夫處理相同的問題是成為高產(chǎn)程序員的關(guān)鍵。使用模糊不清的概念比如“用戶”來組織你的軟件,將會話費(fèi)大量時間和精力來解決未來發(fā)生的問題。一上來就開始編碼看起來是高產(chǎn)的,事實恰好相反。
          下次你開始一個新的軟件項目時,花幾個小時預(yù)先確定你的術(shù)語和概念:你仍然不會完全正確,但你會做得更好。未來的你將感謝你所做的所有預(yù)防浪費(fèi)的工作。
          往期推薦
          知乎熱議:為什么美國程序員不用加班,而中國程序員就只能996?
          10大程序員必逛網(wǎng)站,良心推薦,建議收藏!
          MySQL 的這個 BUG,坑了多少人?
          ASP.NET Core 學(xué)習(xí)手冊

          回復(fù) 【關(guān)閉】學(xué)關(guān)
          回復(fù) 【實戰(zhàn)】獲取20套實戰(zhàn)源碼
          回復(fù) 【福利】獲取最新微信支付有獎勵
          回復(fù) 【被刪】學(xué)
          回復(fù) 【訪客】學(xué)
          回復(fù) 【卡通】學(xué)制作微信卡通頭像
          回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識手冊
          回復(fù) 【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          瀏覽 105
          點(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片在线免费观看网址 | 中国日本一级片 |