2 回答

TA貢獻1877條經驗 獲得超1個贊
構建此查詢的方式正是您不想執行的操作。它使您對SQL注入完全開放。
若要避免此問題,需要參數化查詢。這里的額外好處是,它將照顧所有逃跑。
下面是一個直接來自 MS 文檔的示例,演示如何使用 SQL Server 的節點.js驅動程序執行參數化查詢。
遵循此范例的代碼將如下所示:
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) => {
[...]
所有改變的是操作構造.dataString
請注意,您現在需要將參數饋送到命令執行中,以替換之前嵌入的數據。

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