我一直在研究如何使用SOAP消息处理二进制数据。我正在开发客户端和服务,所以我可以选择任何一个框架。唯一的限制是服务端已经设计好了,并且基于Spring。
从谷歌的角度看,似乎有三种选择:
问题
当他们说攻击不在SOAP消息之外时,
发布于 2013-05-14 16:18:41
,当他们说攻击不在SOAP消息之外时,到底意味着什么?我假设攻击可能是作为一个不同的TCP包发送的,但我认为我错了?
与第一个选项相反,附件不是实际soap消息有效负载的一部分,而是在SOAP文档中引用的。MTOM和SWA之间的区别是所引用的文件所在的位置。对于MTOM,它嵌入在响应中,而在SWA中,您可以获得到web上资源的链接。下面是3个最简单的例子:
MTOM (均为xop+xml型的一种响应)
Content-type: multipart/related;
type="application/xop+xml";
start-info="text/xml"
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com">
</xop:Include>
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Id: <012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com>
Content-Type: image/png
Content-Transfer-Encoding: binarySWA (仅供参考)
Content-Type: application/xml;charset=utf-8;
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
https://server.com/downloadImagehere.png
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>内联
Content-Type: application/xml;charset=utf-8;
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
YTM0NZomIz...potentiallyLargeBase64encodedFileGoesInHere...I2OTsmIzM0NTueYQ==
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>推荐上述选项中的哪一种,具体而言,哪一种最适合Spring框架?
它们都是受支持的,使用的部分取决于您的用例。根据我的研究,MTOM似乎是事实上的标准。据我所知,如果您有大型或多个文件攻击,它就特别有用。由于它在逻辑组件中拆分消息,所以它可能给解析器提供更多的选项,以有效地处理二进制数据。
但是,对于较小的数据,我可能会选择嵌入资源,因为它是标准SOAP协议的一部分,并且只直接使用编码的字节数组,然后直接嵌入到消息中。如果可移植性/兼容性很重要,这可能是选择的方法。
最后一种方法显然要求您自己处理引用,这可能是您想要的,也可能不是您想要的。
,我不清楚在传输过程中,上述选项中哪些是编码二进制内容的。这里描述的二进制MIME是什么- http://www.crosschecknet.com/intro_to_mtom.php?在传输过程中,二进制数据是否仍然转换为文本?
MTOM和内联都将文件编码为Base64encoded字符串。对于外部链接,这是不相关的。
使用SWA时数据的格式是什么?
Base64encoded字节数组
https://stackoverflow.com/questions/9968168
复制相似问题