如何使用nodejs处理OrientDB中的SQL注入?
How to deal with SQL Injection in OrientDB using nodejs?
我正在使用 orientjs 库在 Orient 数据库中执行操作。我在文档中读到可以使用如下参数式查询:
db.query(
'SELECT name, ba FROM Player '
+ 'WHERE ba >= :ba AND team = ":team"',
{params: {
ba: targetBA,
team: targetTeam }
}, limit: 20
).then(function(hitters){
console.log(hitters)
});
我的问题是:是否足以防止 SQL 注入?因为我没有在 NodeJS API 中找到相关信息。在Java的情况下,有一个'Prepared Query'的概念,我不确定他们指的是不是同一个东西。
看起来很安全,我正在尝试使用这段代码(你从 wiki 获取的代码有点错误):
var name='admin';
db.open().then(function() {
return db.query(
"SELECT * FROM OUser "
+ "WHERE name = :name",
{params:{
name: name
}
});
}).then(function(res){
console.log(res);
db.close().then(function(){
console.log('closed');
});
});
首先,查询被解析为 SELECT * FROM OUser WHERE name = "admin"
(使用 Studio Query Profiler 观察)。
果不其然,我得到了管理员用户记录。
由于参数直接作为字符串求值,因此不需要引用它们(例如 :name
而不是 ':name'
)。所以没有办法注入 ' OR '1'='1
或任何 ; drop something;
这是我做的一些测试:
var name='; create class p;';
returns没有记录;
东方评价为:SELECT * FROM OUser WHERE name = "; create class p;"
var name="' OR '1'='1";
returns没有记录;
评价为:SELECT * FROM OUser WHERE name = "' OR '1'='1"
var name='" OR "1"="1';
returns没有记录;
评估为:SELECT * FROM OUser WHERE name = "\" OR \"1\"=\"1"
在查询中引用参数名称:"WHERE name = ':name'"
评估为:SELECT * FROM OUser WHERE name = ':name'
随意尝试更多组合,在我看来似乎很安全。
我正在使用 orientjs 库在 Orient 数据库中执行操作。我在文档中读到可以使用如下参数式查询:
db.query(
'SELECT name, ba FROM Player '
+ 'WHERE ba >= :ba AND team = ":team"',
{params: {
ba: targetBA,
team: targetTeam }
}, limit: 20
).then(function(hitters){
console.log(hitters)
});
我的问题是:是否足以防止 SQL 注入?因为我没有在 NodeJS API 中找到相关信息。在Java的情况下,有一个'Prepared Query'的概念,我不确定他们指的是不是同一个东西。
看起来很安全,我正在尝试使用这段代码(你从 wiki 获取的代码有点错误):
var name='admin';
db.open().then(function() {
return db.query(
"SELECT * FROM OUser "
+ "WHERE name = :name",
{params:{
name: name
}
});
}).then(function(res){
console.log(res);
db.close().then(function(){
console.log('closed');
});
});
首先,查询被解析为 SELECT * FROM OUser WHERE name = "admin"
(使用 Studio Query Profiler 观察)。
果不其然,我得到了管理员用户记录。
由于参数直接作为字符串求值,因此不需要引用它们(例如 :name
而不是 ':name'
)。所以没有办法注入 ' OR '1'='1
或任何 ; drop something;
这是我做的一些测试:
var name='; create class p;';
returns没有记录;
东方评价为:
SELECT * FROM OUser WHERE name = "; create class p;"
var name="' OR '1'='1";
returns没有记录;
评价为:
SELECT * FROM OUser WHERE name = "' OR '1'='1"
var name='" OR "1"="1';
returns没有记录;
评估为:
SELECT * FROM OUser WHERE name = "\" OR \"1\"=\"1"
在查询中引用参数名称:
"WHERE name = ':name'"
评估为:
SELECT * FROM OUser WHERE name = ':name'
随意尝试更多组合,在我看来似乎很安全。