8

我很难弄清楚这一点。花了大约 4 个小时在网上爬行,没有 SO 帖子来救我。

想象一个场景:

  1. 我已经编写了一个 chrome 扩展程序,它可以捕获网页上的一些特定操作(主要是单击按钮)。该动作触发了一个函数,该函数捕获一些用户信息和按钮信息(都存在于页面本身上)并显示它

  2. 现在我希望插件应该能够将其更新到远程服务器上的数据库设置中。

由于我精通 PHP(因此 MySQL 是不错的选择),我正在寻找一种解决方案来确保仅且仅从扩展本身进行更新。

为此,我认为最好的选择是运行 GET/POST 请求,例如http://remoteserver.tld/update-db.php?id=XXXX&action=YYYYY&foo=bar .... 等。但是如果用户在插件外部打开/传递帖子变量到这个 url?

数据仍将更新,完整性将丢失!

下一个最好的想法是在请求中包含密钥,但是扩展是用 JS 编写的,几乎任何人都可以嗅出密钥。

指导我更新远程服务器上的数据库并确保操作经过身份验证的最佳方法。

干杯!

4

1 回答 1

2

这里的问题基本上是身份验证之一,您想防止任何人都能够更新任何其他人的数据存储。

最明显的解决方法是发送一个难以枚举的附加参数(散列是一个很好的例子)并且只分配给扩展的单个实例(因此每个用户都会生成它自己的身份验证散列)。

要使此散列有效,重要的是它不可猜测。不要仅根据 ip-adressess 或用户代理字符串等静态内容创建散列。

您可以包含这些静态字符串以降低冲突的可能性:[pseudo] sha1(ip_address+user_agent+random_integer)。

所以基本上对你来说,这最终会得到以下结果:如果它第一次运行,让扩展为当前实例生成一个哈希,向你的服务器发出初始请求以“注册”这个新实例,所有后续请求都有这个hash 将对该实例进行身份验证。

此外,使用 SSL 加密连接来防止嗅探。

请不要通过像 XORing 这样的默默无闻来解决这个问题,人们会发现的。

哦,顺便说一句,如果你的问题是关于数据完整性本身,你无法解决这个问题。发送的数据始终由用户提供,因为机器所做的一切都在该用户的控制之下(假设)。

于 2012-10-17T19:37:02.390 回答