2014-11-01 52 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