1

我正在开发一个基于 OpenCart 的电子商务网站,想知道如何隐藏 URL 中传递的变量。我想这样做的原因是我们允许客户在成功交易结束时打印他们的发票,并且 URL 的结构如下:-

http://www.mywebsite.com/invoice/standard&order_id=1000010

现在的问题是,如果您将order_id的最后一个值更改为其他任何值,甚至更改任何其他数字,它将向您显示该订单号的发票,如果该order_id属于另一个客户,它将显示他们的详细信息给这个客户。

所以现在我想知道的是有没有一种好方法来加密这个 url 并在服务器端解密它来完成请求而不显示用户order_id

如果您需要更多信息,请告诉我,我会尝试将其添加到我的问题中。

4

4 回答 4

4

我没有使用 Opencart 的经验,但它可能会检查当前用户是否已登录,并仅在发票属于他们时才显示发票。

如果不是这种情况,则应该解决根本问题,并限制客户访问发票(例如通过登录系统),而不是通过默默无闻来创建安全性

于 2013-10-04T02:20:33.777 回答
2

您实际上不需要这样做,而是应该在模型/数据库文件中验证该发票的登录用户。

例如....

我假设就目前而言,您的数据库查询将与此类似:

    $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = `" . (int)$order_id . "`");

您还应该检查 customer_id:

    $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = `" . (int)$order_id . "` AND customer_id = '" . (int)$this->customer->getId() . "'");

如果发票不属于该客户,则不会找到任何结果。

于 2013-10-05T16:54:57.923 回答
2

我没有使用过 Opencart,但我相信order_id显示在 URL 中并不是什么大问题。这里的主要问题是其他用户可以查看其他用户的发票。您必须为access control这些非公开页面执行。只允许所有者查看自己的发票。

现在回答您的问题,为了防止您的 order_id 显示在 URL 上,您需要使用POST数据,目前您正在使用GET. 您可以使用 访问POST数据$_POST

于 2013-10-04T02:26:34.117 回答
1

这不是标准功能,因此您应该联系扩展程序的开发人员。如果您的商店允许客人结账,则 URL 应包含某种随机密钥,或附加到订单的电子邮件地址,例如以验证请求仅来自授权用户。如果订单是针对注册用户的customer_id,则应根据当前登录用户验证分配给订单的内容,如果用户未登录,则重定向到登录

于 2013-10-04T02:38:12.957 回答