9

我正在研究保护我正在开发的 javascript 应用程序的方法。该应用程序是一个聊天客户端,它使用 APE(Ajax 推送引擎)作为后端。

目前,任何人都可以访问该页面并向 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 应用程序需要知道私钥,这如何安全?

谢谢您的帮助!

4

3 回答 3

2

答案:从技术上讲,您无法阻止用户修改 JavaScript。所以不要担心,因为你对此无能为力。

但是,您确实需要防止的攻击是跨站点请求伪造(CSRF)。不同域上的恶意脚本能够使用浏览器存储的 cookie 自动向您的域提交表单。为了解决这个问题,您需要在 AJAX 请求发送的实际数据中包含一个身份验证令牌(它应该是足够随机的,与用户名或密码无关,并且在聊天客户端所在的 HTML 页面中发送)(浏览器不会自动填写)。

于 2010-11-23T03:02:29.837 回答
1

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

为什么不?这是用户自己的私钥,所以如果他愿意把它给别人,那是他的问题。这与提供您的密码然后说其他人可以访问您的帐户没有什么不同。

如果您稍微考虑一下,您会意识到您不需要实现公钥加密、HMAC 或类似的东西。只要通信通道本身是安全的(例如使用 HTTPS),您的常规基于会话的身份验证就可以了。

于 2010-11-23T03:05:55.327 回答
0

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

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

于 2010-11-23T02:47:15.853 回答