一种利用本地存储存储购物车详细信息的更好方法

A better way to utilise local storage to store shopping cart details

我目前正在开发一个电子商务网站。该网站将没有登录页面,因为我们没有将用户详细信息保存在数据库中。相反,我们将保留用户的电子邮件以便与他们联系。因此,我们不会在数据库中拥有用户 table。为了将数据保存在用户的购物车中,我们将使用本地存储来存储它。但是又怕一些恶意用户篡改购物车里的内容,比如商品价格。因此,我 可能 考虑将产品 ID 存储在本地存储中,然后在用户重新加载页面时从我的数据库中检索特定产品。

这个解决方案是否可靠?是否有更好的方法利用本地存储来存储用户的购物车,或者是否有本地存储的替代方法?

你是对的,你应该只使用 id 和数据的额外属性。所有重要的事情,比如价格数量......都应该保存在服务器端,你必须通过 ID 查询它们。本地存储是不错的选择,但它有大约 5mb 的限制,如果你存储太多数据,它会过载并且无法再保存。如果你只需要保存 id,那很好,否则我建议为此使用 indexDB,我建议你检查 https://dexie.org/ 这个库,如果你更喜欢使用 indexDB

快速简单的答案:

"Sanitize the user's cart data BEFORE sending it to the back-end and check it against a pre-defined product database to make sure the products exist and that they actually cost what's specified by the cart data."

长而详细的答案:

您应该实施一个三阶段系统来验证用户的购物车数据:

  1. 根据您的电子邮件列表/数据库检查用户的电子邮件
  2. 清理用户的购物车数据然后将其发送到后端
  3. 根据预定义的产品数据库验证购物车的产品

这样做可以防止黑客:

  1. 使用虚假用户数据购买产品
  2. 修改产品数据
  3. 使产品more/less昂贵
  4. 使用用户的购物车数据将恶意代码注入您的后端
  5. Creating/purchasing fake/non-existent 产品

您还应该使用浏览器的内置功能 escape user input:

function escape_input(data) {
  var div = document.createElement("div");
  div.appendChild(document.createTextNode(data));
  return div.innerHTML;
}

因为(根据 linked 网站):

"It's important to be constantly vigilant with the handling of user data. To avoid SQL injection, never build database queries by concatenating user-supplied data. These measures protect the integrity of the data on our servers."

我还建议在用户可以进行购买之前拥有某种身份验证系统。

这方面的一个很好的例子是 Google 的两步验证系统,它要求您输入通过文本 message/phone 发送给您的验证码进入输入表单。

这样做是为了验证用户的身份并防止人们 accessing/using 其他人的帐户,这个系统几乎不可能被欺诈,但也很容易错误地实施,所以我会采取这个建议有点保留。

很遗憾,由于您没有指定任何代码,我无法确定您网站的安全性。

如果您使用该代码创建一个新问题并 link 它在这里,我将非常乐意尝试帮助您解决应用程序的安全漏洞(如果有的话)。

祝你好运,注意安全。