将原始请求返回到响应中是一种很好的做法

时间:2013-12-12 17:08:44

标签: asp.net web-services soap asmx

我们公司有一个用C#ASP.Net 4编写的基于SOAP的WebService。

最初的开发人员不久前就离开了,不幸的是他把它留在了一个非常混乱的状态。保持它是一个绝对的噩梦,所以我正在重构。

在此过程中,我注意到他已将响应编码为包括原始请求,包括用于访问服务的用户名和密码(这是此API中存在的所有Web方法的前2个参数)

由于我正在研究重建基础设施,我想询问是否有人知道返回原始请求的做法是否正常?

对我来说,这似乎是一个等待发生的安全问题? 其他人是否发回原始请求减去安全信息?

注意:我知道这是传统技术,但不幸的是我无法从头开始重写整个事情: - (

谢谢, 加里。


示例(为简洁省略了Soap XML):

REQUEST:
POST our-web-service/Products.asmx/Details
username=TEST_USER&password=TEST_PASSWORD&productId=12345

RESPONSE:
<Response IsValid="True">
  <Product id="12345">
    <Name>Test Product 1</Name>
    <Category>General</Category>
    ....
  </Product>
  </Product>

  <OriginalRequest>
    <Username>TEST_USERNAME</Username>
    <Password>TEST_PASSSWORD</Password>
    <ProductId>12345</ProductId>
  </OriginalRequest>

</Response>

1 个答案:

答案 0 :(得分:0)

我们不了解您的API功能。 因此,可能存在一种情况,您的应用程序需要原始请求数据才能在无状态环境中执行某些过程。我的意思是,发件人或请求者不希望保留请求消息,直到它被处理并返回到您的API中。

但是暴露这样的用户名和密码的可能性很小。

即使您的生产也在https上运行,但这并不意味着它不能被篡改。 如果您在客户端和服务器端使用(交换)SSL证书,那么它没问题。 在服务器端的https中还有一个选项,“没有客户端身份验证”。在这种类型的传输中,客户端使用自签名证书来发送和接收http请求和响应。这可能会被篡改。

因此请确保您正在交换SSL证书。如果您的客户担心安全问题。

并且无需至少发送密码。有一段时间,你可以发送用户名,但发送密码就像你的申请证券一样会出错。