簡體   English   中英

SQL WHERE的URL參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM