【发布时间】:2012-02-16 21:43:02
【问题描述】:
我正在为我拥有的系统开发一个插件,它允许我的客户网站从中提取数据以显示在他们的网站上。
现在,大多数情况下,存储在系统中的信息并不敏感(因为它刚刚发布到他们的网站上),但一些用户出于方便而设置了他们想要在系统中管理的表,但不要在他们的网站上发布——尽管他们可能想在上面提出请求(例如,检查客户是否登录了他们的网站,或者获取电子邮件地址)。所以我需要对响应进行加密,以减少有人获得不应该拥有的数据的机会。
我的计划是,用户将使用用户 ID、公钥和他们想要运行的查询的名称(他们将事先在系统本身中定义)来标识自己 - 并且请求将采用形成这样的东西:
require("backend-api.php");
$myUserID = "bobs-restaurant.com";
$myPublicKey = "sdg136MAGHYasfadgHGQ"; //send this with the request
$myPrivateKey = "adgljavd8i1356avdilj"; //never send this anywhere
$queryName = "LIST_OF_DISHES";
$backend = new backend-api();
$response = $backend->getData($myUserID,$myPublicKey,$queryName);
$list_of_dishes = $backend->decrypt($response,$myPrivateKey);
//user then goes on to use the data in their code or maybe just display it as-is.
它必须简单,因为用户要么不是经验丰富的 PHP 人员,要么就是时间不足,并且使用系统来代替编写自己的内容管理解决方案。
假设上述用户 ID 和公钥匹配,并且查询存在并返回数据 - 我将让我的系统对用户已知的私钥 ($myPrivateKey) 的响应进行加密,该私钥是我的系统知道,但从未在请求中在两者之间进行交换,因此不会被拦截,我打算使用this reversible encryption class 之类的东西来进行加密。
问题是,我将不得不为用户提供解密类,以便他们可以从响应中获取数据。
因此,如果 Malicious 先生以某种方式获得了属于其他人的用户 ID 和公钥,并且他从我的系统网站上的教程/用户手册中下载了解密类的副本,我说他不会这样做是对的吗?不需要知道私钥,因为他可以通过研究代码来解决如何解密它?
如果答案是肯定的,那么我没有想到会阻止这种情况发生的原因是什么?
【问题讨论】:
-
您使用 ssl 连接而不是自己加密数据怎么样?
-
@Erik 我可以使用 SSL,但我无法控制用户端,我怀疑他们会这样做。