如何从chrome扩展程序内安全地更新远程数据库?

whi*_*kid 7 php mysql javascript-security google-chrome-extension

我很难弄明白这一点.花了大约4个小时爬网没有SO帖子来救我.

想象一个场景:

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

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

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

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

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

下一个最好的想法是包含带有请求的密钥,但是扩展程序再次用JS编写,几乎任何人都可以嗅出密钥.

引导我找到更新远程服务器上数据库的最佳方法,并确保操作已通过身份验证.

干杯!

Gar*_*uda 1

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

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

为了使这个哈希有效,重要的是它是不可猜测的。不要仅基于 IP 地址或用户代理字符串等静态内容创建哈希。

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

因此,基本上对您而言,最终结果如下:如果扩展是第一次运行,则让扩展为当前实例生成哈希,向服务器发出初始请求以“注册”此新实例,所有后续请求都具有此实例hash 将对该实例进行身份验证。

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

请不要通过像到处进行异或这样的模糊安全性来解决这个问题,人们会发现的。

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