<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」這個(gè)單詞?

          共 2299字,需瀏覽 5分鐘

           ·

          2021-05-16 10:57




          來(lái)源:21cto.com/article/2093

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

          你沒(méi)有使用者

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

          Unix 沒(méi)有 “users”

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

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

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

          “Users” 是一個(gè)安全問(wèn)題

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

          為什么它能這樣做?

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

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

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







          回復(fù) 【關(guān)閉】學(xué)關(guān)
          回復(fù) 【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù) 【被刪】學(xué)個(gè)
          回復(fù) 【訪客】學(xué)
          回復(fù) 【小程序】學(xué)獲取15套【入門+實(shí)戰(zhàn)+賺錢】小程序源碼
          回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識(shí)手冊(cè)
          回復(fù) 【2019】獲取2019 .NET 開(kāi)發(fā)者峰會(huì)資料PPT
          回復(fù) 【加群】加入dotnet微信交流群

          輸入任意文字即可激活,這款軟件愛(ài)了!


          又來(lái)一個(gè)神奇的網(wǎng)站!


          瀏覽 53
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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级猛片在线观看,女人毛片a级大学 | 日本熟妇一区二区三区 |