我打算让PHP Web服务接受基于TLS(HTTPS)的JSON-RPC。每个客户端都有一个API密钥,我将用于识别目的。这是否足够安全,是否有JSON-RPC安全特定标准?
答案 0 :(得分:5)
这是一种很好的做事方式。以下是您的安全方案中要求和组件的概述:
以下是需要安全性的清单,以及如何解决这些问题:
有很多方法可以验证客户端。以下是一些问题:
(*):只要客户端库可以。 HTTPS要求您使用验证您的站点对应于域名的证书。不幸的是,许多HTTPS库默认不对此进行验证 (**):您还应该使用随机数来防止重放攻击。
答案 1 :(得分:1)
你可以使用一个秘密盐签署一个请求(+哈希算法的选择,MD5就可以了),因为这样窃听者就无法获得“API密钥”并伪造自己的请求。使用很长的盐。
盐还可以防止成功的窃听者故意改变信息。
中间怎么会有男人?除非您为每个客户端颁发白名单证书,否则TLS(SSL)在中间攻击中对人员的安全性不大。例如,中间的服务器(攻击者)获取有效证书,或者客户端应用程序未检查各种证书有效性设置(到期日期等)。如果不在您的控制之下,RPC服务器的客户端可能会在不进行任何安全检查的情况下进行连接。这是一个普遍存在的问题。 窃听通常意味着访问您(或您客户的)网络,因此这可能意味着中毒的DNS流量重定向到流氓服务器。
您或您客户的网络连接足够安全,以排除DNS中毒的可能性,或者您的客户端正在检查证书的有效性,或者您强制客户端使用列入白名单的SSL证书,只有您可以影响或决定在
您可能还希望通过为每个请求分配一个唯一的编号(如果这些API调用仅用于读取,可能是过度杀戮)来拒绝重放攻击,以拒绝重复请求。
您提到的API密钥通常在涉及浏览器端JavaScript客户端以跟踪使用情况时使用。 API密钥在被盗时重新发布,以识别和禁用未经授权的应用程序(并可能自动列出欺诈性域名以进一步[诉讼]行动)。