【问题标题】:Is it a good practice to return original requests back in responses在响应中返回原始请求是否是一种好习惯
【发布时间】:2013-12-12 17:08:44
【问题描述】:

我们公司有一个用 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>

【问题讨论】:

  • 恕我直言,这是无用且危险的
  • 我只会在调试代码中看到它的用途,只是为了确保请求被解释为它的意思。对于生产代码,它不应该真的需要在那里。 (虽然如果它包含在响应中是一种安全风险,那么它首先存在于请求中也是如此。因为在这一点上,可以肯定的是,你没有使用 SSL。:P 你只是告诉客户已经知道的......)
  • @cHao 谢谢你,我只是想要一些外部意见。仅供参考,生产 API 仅在 https 上运行

标签: asp.net web-services soap asmx


【解决方案1】:

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

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

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

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

而且至少不需要发送密码。有一次,您可以发送用户名,但这样发送密码会影响您的应用程序的安全性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多