2014-11-01 75 views
0

我的問題here,我試圖在服務器機器上實現某種消息解析。關於實現應用程序網絡協議的安全問題

目前的消息是這樣的:

int _header_signature; 
int _offset_a; 
int _offset_b; 
int _size_a; 
int _size_b; 
wchar_t stuff[_size_a]; 
wchar_t stuff2[_size_b]; 
int _footer_signature; 

我能得到一些代碼,這樣的作品,由頭部和大小的解碼,並知道如果我收到的整條消息或有更多未決。但是,什麼阻止惡意用戶故意更改這些消息並使我的機器崩潰?例如。將尺寸值或偏移量之一更改爲比我的消息更大的東西。

如何使我的服務器安全可靠,並且抵禦接收到的任何消息?

回答

-2

剛連載的數據http://en.wikipedia.org/wiki/Serialization

,然後檢查偏移是有效的。

+0

我的數據被序列化併發送,但是如何檢查偏移?我怎麼知道他們是有效的? – 2014-11-01 10:16:29

+0

那麼你知道兩個數組的大小。爲什麼不只是檢查那些值是有限的 – 2014-11-01 10:18:03

+0

我如何知道兩個陣列的大小?這些值也可以被操縱。 (如果你想知道的話,我不是那個低調的人) – 2014-11-01 10:28:03

0

沒有。您必須驗證您收到的數據。

當然,您可以/應該加密通過網絡發送的數據,以防止中間人受到攻擊,但這並不會阻止某人向您發送垃圾數​​據。

所以你必須檢查數據是否是垃圾。如果偏移量指向消息外部,那麼可能會發生一些可疑的事情,您將不得不面對這些問題。

+0

爲什麼在不需要時加密數據?很多情況下都可以安全地加密。 – 2014-11-01 10:34:12

+1

如果OP不希望第三方修改飛行中的數據?他似乎擔心惡意方試圖通過僞造他的協議消息來降低他的軟件 – jalf 2014-11-01 10:36:48

+0

@jaif - 或者可能是網絡中的錯誤或發送它的代碼。它可能不是惡意的。 – 2014-11-01 10:40:27