2010-07-17 65 views
0

服务器/客户端应用程序使用XML格式的数据使用TCP连接相互通信。这真棒,因为我不必担心序列化/反序列化复杂的数据。网络服务安全性:必须知道网络消息大小?

为了允许XML数据接收,我将XML文档的长度(以字节为单位)添加到通过网络套接字发送的数据中;通过这种方式,接收应用程序可以在对XML格式的数据进行反序列化之前知道读取了多少数据。

现在我试图想象在使用这种消息传递结构的客户端/服务器应用程序上可能存在的安全漏洞。

除了与传输的数据本质相关的问题,我认为XML格式的数据可以保护服务器免受恶意邮件的攻击。不是吗?如果答案是真的,剩下的唯一问题是如果恶意客户端向我发送声明巨大消息大小的消息(通过更改消息开始处插入的整数),会发生什么情况。

其结果将是一个DOS,因为天真的服务器进程非常非常大的(法律)消息...

有可能避免“邮件大小”的信息?我怎样才能防止DOS攻击?

+0

关于您的自定义协议的信息不足。你不应该重新发明风筝,SOAP在各方面都更好。 – rook 2010-07-17 16:52:21

回答

0

网络层将阻止您读取比可用数据更多的数据 - recv调用将被阻止。所以是的,根据你的实现,这可能会导致DOS。

如果您还没有使用select。您可以将客户列表传递给select,该函数将返回一个准备好接收的客户端。这样恶意客户端不能阻止服务器。

+0

服务器是多线程的,并且已经使用非阻塞套接字。问题主要是由于服务器必须在“理解”网络消息之前缓存接收到的数据。我试图了解是否存在处理过大消息的更好方法。 – Luca 2010-07-17 23:21:27