2016-10-05 9 views
2

オリエンテーションデータベースで操作を実行するためにorientjsライブラリを使用しています。nodejsを使用してOrientDBでSQLインジェクションを処理する方法は?

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」という概念があります。同じことを参照しているかどうかはわかりません。

+1

パラメータ化されたクエリは、一般的にSQLインジェクションの可能性を防ぎます。 –

答えて

4

は(ウィキから取られたあなたは少しバギーです)私は、このコードをしようとしている、セキュリティで保護しているように見える:すべての

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"として解析されますプロファイルプロファイラー)。

期待どおり、管理者ユーザーレコードが取得されます。

paramsはStringとして直接評価されるため、それらを引用する必要はありません(例::nameではなく':name')。だから' OR '1'='1ような何かを注入する方法はありませんか、ここで任意の; drop something;


は、私がやったいくつかのテストです:

  • var name='; create class p;';

    返さない記録。ように配向することによって評価

    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"

  • がクエリでのparamの名前を引用:"WHERE name = ':name'"として評価

    SELECT * FROM OUser WHERE name = ':name'


が私の意見では、より多くの組み合わせを試すこと自由に感じとして評価

かなり安全だと思われる。

+1

ありがとうございました。私は彼らが彼らのドキュメントでそれを説明する小さなセクションを追加する必要があると思います:http://orientdb.com/docs/last/OrientJS-Query.html – diugalde

関連する問題