有没有一种方法可以防止sql查询中的字符串concat可能导致sql注入?
searchParameter和searchString是来自get请求的可选参数。这些应添加到where子句中,该子句将根据用户输入过滤结果。
为完成该语句,searchParameter和searchString都不得为null。
谢谢。
async getDetails(searchParameter, searchString, skip = 0, limit = 25, transactionSeq) {
let filterQuery = "";
if(searchParameter && searchString)
{
filterQuery = "AND " + searchParameter + "=" + "'" + searchString + "'";
}
const sql = `
select * from (
select /*+first_rows(${limit})*/
a.record_sequence,
ROW_NUMBER() OVER (ORDER BY a.record_sequence) RN
from TABLE_NAME a
WHERE TRANSACTION_SEQUENCE = :t
) where RN between :n AND :m ${filterQuery}
ORDER BY RN
`;
const bindVars = {
t: transactionSeq,
n: skip + 1,
m: skip + limit
};
const resultAsync = this._database.simpleExecute(sql, bindVars);
答案 0 :(得分:0)
您应该将在字符串连接中使用的所有语句文本列入白名单。我假设<p>
(() => {
if(something)
return "some text"
else
return "some other text"
})()
</p>
与列名匹配,因此请检查该值是否是表中存在的列。如果未知,则抛出错误。参见Binding Column and Table Names in Queries。
然后将绑定变量用于用户数据searchParameter
。您可以将其添加到searchString
。
另外,您可能想使用newer limit syntax:
bindVars