Javascript 在url中传递查询的安全性如何

Javascript 在url中传递查询的安全性如何,javascript,node.js,security,url,google-cloud-firestore,Javascript,Node.js,Security,Url,Google Cloud Firestore,我在网上销售一些课程,因此对于支付车,我实现了一种方法,通过url中的查询从firestore获取课程数据,例如:localhost:5000/?product=course1 所以,我想知道它有多安全,就注入或其他漏洞而言 我实现了简单的验证。但没什么大不了的 这是产品发布请求: router.post("/courses", (req, res) => { const product = req.body.product; res.redirect("/payment?pro

我在网上销售一些课程,因此对于支付车,我实现了一种方法,通过url中的查询从firestore获取课程数据,例如:
localhost:5000/?product=course1

所以,我想知道它有多安全,就注入或其他漏洞而言

我实现了简单的验证。但没什么大不了的

这是产品发布请求:

router.post("/courses", (req, res) => {
  const product = req.body.product;

  res.redirect("/payment?product=" + product);
});
这是付款页面:

router.get("/payment", async (req, res) => {
  console.log(req.query.product);

  const snapshot = await db.collection("products").get();
  const products = await snapshot.docs.map(doc => {
    return {
      name: doc.id,
      price: doc.data().price
    };
  });
  thisProduct = products.find(product => {
    return req.query.product === product.name;
  });
  console.log(thisProduct);
  if (typeof thisProduct == "undefined") {
    return res.send("product not found");
  }

  res.render("payment", {
    key: "pk_test_fVJwSNZpMoCwrF7Zs48PsLR100zpmBhXrc",
    user: true,
    title: "Pay for a course",
    product: {
      name: thisProduct.name,
      price: thisProduct.price
    }
  });
});
请让我知道是否有任何漏洞,以及如何修复它们。 如果您没有发现任何漏洞,请发表评论。
谢谢大家!

我在您显示的代码中没有看到任何漏洞。通常,为了避免任何类型的注入,您应该正确地验证所有输入。也就是说,如果您希望
产品
是一个数字,您应该检查它是否是一个数字。另外,避免SQL注入的一般做法是不使用字符串插值(而且,只要URL中传递的数据不是可执行的——这看起来是一个简单的选择——那么它就应该可以了。POST请求或cookie总是更好,因为您不会意外地找到数据,但这对于您正在做的事情来说应该是可以的。因为
req.query.product==product.name
是您唯一的选择唱吧,它应该是相当安全的。不过,它看起来确实很低效,除非Firestore有某种魔力。(我对此表示怀疑。)至于另一个途径:我不会在不验证产品名称的情况下重定向。@Ry-验证产品名称是什么意思?@MendiSterenfeld他的意思是如何知道
req.query.product
是有效的产品?您目前相信客户机在该特定API方面是正确的。@James如果该产品不存在我只是发送“res.send”(“未找到产品”);“这还不够吗?