以下のコードはSQLインジェクションの対象となりますか?そうであれば、それを修正するための推奨事項があります。おかげSQLインジェクションの脅威ですか?
def Function(x: Int, y: Int) = {
var query = s"SELECT * FROM table LIMIT $x, $y"
}
以下のコードはSQLインジェクションの対象となりますか?そうであれば、それを修正するための推奨事項があります。おかげSQLインジェクションの脅威ですか?
def Function(x: Int, y: Int) = {
var query = s"SELECT * FROM table LIMIT $x, $y"
}
更新:反射に は、私は正確にかかわらず、おそらくないSQLインジェクション、これはLIMIT
フィールドであり、Int.MAX_INT
がとても高いので、私は潜在的なセキュリティ上の問題としてこれを見てしまうためと認識しました。これは、呼び出し元が、入力データが信頼できないソースからのものである場合、データベースが予想よりもはるかに多くの作業を実行する可能性があるためです。
LIMIT
に渡される値は、予想される妥当な範囲内であることが検証されなければなりません。また、PreparedStatement
を使用することも検討してください。
関数に渡される型がタイプInt
であるため、Scalaの型システムの型安全性は、これらが整数値であることを保証することを意味します。そのため、任意のSQLをSQLに注入することはできません。そのため、SQLインジェクションの対象とはなりません。
しかし、パラメータマーカを持つPreparedStatement
を使用すると、セキュリティ以外の理由でも、より優れています。したがって、PreparedStatement
、またはPreparedStatement
を超過する機能を持つ他のSQLライブラリを使用するように切り替えると便利です。
PreparedStatement
を含むJava JDBC APIはScalaで使用できるため、使用することができ、使用できるScala固有のライブラリが数多くあり、未処理のJDBC APIを抽象化しています。
Scalaには、使用できるPreparedStatementがありますか? – ryekayo
あなたはいつでもスカラからJava APIを使用することができますので、実際にはPreparedStatementを使用できます – eliasah