gpt4 book ai didi

node.js - 如何使用nodejs处理OrientDB中的SQL注入(inject)?

转载 作者:搜寻专家 更新时间:2023-10-31 23:37:29 25 4
gpt4 key购买 nike

我正在使用 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 注入(inject)?因为我没有在 NodeJS API 中找到相关信息。对于 Java,有一个“准备好的查询”概念,我不确定它们是否指的是同一件事。

最佳答案

似乎是安全的,我正在尝试使用这段代码(你从 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')。所以没有办法注入(inject)类似 ' OR '1'='1 或任何 的东西;丢东西;


这是我做的一些测试:

  • var name=';创建类 p;';

    不返回任何记录;

    由 orient 计算为:SELECT * FROM OUser WHERE name = "; create class p;"

  • var name="' OR '1'='1";

    不返回任何记录;

    评估为:SELECT * FROM OUser WHERE name = "' OR '1'='1"

  • var name='"OR "1"="1';

    不返回任何记录;

    评估为:SELECT * FROM OUser WHERE name = "\"OR\"1\"=\"1"

  • 在查询中引用参数名称:"WHERE name = ':name'"

    评估为:SELECT * FROM OUser WHERE name = ':name'


随意尝试更多组合,在我看来似乎很安全。

关于node.js - 如何使用nodejs处理OrientDB中的SQL注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com