Xml 网络服务安全:必须知道网络消息大小?

Xml 网络服务安全:必须知道网络消息大小?,xml,security,networking,Xml,Security,Networking,服务器/客户端应用程序通过TCP连接使用XML格式的数据相互通信。这太棒了,因为我不必担心复杂数据的序列化/反序列化 为了允许接收XML数据,我将XML文档长度(以字节为单位)预先添加到通过网络套接字发送的数据中;这样,接收应用程序在能够反序列化XML格式的数据之前就知道读取了多少数据 现在,我试图想象使用这种消息传递结构的客户机/服务器应用程序上可能存在的安全漏洞 除了本质上与传输的数据相关的问题外,我认为XML格式的数据可以保护服务器免受恶意消息的攻击。不是吗?如果答案为真,那么剩下的唯一问

服务器/客户端应用程序通过TCP连接使用XML格式的数据相互通信。这太棒了,因为我不必担心复杂数据的序列化/反序列化

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

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

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

结果将是一个DOS,因为Ingenous服务器处理非常非常大(合法)的消息


是否可以避免“消息大小”信息?如何防止DOS攻击?

网络层将阻止您读取比可用数据更多的数据,
recv
调用将被阻止。是的,这取决于你的实现,可能会导致拒绝服务


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

有关自定义协议的信息不足。您不应该重新发明wheal,SOAP在各个方面都更好。服务器是多线程的,并且已经使用了非阻塞套接字。问题本质上是由服务器在“理解”网络消息之前必须缓存接收到的数据造成的。我想知道是否有更好的方法来处理太大的消息。