2016-04-05 10 views
0

以下のコードはSQLインジェクションの対象となりますか?そうであれば、それを修正するための推奨事項があります。おかげSQLインジェクションの脅威ですか?

def Function(x: Int, y: Int) = { 
    var query = s"SELECT * FROM table LIMIT $x, $y" 
} 
+0

Scalaには、使用できるPreparedStatementがありますか? – ryekayo

+0

あなたはいつでもスカラからJava APIを使用することができますので、実際にはPreparedStatementを使用できます – eliasah

答えて

1

更新:反射に は、私は正確にかかわらず、おそらくないSQLインジェクション、これはLIMITフィールドであり、Int.MAX_INTがとても高いので、私は潜在的なセキュリティ上の問題としてこれを見てしまうためと認識しました。これは、呼び出し元が、入力データが信頼できないソースからのものである場合、データベースが予想よりもはるかに多くの作業を実行する可能性があるためです。

LIMITに渡される値は、予想される妥当な範囲内であることが検証されなければなりません。また、PreparedStatementを使用することも検討してください。

関数に渡される型がタイプIntであるため、Scalaの型システムの型安全性は、これらが整数値であることを保証することを意味します。そのため、任意のSQLをSQLに注入することはできません。そのため、SQLインジェクションの対象とはなりません。

しかし、パラメータマーカを持つPreparedStatementを使用すると、セキュリティ以外の理由でも、より優れています。したがって、PreparedStatement、またはPreparedStatementを超過する機能を持つ他のSQLライブラリを使用するように切り替えると便利です。

PreparedStatementを含むJava JDBC APIはScalaで使用できるため、使用することができ、使用できるScala固有のライブラリが数多くあり、未処理のJDBC APIを抽象化しています。

関連する問題