通过API调用可访问加密密码,这安全吗?

时间:2018-07-31 14:52:45

标签: rest asp.net-web-api encryption password-encryption

我现在正在研究一些安全概念,我很好奇是否已经尝试过此方法和/或是否可以安全地考虑“强行强制”。

例如,使用 Visual Studio 中的 Microsoft WebAPI模板,您可以在其中使用“ GET”访问端点。

  • 任何用户/应用程序均可访问该端点

  • 用户/应用程序将从此端点获取的String值就是他们需要的密码,但使用“ KeyValue”进行加密

  • 此加密值的TLS传输后,用户/应用程序将使用其“ KeyValue”对字符串进行解密

这是安全的做法吗?

感谢您的到来,并期待您的答复。

编辑:添加了图像的进一步说明以帮助说明

enter image description here

1 个答案:

答案 0 :(得分:1)

假设以下两种情况:

  
      
  1. 服务器与客户端之间的通信

         

    a。。您的服务器使用加密的密码为客户端应用程序提供服务。

         

    b。。客户端可以请求任何密码。

         

    c。。密码是使用服务器和客户端应用程序都知道的共享密钥加密的。

  2.   

正如James K Polk所指出的:

一个知识渊博的攻击者可以并且将分析您部署的应用程序,并在某个时候找到您的硬编码解密密钥(“ KeyValue”)。是什么让他无法请求服务器上存储的每个密码?

经验法则是:“不信任客户端。”

  
      
  1. 服务器与服务器之间的通信

         

    a。。您有2个服务器应用程序。 应用程序A 充当某种数据库服务器。 应用程序B 是您用于某种用户应用程序的后端。

         

    b。。应用程序A向任何请求者(不仅是服务器B)提供密码。

         

    c。。通过共享的硬编码密钥可以确保机密性。

  2.   

我认为您正在尝试使事情复杂化,希望没人能解决这个难题。

有足够的时间和精力的人可能能够获取有关服务器编译的信息和/或能够获取应用程序B的代码。在情况1中还是默认的。另外一点是,有足够多的僵尸程序出随机扫描ips以检查响应。可能会找到应用程序A,即使它们没有共享密钥,也可能能够组合应用程序A的目的,并使该服务器成为优先级目标。

这是安全的做法吗?

不。免费泄露可能的机密信息绝不是一个好主意。是否加密。您不会让人们自由下载您的数据库吗?

您应该做什么

所有身份验证/授权(例如,用户登录,这就是我期望的交换密码的原因)应该在服务器端进行,因为您可以控制此环境。

由于您没有告诉我们您实际要完成的工作,因此建议您阅读常见的攻击媒介,并找出缓解这些问题的常用方法。

我的一些建议:

  1. 两个端点之间的通信-> SSL / TLS
  2. 授权/身份验证
  3. Open Web Application Security Project和他们的Top 102017