[英]URL parameters to SQL WHERE
我的webapp主要由較長的表格組成,這些表格顯示不同類型的數據。 我正在使用SQL Server,服務器使用Node.js,客戶端使用React。 我正在使用mssql
包進行Node.js-> SQL Server連接。
假設我有一個許可證表,其中包含字段:
user_id :整數
類型 :Varchar(2),例如“ AA”,“ BB”,“ CC”
訂閱 :位(0,1)
created_on :時間戳記,例如1518962994
我目前有一條路線/ licenses,可從我的API SELECT * FROM Licenses
提取所有許可證。 我想通過在URL中提供可選參數來過濾結果,例如
/licenses?type=AA&type=BB&subscription=1
通過使用query-string
包,我可以讀取服務器上的參數:
{
type: ['AA', 'BB'],
subscription: 1
}
問題是,如何轉換為在SQL查詢中使用?
該工具位於密碼后面,並且對API調用進行了身份驗證。
這工作得很好,但是肯定是錯誤的,並且很容易發生SQL注入:
let where = ' WHERE ';
Object.keys(params).forEach((key, i) => {
let part = '';
if (Array.isArray(params[key])) {
let joined = params[key].join('\',\'')
part += key + ' IN (\'' + joined + '\')';
}
else {
part += key + '=' + '\'' + params[key] + '\'';
}
where += part;
if (i + 1 !== Object.keys(params).length) {
where += ' AND ';
}
});
let where = [];
let values = [];
Object.keys(params).forEach((param) => {
let value = params[param];
let cond = (Array.isArray(value)) ?
' in ' + value.map(e => '?').join(', ') :
' = ' + value;
// You must check that param is correct field name e.g. read meta-data from db
where.push(param + cond);
values.push.apply(values, value);
});
where = ' where 1 = 1 ' + where.join(' AND ');
...
db.exec(query + where, values, (err, rows) => ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.