UU看書

第五十一章 whitelist-白名單

天才一秒記住【UU看書】地址:www.uukanshu.co

在Minecraft伺服器中,有一個很重要的系統:白名單系統。

什麼是白名單?簡單來說,白名單就是伺服器隨身攜帶的一個小本本,上面記錄了一些玩家。當一個伺服器啟用白名單系統後,每個玩家想要進入伺服器時,伺服器就會從兜裡掏出小本本,看看該玩家是否被記錄在小本本上。如果有記錄,那麼伺服器會允許玩家遊玩伺服器,反之則會拒之門外。

可以說,有了白名單系統,伺服器就能夠幾乎不受熊的騷擾。對於Java伺服器來說,白名單再加上正版驗證,那安全性簡直不要太好。

Minecraft伺服器的白名單系統簡單來說由兩部分組成:伺服器根目錄下的whitelistjson檔案和whitelist指令。(注:作者沒有開過基岩版Minecraft伺服器,暫不清楚基岩版伺服器是否和Java版伺服器情況一致。如果有開過基岩版伺服器的讀者可以在這兒留言說明一下。)

這個whitelistjson檔案內用JSON記錄了白名單上的玩家資料。這個玩家資料的組成也很簡單:由玩家名和UUID組成。

在Java版伺服器中,開啟正版驗證的情況下,玩家名和UUID都有用處。因為每個正版玩家都有一個獨一無二的UUID和玩家名。什麼是UUID?簡單來說,UUID就是你在Minecraft中的身份證號碼,遊戲需要透過UUID來識別你。UUID可以透過Mojang提供的官方api介面進行查詢,因此可以保證不會有玩家冒充某個獲得白名單的另一個玩家進入伺服器。

至於基岩版伺服器。基岩版伺服器沒有離線賬號一說,全部賬號都是XBOX的遊戲賬號,因此也有獨一無二的UUID。

但如果沒有開啟正版驗證,離線伺服器的白名單就沒有那麼保險了。至於為什麼會不保險,我們待會再研究。

白名單的另一部分是whitelist指令。該指令的使用方法如下:

whitelistaddlt玩家名gt——將玩家新增到白名單,並且該玩家不需要線上。

whitelistlist——列出白名單中的玩家。

whitelistoff——在此伺服器上禁用白名單系統。

whiteliston——在此伺服器上啟用白名單系統。

whitelistreload——從伺服器資料夾中重新讀取whitelisttxt(175及以前)或whitelistjson(176及以後)檔案中的白名單列表。

whitelistremovelt玩家gt——將玩家名從白名單中移除。被移除的玩家不需要線上。

是不是很簡單?我們現在來看一個情景:

當天下午,某名玩家透過MC百科的找服玩功能找到了一個開啟了正版驗證和白名單系統的1122版本Java伺服器,並透過了該伺服器的白名單獲取考試和QQ群加入稽核。現在伺服器管理員要將該玩家加入到伺服器白名單列表當中,他一共可以採取三種方法來完成這項任務:

①暫時禁用伺服器白名單功能(執行whitelistoff),等待該玩家加入伺服器。該玩家加入伺服器後,管理員執行“whitelistadd該玩家名稱”將該玩家加入白名單中,最後再執行whiteliston開啟白名單功能。

②與該玩傢俬聊,獲取該玩家的玩家名資訊。讓該玩家先嚐試加入一遍伺服器,然後伺服器管理員開啟伺服器根目錄的usernamecachejson檔案(該檔案記錄著玩家名和對應的UUID),根據使用者名稱找到對應的UUID,接著手動修改whitelistjson檔案,最後執行whitelistreload過載白名單。

③與該玩傢俬聊,獲取該玩家的玩家名資訊。然後直接執行“whitelistadd玩家名”即可。

很明顯,①方案是個下策,風險性很高。②方案如果不是服主或服主的好朋友,否則很難獲取伺服器目錄的訪問和修改權。③方案是最好的方案,也是最簡單的方案。

現在你學會了吧?

那麼為什麼離線伺服器的白名單不保險呢?

首先,我們要了解:什麼是離線伺服器。

離線伺服器,並不是指可以斷網玩的Minecraft伺服器,而是指沒有開啟正版驗證的伺服器。離線伺服器不會驗證進入的玩家是否為正版玩家,因此自然也不會專門去獲取該玩家的UUID(就算該玩家是正版玩家),而是會隨機生成一串UUID。由於UUID是服務端隨機生成的,那麼肯定就無法透過UUID來驗證玩家,因為客戶端不知道也不會記錄服務端隨機生成了什麼UUID。所以在離線伺服器中,唯一能夠驗證玩家的便是玩家名。

由於離線賬號下的玩家名可以不受限制的重複,因此開啟了白名單驗證的離線伺服器就有可能會出現以下情況(該情況根據真實事件改編):

A是一名獲取了該伺服器白名單的玩家,玩家名叫做scp

B是另外一名玩家,但玩家名也是scp

B有一天嘗試直接進入到A所玩的伺服器,然後他成功了,並且一開局就有經驗值和一堆物品!

很明顯,離線伺服器就算開啟了白名單,只要他人搞到了能夠進入伺服器的玩家名字,就可以透過“盜取”他人遊戲賬號來進入伺服器,這也就是為什麼Mojang在每次離線伺服器啟動的時候都要加上一句警告資訊。

而獲取能夠進入伺服器的玩家名字很簡單。只要有人線上,就算是沒有白名單的人也能透過伺服器資訊搞到線上玩家名,進而修改自己的玩家名進入伺服器。

那麼離線伺服器能否解決這個問題呢?

有兩個解決辦法:

①開啟正版驗證。但是離線伺服器玩的人基本上沒有正版,所以對於那些玩家來說打擊很大。

②不要使用原版的服務端,採用第三方可以裝外掛的服務端或在原版服務端的基礎上裝Forge再加上SpongeForge(海綿端),並給伺服器裝上適宜的登入外掛,讓玩家進入伺服器還需輸入一次密碼進行二次驗證。

③採用第三方面板站或自建面板站,修改官方服務端的驗證伺服器為自己的驗證伺服器,然後開啟正版驗證。此時使用指定面板站賬號的玩家就被伺服器視作正版玩家,也就解決了白名單問題,還順帶解決了面板顯示問題。

第一個解決辦法雖然很保險,但是可能會因此喪失幾乎所有的玩家(因為玩離線伺服器的玩家大多數沒有正版賬號)。對於已經執行一段時間,有一定體量的伺服器來說,最好採用第二個解決辦法,順帶還可以給伺服器裝更多外掛,搞得更加高大上一些。對於沒多少玩家的新開伺服器,還可以採用第三個解決辦法,目前很多MCJava伺服器也是採用這個辦法透過開源的BlessingSkinServer自建MC面板站來解決面板顯示和白名單問題。

那麼本章就到此結束了。下一章我們將瞭解黑名單和kick指令的使用。(kick還要講嗎?是個人都會用!)

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

三國之我是個小兵 聯盟之王朝基石 LOL:都奪冠了誰還打職業啊! 全球對映:開局我是滿級大佬 莫瑟的日常 商如意宇文愆小說全本免費閱讀 當我穿越進入諸神的世界