Javascript 在url中传递查询的安全性如何
我在网上销售一些课程,因此对于支付车,我实现了一种方法,通过url中的查询从firestore获取课程数据,例如: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
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”(“未找到产品”);“这还不够吗?