【问题标题】:How to remove link references from web service request/response如何从 Web 服务请求/响应中删除链接引用
【发布时间】:2012-02-22 13:16:29
【问题描述】:

我有一个带有用 Java 编写的客户端的 Web 服务。该服务在防火墙后面工作,如果 java 客户端想要使用该服务,那么它的请求将被阻止,因为该请求包含链接。所以请求包含这样的验证器引用:

...<S:Envelope xmlns:S="http://schemas.xmlsoap.org/wsdl/"...

我应该在 wsdl 文件中修复它吗?这是唯一包含此链接的地方:

<definitions targetNamespace="http://mycompany.com/" name="RentalServiceService"
             xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy"
             xmlns:tns="http://mycompany.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

如果我从 wsdl 文件在 .net 中生成客户端,那么它不会将任何链接引用放入请求中... 谢谢 佐尔坦

【问题讨论】:

  • 您在哪里看到任何链接引用?
  • 客户端请求是一个xml,并且在头部有一个schemas.xmlsoap.org/wsdl/">xxxx</S:Envelope>
  • 那么链接在哪里?我看到了一个 XML 命名空间。你说的是xmlns吗?这不会导致消息被阻止,因为世界上几乎所有的 XML 都有这样的命名空间。
  • 好的,我知道我应该写“url格式文本”。不幸的是,防火墙认为这是某种跨站点脚本......
  • 那你的防火墙坏了。大多数 XML 文档都有这些命名空间声明。

标签: web-services client xss


【解决方案1】:

不要从 XML 消息中删除命名空间。请改为配置防火墙!

通常,SOAP 对防火墙很友好,因为它搭载在 HTTP 之上。如果您从 XML 中删除名称空间,您可能会通过防火墙获取它,但必须使用该消息的 Web 服务可能无法解析它,因为您从中删除了名称空间。 XML namespaces 很重要,因为它们可以正确识别消息中每个元素所属的域。

作为观察,&lt;S:Envelope xmlns:S="http://schemas.xmlsoap.org/wsdl/"... 是某种复制粘贴错误?...或者可能是问题的一部分?! SOAP 信封的命名空间对于 SOAP 1.1 应该是 http://schemas.xmlsoap.org/soap/envelope/,对于 SOAP 1.2 应该是 http://www.w3.org/2003/05/soap-envelope

除此之外,如果 SOAP 消息的格式正确,它应该可以通过防火墙。如果没有,那么解决方案是正确配置防火墙,不要弄乱 SOAP 消息。您的网络管理员应该花时间了解 Web 服务的安全性并正确配置防火墙。

我的建议是保留端口 80 仅用于您的用户来自浏览器的请求/响应,并通过适当的配置在不同的端口号上公开服务。也许您甚至可以在DMZ 中设置reverse proxy 以提高Web 服务的安全性。这样,您就不会将内部 Web 服务服务器直接暴露给 Internet。

【讨论】:

  • 谢谢,我会要求更改防火墙规则
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多