Unity網路遊戲中的登入註冊以及Web安全

2021-08-09 14:50:09 字數 2221 閱讀 7946

前言

現在網路遊戲越來越多,絕大部分網路遊戲都是需要登入註冊這一功能的,登入註冊一般使用弱聯網,即http來實現,由於只需要請求返回資訊而不需要實時互動,所以我們選擇了弱聯網。流程

我們會通過客戶端來請求伺服器登入註冊,伺服器根據客戶端請求的型別來對資料庫進行增刪改查,並返回資料給客戶端,客戶端拿到服務端的資訊實現具體的邏輯。思路

1.我們會通過客戶端請求時間戳來同步伺服器和客戶端的時間,當我們請求登入註冊時,如果伺服器和客戶端的時間差大於乙個限定,那麼我們就不會讓這個請求滿足,這是因為我們的伺服器處理的資訊量是有限的,如果有人惡意攻擊我們的伺服器,比如發動post攻擊,一秒鐘就能請求很多次伺服器,會造成伺服器的崩潰,我們就有必要限制雙方進行通訊的時間要求,只有在有效時間內的請求才會被接受。

2.我們請求登入註冊資訊的時候需要附帶上時間戳--簽名--裝置號,時間戳上面說過了,簽名是用於身份驗證,我們通過時間戳和裝置號組成乙個簽名,然後再通過md5加密,然後傳到伺服器,伺服器會將傳來的簽名進行解密,然後將傳過來的時間戳和裝置號以相同的方式生成簽名,對比生成簽名和傳入的簽名,如果一致,身份驗證通過,這樣就可以保證我們通訊的安全。

public

retvalue

post([

frombody

]string

value)

//驗證簽名

string

signserver =

mfencryptutil

.md5(

string

.format(

":", t, deviceuniqueidentifier));

if(!signserver.equals(sign,

stringcomparison

.currentcultureignorecase))

}3.在向伺服器請求的資料中,應該包含資料型別,用來告訴伺服器需要對資料庫進行怎樣的操作。比如1001代表註冊,1002代表登入……

string

username = data[

"username"

].tostring();

string

pwd = data[

"pwd"

].tostring();

string

channelid = data[

"channelid"

].tostring();

inttype =

convert

.toint32(data[

"type"

].tostring());

4.伺服器將從資料庫獲取的資訊經過封裝傳給客戶端,這裡需要定義乙個返回資料的類,一般來說,裡面都會包含一些基本的屬性,比如:是否有錯、錯誤資訊、傳遞的資訊等

public

class

callbackargs

:eventargs

5.傳輸的形式我們一般採用json格式,在web的mvc框架中我們如果返回乙個物件,也會被自動轉化為乙個json傳回客戶端,所以我們客戶端為了形成統一,也是用json來進行傳輸,將需要的鍵值對封裝在字典中轉化為json發給伺服器,伺服器再解json獲取請求資訊。

//裝置號

dic[

"deviceuniqueidentifier"

] =deviceutil

.deviceuniqueidentifier;

dic[

"devicemodel"

] =deviceutil

.devicemodel;

long

t =deviceutil

.currservertime;

//簽名

dic[

"sign"

] =encryptutil

.md5(

string

.format(

":", t,

deviceutil

.deviceuniqueidentifier));

//時間戳

dic[

"t"] = t; 總結

在http中,我們會用到post或者get方式,但是無論哪種方式,都會有安全隱患,比如頻繁的post攻擊等等會使伺服器癱瘓,那麼我們要防止這種事情發生。時間戳和簽名讓我們將這樣的風險降至最小,然後就是http協議規定,讓通訊更有效,一般我們會結合觀察者模式,監聽收到的訊息,執行對應的方法,這樣也容易分清層次,有利於封裝和擴充套件。

網路遊戲中的網路程式設計

談談網路遊戲中的 網路 程式設計 近段時間總是有不少人問我關於完成埠模型的一些資料,很多時候其實我很鬱悶,為什麼大家會選擇使用完成埠呢?或者說很多時候他們竟為了使用完成埠,而使用windows作為網路遊戲伺服器平台,還一開口羅列出一堆使用windows平台的網路遊戲案例。有些兄弟跟我一直爭論 win...

網路遊戲中的網路程式設計 效能

談談網路遊戲中的 網路 程式設計 近段時間總是有不少人問我關於完成埠模型的一些資料,很多時候其實我很鬱悶,為什麼大家會選擇使用完成埠呢?或者說很多時候他們竟為了使用完成埠,而使用windows作為網路遊戲伺服器平台,還一開口羅列出一堆使用windows平台的網路遊戲案例。有些兄弟跟我一直爭論 win...

Unity網路遊戲程式設計學習(三)

學習 unity3d網路遊戲實戰 第二版 時的學習筆記 unity網路遊戲程式設計學習 二 比起使用非同步程式,同步程式更簡單明瞭,而且不會引發執行緒問題。只需要在阻塞方法前機上一層判斷,有資料可讀才呼叫receive,有資料可寫才呼叫send,既能實現功能,又不會卡住程式,於是給socket提供了...