- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些与 MySQL 关联的 JS 应用程序。我对 MySQL 的了解有限,但我知道我不能将原始用户输入直接发送到 DB,所以我使用 ?像下面的代码,根据npm js's preparing queries .
connection.query('SELECT * FROM users WHERE id = ?', [userId], function (error, results, fields) {
if (error) throw error;
// ...
});
connection.query('UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?', ['a', 'b', 'c', userId], function (error, results, fields) {
if (error) throw error;
// ...
});
具有这些准备好的查询的其他应用程序工作正常。 (虽然我不确定这是否足够)
但我有这个应用程序,它从用户输入(没有键盘输入)中获取订单,并将它们发送到数据库。所以用户的唯一输入是数字。任何人都可以访问我的应用程序,并且我授予用户 SELECT、INSERT、DELETE。我是否也应该为这种情况清理/准备查询?如果是这样,我应该使用什么方法呢?上述方式不适用于这些查询。
//When the user puts items in the cart, bring the equivalent product info by joining them with product info table
router.post("/", (req, res) => {
const bodyData = req.body;
db.query(
`INSERT INTO cart_table (item_id) VALUES(${bodyData.id})`, (err, rows) => {
db.query(
`SELECT cart_table.id as order_id, item_name, item_price, item_category, count, product_info.id as id FROM product_info JOIN cart_table on product_info.id = cart_table.item_id where item_id = ${bodyData.id}`,
(err, orderedItem) => {
res.json({ 'orderedItem': orderedItem[0] });
}
);
}
);
});
// When user clicks an item, add the selected item or increase selected item's quantity in cart table
router.put("/", (req, res) => {
const bodyData = req.body;
db.query(
`UPDATE cart_table SET count = ${bodyData.count ? parseInt(bodyData.count) : "count+1"
} WHERE item_id = ${bodyData.item_id}`,
(err, rows) => {
res.send({ status: 200 });
}
);
});
// When the user orders, insert cart items to the order table and empty the cart table.
router.post("/", (req, res) => {
const bodyData = req.body;
const values = bodyData.map(({count, id}) => `(${count === null ? 1 : count}, ${id})`).join(",");
db.query(
`INSERT INTO order_table (count, item_id) VALUES${values}`,
(err, rows) => {
const order_id_array = bodyData.map(({ order_id }) => `id = ${order_id}`).join(" or ");
db.query(
`DELETE FROM cart_table`
);
res.send({ status: 200 });
}
);
});
最佳答案
Http 请求可以被欺骗。也就是说,如果表单可以从浏览器发送请求,那么任何人都可以使用 curl
或另一个 http 客户端来创建具有不同请求主体的 POST 请求。所以你不能指望 id
是一个整数。
只需使用准备好的查询并将值作为参数,您就不必怀疑它是否安全。会的。
在将变量与 SQL 语句结合使用时,养成始终使用预准备语句的习惯是值得的。它减少了出错的可能性。它使您的代码更具可读性。
请记住,在专业公司中,很多时候您编写代码,然后在数月或数年后,其他人会接手维护代码。您应该使您的代码尽可能清晰,不要回避最佳实践或编写过于聪明的代码。必须支持您的代码的人会怀着尊重和感激的心情说出您的名字。
关于javascript - 当只有数字输入时,我需要准备查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66856249/
此时,程序显示两种选择并打印一条语句,表明用户赢了、计算机赢了还是平局。继续玩直到用户选择停止,然后打印用户赢的次数,损失, 和关系. import java.util.Scanner; import
我想在 d3.js 中制作一个条形图,每个项目或行都有正条和负条,如下所示: 它有点像谷歌金融“行业摘要”图表(http://google.com/finance) 任何人都可以指出我这种图表的 d3
尝试根据 GF 和 GA 创建一个新列“Results”。想知道如何通过定义函数和条件语句来做到这一点。以下是我对一行的初步尝试,但无法弄清楚如何将其应用于所有行,非常感谢您的帮助! 日期地点对手GF
我对 Java 还很陌生,并且有一项任务被困住了。我相信我的 boolean 函数是正确的,但是我不知道在主函数中要写什么。 这是作业: 编写一个公共(public)函数(静态方法)winner(in
使用掷骰子游戏中的 10,000 次模拟来计算获胜概率 (wins/(wins + Loss))。下面是双骰子游戏的方法: public class CrapsGame { public st
我是一名优秀的程序员,十分优秀!