我现在正在研究一些安全概念,我很好奇是否已经尝试过此方法和/或是否可以安全地考虑“强行强制”。
例如,使用 Visual Studio 中的 Microsoft WebAPI模板,您可以在其中使用“ GET”访问端点。
任何用户/应用程序均可访问该端点
用户/应用程序将从此端点获取的String值就是他们需要的密码,但使用“ KeyValue”进行加密
此加密值的TLS传输后,用户/应用程序将使用其“ KeyValue”对字符串进行解密
这是安全的做法吗?
感谢您的到来,并期待您的答复。
编辑:添加了图像的进一步说明以帮助说明
答案 0 :(得分:1)
假设以下两种情况:
服务器与客户端之间的通信
a。。您的服务器使用加密的密码为客户端应用程序提供服务。
b。。客户端可以请求任何密码。
c。。密码是使用服务器和客户端应用程序都知道的共享密钥加密的。
正如James K Polk所指出的:
一个知识渊博的攻击者可以并且将分析您部署的应用程序,并在某个时候找到您的硬编码解密密钥(“ KeyValue”)。是什么让他无法请求服务器上存储的每个密码?
经验法则是:“不信任客户端。”
服务器与服务器之间的通信
a。。您有2个服务器应用程序。 应用程序A 充当某种数据库服务器。 应用程序B 是您用于某种用户应用程序的后端。
b。。应用程序A向任何请求者(不仅是服务器B)提供密码。
c。。通过共享的硬编码密钥可以确保机密性。
我认为您正在尝试使事情复杂化,希望没人能解决这个难题。
有足够的时间和精力的人可能能够获取有关服务器编译的信息和/或能够获取应用程序B的代码。在情况1中还是默认的。另外一点是,有足够多的僵尸程序出随机扫描ips以检查响应。可能会找到应用程序A,即使它们没有共享密钥,也可能能够组合应用程序A的目的,并使该服务器成为优先级目标。
这是安全的做法吗?
不。免费泄露可能的机密信息绝不是一个好主意。是否加密。您不会让人们自由下载您的数据库吗?
您应该做什么
所有身份验证/授权(例如,用户登录,这就是我期望的交换密码的原因)应该在服务器端进行,因为您可以控制此环境。
由于您没有告诉我们您实际要完成的工作,因此建议您阅读常见的攻击媒介,并找出缓解这些问题的常用方法。
我的一些建议: