安全なようです、私はこのコードで試しています(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
not ':name'
)。したがって、次のようなものを注入する方法はありませ' OR '1'='1
ん; drop something;
ここに私が行ったいくつかのテストがあります:
var name='; create class 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'
より多くの組み合わせを自由に試してみてください。私の意見では、非常に安全だと思われます.