我很难弄明白这一点。花了大约4个小时爬网,没有SO帖子来救我。
想象一下场景:
我已经编写了一个chrome扩展程序,用于捕获网页上的某些特定操作(主要是单击按钮)。该操作会触发一个功能,该功能捕获一些用户信息和按钮信息(全部存在于页面本身上)并显示它
现在我希望插件能够将其更新为远程服务器上的数据库设置。
由于我精通PHP(因此MySQL是不错的选择),我正在寻找一种解决方案,以确保仅从扩展本身进行更新。
为此,我认为最好的选择是运行类似http://remoteserver.tld/update-db.php?id=XXXX&action=YYYYY&foo=bar等的GET / POST请求。但是如果用户在插件外打开/传递post vars后会发生什么?< / p>
数据仍会更新,完整性将会丢失!
下一个最好的想法是在请求中包含密钥,但扩展程序再次用JS编写,几乎任何人都可以嗅出密钥。
指导我更新远程服务器上数据库的最佳方法,并确保操作已通过身份验证。
干杯!
答案 0 :(得分:2)
这里的问题基本上就是认证之一,你要防止任何人都能更新任何人的elses数据存储区。
最明显的解决方法是发送一个难以枚举的附加参数(哈希是一个很好的例子),并且只分配给你的扩展的一个实例(因此每个用户都会生成它自己的身份验证哈希)。
为了使这个哈希有效,重要的是它是不可猜测的。 不要仅基于ip-adressess或用户代理字符串等静态内容创建哈希。
您可以包含这些静态字符串,以减少碰撞: [伪] sha1(ip_address + user_agent + random_integer)。
所以基本上对你而言,最终会出现以下情况: 如果第一次运行,让扩展为当前实例生成哈希,向服务器发出初始请求以“注册”此新实例,具有此哈希的所有后续请求将对该实例进行身份验证。
另外,使用SSL加密连接来防止嗅探。
请不要通过像XORing这样的默默无闻来解决这个问题,人们会发现。
哦,顺便说一句,如果你的问题与数据完整性本身有关,你无法解决这个问题。发送的数据始终是用户提供的,因为机器所做的一切都在该用户的控制之下(假设)。