使用hmac保护javascript客户端

Wal*_*man 9 javascript php hmac ajax-push

我正在研究如何保护我正在处理的javascript应用程序.该应用程序是一个聊天客户端,它使用APE(Ajax Push Engine)作为后端.

目前,任何人都可以访问该页面并向APE服务器发出GET/POST请求.我只想为注册用户提供聊天客户端,我想确保只接受他们的请求.我可以使用PHP的用户名/密码验证来为用户提供页面.但是一旦他们有了这个页面,有什么可以阻止他们修改javascript或让它落入坏人之手?

这种保护客户端/服务器应用程序的方法看起来很有希望:http://abhinavsingh.com/blog/2009/12/how-to-add-content-verification-using-hmac-in-php/

我有另一个消息来源说这是一个javascript客户端的理想选择,因为它不依赖于发送私钥.但这怎么可能呢?根据上面的教程,客户端需要提供私钥.这似乎不太安全,因为拥有javascript的任何人现在都拥有该用户的私钥.根据我的理解,它可以像这样工作:

  1. 用户使用用户名和密码登录
  2. PHP验证用户名和密码,查找用户的私钥并将其插入到javascript中
  3. Javascript提供签名(使用私钥),以及包含所有APE请求的公钥
  4. APE将计算的签名与接收的签名进行比较,并决定是否处理请求.

如果javascript应用程序需要知道私钥,这是如何安全的?

谢谢您的帮助!

rot*_*oto 0

HMAC 身份验证更适合第三方要连接的 API。通过向客户端浏览器写入 cookie 表明它们已通过身份验证,您的应用程序似乎可以得到更好的服务。然后,对于每个 ajax 请求,您都可以检查该 cookie。

编辑:我收回我之前所说的关于 HMAC 可以更好地为第三方 API 提供服务的说法。传统上,使用 HMAC,每个用户都会获得自己的私钥。我认为这对于您的申请来说没有必要。您可能可以只保留一个主私钥并为每个用户提供一个唯一的“公钥”(我称之为公钥,但实际上用户永远不会知道该密钥)。当用户登录时我会写入两个cookie。一个是用户的公钥+加密时间戳的组合,另一个密钥说明时间戳是什么。然后,在服务器端,您可以验证加密密钥并检查时间戳是否在给定阈值内(例如 10-30 分钟,以防它们在您的应用程序上闲置)。如果它们通过验证,则更新加密密钥和时间戳,冲洗并重复。