第五十一章 whitelist-白名單
在Minecraft服務(wù)器中,有一個很重要的系統(tǒng):白名單系統(tǒng)。
什么是白名單?簡單來說,白名單就是服務(wù)器隨身攜帶的一個小本本,上面記錄了一些玩家。當(dāng)一個服務(wù)器啟用白名單系統(tǒng)后,每個玩家想要進入服務(wù)器時,服務(wù)器就會從兜里掏出小本本,看看該玩家是否被記錄在小本本上。如果有記錄,那么服務(wù)器會允許玩家游玩服務(wù)器,反之則會拒之門外。
可以說,有了白名單系統(tǒng),服務(wù)器就能夠幾乎不受熊的騷擾。對于Java服務(wù)器來說,白名單再加上正版驗證,那安全性簡直不要太好。
Minecraft服務(wù)器的白名單系統(tǒng)簡單來說由兩部分組成:服務(wù)器根目錄下的whitelist.json文件和/whitelist指令。(注:作者沒有開過基巖版Minecraft服務(wù)器,暫不清楚基巖版服務(wù)器是否和Java版服務(wù)器情況一致。如果有開過基巖版服務(wù)器的讀者可以在這兒留言說明一下。)
這個whitelist.json文件內(nèi)用JSON記錄了白名單上的玩家數(shù)據(jù)。這個玩家數(shù)據(jù)的組成也很簡單:由玩家名和UUID組成。
在Java版服務(wù)器中,開啟正版驗證的情況下,玩家名和UUID都有用處。因為每個正版玩家都有一個獨一無二的UUID和玩家名。什么是UUID?簡單來說,UUID就是你在Minecraft中的身份證號碼,游戲需要通過UUID來識別你。UUID可以通過Mojang提供的官方api接口進行查詢,因此可以保證不會有玩家冒充某個獲得白名單的另一個玩家進入服務(wù)器。
至于基巖版服務(wù)器?;鶐r版服務(wù)器沒有離線賬號一說,全部賬號都是XBOX的游戲賬號,因此也有獨一無二的UUID。
但如果沒有開啟正版驗證,離線服務(wù)器的白名單就沒有那么保險了。至于為什么會不保險,我們待會再研究。
白名單的另一部分是/whitelist指令。該指令的使用方法如下:
/whitelist add <玩家名>——將玩家添加到白名單,并且該玩家不需要在線。
/whitelist list——列出白名單中的玩家。
/whitelist off——在此服務(wù)器上禁用白名單系統(tǒng)。
/whitelist on——在此服務(wù)器上啟用白名單系統(tǒng)。
/whitelist reload——從服務(wù)器文件夾中重新讀取white-list.txt(1.7.5及以前)或whitelist.json(1.7.6及以后)文件中的白名單列表。
/whitelist remove <玩家>——將玩家名從白名單中移除。被移除的玩家不需要在線。
是不是很簡單?我們現(xiàn)在來看一個情景:
當(dāng)天下午,某名玩家通過MC百科的找服玩功能找到了一個開啟了正版驗證和白名單系統(tǒng)的1.12.2版本Java服務(wù)器,并通過了該服務(wù)器的白名單獲取考試和QQ群加入審核?,F(xiàn)在服務(wù)器管理員要將該玩家加入到服務(wù)器白名單列表當(dāng)中,他一共可以采取三種方法來完成這項任務(wù):
?、贂簳r禁用服務(wù)器白名單功能(運行/whitelist off),等待該玩家加入服務(wù)器。該玩家加入服務(wù)器后,管理員運行“/whitelist add 該玩家名稱”將該玩家加入白名單中,最后再運行/whitelist on開啟白名單功能。
?、谂c該玩家私聊,獲取該玩家的玩家名信息。讓該玩家先嘗試加入一遍服務(wù)器,然后服務(wù)器管理員打開服務(wù)器根目錄的usernamecache.json文件(該文件記錄著玩家名和對應(yīng)的UUID),根據(jù)用戶名找到對應(yīng)的UUID,接著手動修改whitelist.json文件,最后運行/whitelist reload重載白名單。
?、叟c該玩家私聊,獲取該玩家的玩家名信息。然后直接運行“/whitelist add 玩家名”即可。
很明顯,①方案是個下策,風(fēng)險性很高。②方案如果不是服主或服主的好朋友,否則很難獲取服務(wù)器目錄的訪問和修改權(quán)。③方案是最好的方案,也是最簡單的方案。
現(xiàn)在你學(xué)會了吧?
那么為什么離線服務(wù)器的白名單不保險呢?
首先,我們要了解:什么是離線服務(wù)器。
離線服務(wù)器,并不是指可以斷網(wǎng)玩的Minecraft服務(wù)器,而是指沒有開啟正版驗證的服務(wù)器。離線服務(wù)器不會驗證進入的玩家是否為正版玩家,因此自然也不會專門去獲取該玩家的UUID(就算該玩家是正版玩家),而是會隨機生成一串UUID。由于UUID是服務(wù)端隨機生成的,那么肯定就無法通過UUID來驗證玩家,因為客戶端不知道也不會記錄服務(wù)端隨機生成了什么UUID。所以在離線服務(wù)器中,唯一能夠驗證玩家的便是玩家名。
由于離線賬號下的玩家名可以不受限制的重復(fù),因此開啟了白名單驗證的離線服務(wù)器就有可能會出現(xiàn)以下情況(該情況根據(jù)真實事件改編):
A是一名獲取了該服務(wù)器白名單的玩家,玩家名叫做scp
B是另外一名玩家,但玩家名也是scp
B有一天嘗試直接進入到A所玩的服務(wù)器,然后他成功了,并且一開局就有經(jīng)驗值和一堆物品!
很明顯,離線服務(wù)器就算開啟了白名單,只要他人搞到了能夠進入服務(wù)器的玩家名字,就可以通過“盜取”他人游戲賬號來進入服務(wù)器,這也就是為什么Mojang在每次離線服務(wù)器啟動的時候都要加上一句警告信息。
而獲取能夠進入服務(wù)器的玩家名字很簡單。只要有人在線,就算是沒有白名單的人也能通過服務(wù)器信息搞到在線玩家名,進而修改自己的玩家名進入服務(wù)器。
那么離線服務(wù)器能否解決這個問題呢?
有兩個解決辦法:
?、匍_啟正版驗證。但是離線服務(wù)器玩的人基本上沒有正版,所以對于那些玩家來說打擊很大。
?、诓灰褂迷娴姆?wù)端,采用第三方可以裝插件的服務(wù)端或在原版服務(wù)端的基礎(chǔ)上裝Forge再加上SpongeForge(海綿端),并給服務(wù)器裝上適宜的登錄插件,讓玩家進入服務(wù)器還需輸入一次密碼進行二次驗證。
③采用第三方皮膚站或自建皮膚站,修改官方服務(wù)端的驗證服務(wù)器為自己的驗證服務(wù)器,然后開啟正版驗證。此時使用指定皮膚站賬號的玩家就被服務(wù)器視作正版玩家,也就解決了白名單問題,還順帶解決了皮膚顯示問題。
第一個解決辦法雖然很保險,但是可能會因此喪失幾乎所有的玩家(因為玩離線服務(wù)器的玩家大多數(shù)沒有正版賬號)。對于已經(jīng)運行一段時間,有一定體量的服務(wù)器來說,最好采用第二個解決辦法,順帶還可以給服務(wù)器裝更多插件,搞得更加高大上一些。對于沒多少玩家的新開服務(wù)器,還可以采用第三個解決辦法,目前很多MC Java服務(wù)器也是采用這個辦法通過開源的Blessing Skin Server自建MC皮膚站來解決皮膚顯示和白名單問題。
那么本章就到此結(jié)束了。下一章我們將了解黑名單和/kick指令的使用。(/kick還要講嗎?是個人都會用?。?