2 回答

TA貢獻(xiàn)1877條經(jīng)驗 獲得超1個贊
構(gòu)建此查詢的方式正是您不想執(zhí)行的操作。它使您對SQL注入完全開放。
若要避免此問題,需要參數(shù)化查詢。這里的額外好處是,它將照顧所有逃跑。
下面是一個直接來自 MS 文檔的示例,演示如何使用 SQL Server 的節(jié)點.js驅(qū)動程序執(zhí)行參數(shù)化查詢。
遵循此范例的代碼將如下所示:
exports.addEntry = (req, res, nomPage, nomTable, data) => {
Object.keys(data).forEach(function (k, id) {
console.log(data[k]);
if (data[k] != null) {
if (id > 0) {
columnString += `,`;
dataString += `,`;
}
columnString += `${[k]}`;
dataString += `@${data[k]}`;
}
});
try {
if (!data) throw new Error("Input not valid");
if (data) {
var sqlQuery = `INSERT INTO ${nomTable} (${columnString}) VALUES (${dataString})`;
connect.connectDatabase(sqlQuery, (data, err) => {
[...]
所有改變的是操作構(gòu)造.dataString
請注意,您現(xiàn)在需要將參數(shù)饋送到命令執(zhí)行中,以替換之前嵌入的數(shù)據(jù)。

TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊
有幾種方法可以做到這一點:1 - 替換方括號的冒號,這將創(chuàng)建一個字符串值數(shù)組,那么你只需要擔(dān)心通過數(shù)組長度進(jìn)行排序,這將增加你的處理時間,但如果你的應(yīng)用程序不是太大,它不應(yīng)該有太大的區(qū)別。
2 - 用于對字符串中的單引號進(jìn)行轉(zhuǎn)義或?qū)﹄p引號進(jìn)行轉(zhuǎn)義。\'
\"
讓我知道這是否有幫助,因為這是一個快速的答案。
添加回答
舉報