3

我正在使用 AngularJS 创建一个站点,该站点将允许用户在站点上创建帐户并无缝登录,而无需重新加载页面。要创建这样的站点,我使用 AngularJS 路由加载不同的部分,并使用 $http 通过 xhr 访问 php 脚本。正如已经提到的,我使用 php 进行服务器端脚本,我使用 mysql 来存储我的数据。

我的问题是没有页面重新加载通过 $http 服务提交到服务器的数据将显示在 firebug(或等效工具)的网络选项卡中。这意味着密码等私人数据可以通过这些工具暴露,直到页面关闭。现在我想找到一种方法来阻止用户在任何工具中查看这些数据。我可以加密数据客户端。问题在于脚本仍然暴露在外。有没有其他人认为这是一个问题并找到任何解决方法?

我需要考虑的另一件事是以角度存储用户会话的最佳方式是什么?最好使用 php 的会话并使用 $http 或使用 cookie 获取它的状态?同样,这两种方法都存在与安全相关的问题。对于 cookie,我需要加密内容并使用会话变量通过 ajax 来回传递数据,它可以使用 firebug 访问所有内容。所以我再次想知道人们对此的看法。

4

1 回答 1

2

对于密码可见性问题,您可以执行密码散列客户端。javascript 代码是可见的,是的,但这不会造成问题。散列函数是单向的,因此无法根据散列结果检索您的密码。javascript 可以对 salt 进行硬编码,因为它不是秘密(https://stackoverflow.com/a/536756)。

或者,您可以在将其与数据库值进行比较之前在服务器端实现第二个哈希。但这仅在您存在导致密码值读取的漏洞但同一漏洞不允许数据库更新的情况下提供保护。

对于其他数据,您可以考虑 diffie-hellman 密钥交换。

为确保客户端执行的 javascript 确实是您提供的脚本,您需要 https。它还可以保护您的频道,但不会影响您的浏览器或萤火虫(这是正确的吗?萤火虫应该看到受 SSL 保护的 AJAX 吗?)。

我正在用 angularjs 和 php 实现类似的东西,但决定不使用客户端散列或 diffie-hellman 密钥交换。您要保护自己免受的情况很难实现。入侵者需要在您登录之前和之后访问您的浏览器。

于 2012-08-10T14:27:49.587 回答