我在PHP应用程序中使用PHP的HTTP REST API。
此API中的某些Web服务使用HTTP请求凭据中的用户身份验证进行保护,但我希望通过提供完全加密的请求数据来避免“中间人”攻击。
我对安全问题并不熟练,我无法在任何地方找到任何明确的答案:
HTTPS是否与STATELESS REST API相关?
根据我的理解,HTTPS会做两件事:
乍一看,它不响应我的需要,即加密我的服务器和应用程序之间的数据,因为API不使用会话。但我仍有疑虑。
有人能说清楚吗?
我的另一个解决方案是使用公钥/私钥系统加密请求数据。它会更合适吗?
谢谢!
答案 0 :(得分:2)
HTTPS非常相关,是的,这是因为你提到的两点。您是否知道OAuth 2实际上强制执行HTTPS?
自己进行所有加密也是一种选择,但是你会失去API易于使用的部分。
对“简单”HTTP请求的大多数中间人攻击都涉及窃取凭据和伪造请求,但他们也可以读取发送和接收的数据。如果您的问题是数据不可读,请使用HTTPS。如果假请求是唯一的问题,那么OAuth 1(不是2)等身份验证协议就足够了。
答案 1 :(得分:2)
是的,确实如此。 HTTPS与应用程序无关,它是一种隧道协议。尽管TLS本身就是一个有状态的协议,但是它的HTTP部分不是。
就像使用VPN一样,您仍然可以使用基于REST的应用程序。 TLS只是为每个连接自动设置并拆除隧道。
也就是说,利用HTTP和HTTPS的流水线方面来提高TLS连接的吞吐量是有价值的,但这是与应用程序本身无关的性能调优方面。
答案 2 :(得分:0)
如果您不想实施SSL,可能需要查看http://www.jcryption.org/我不知道它是否可以在无状态环境中运行,但可能值得一试。它基本上是一个jquery插件,用于处理为传输的数据创建密钥对关联。可能只适用于表单提交。我们曾经用它来加密旧公司的登录凭证。
答案 3 :(得分:0)
如果数据敏感,绝对使用HTTPS,它会在您正在寻找的传输层进行加密。正如已经指出的那样,oAuth 2.0基本上要求它。您可以通过在oAuth 1.0中使用散列/签名来避免中间人,并避免必须使用SSL,但是身体仍然清晰(您已经避免在明文而不是正文中发送API凭据)。