SQL注入威胁?

时间:2016-04-05 20:07:47

标签: sql scala sql-injection

下面的代码是否受SQL注入的影响,如果是,则修改它的任何建议。感谢

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

1 个答案:

答案 0 :(得分:1)

<强>更新 经过反思,我刚才意识到,因为这是一个LIMIT字段,并且因为Int.MAX_INT如此之高,我会认为这是一个潜在的安全问题,尽管可能不是SQL注入。这是因为如果输入数据来自不受信任的来源,调用者将能够使数据库执行比预期更多的工作。

传递给LIMIT的值应验证在预期的合理范围内,我还会考虑使用PreparedStatement

因为传递给函数的类型是Int类型,所以Scala类型系统的类型安全性意味着它们保证是整数值。因此,任意SQL都无法注入SQL,因此我不会将此视为受SQL注入。

然而,除了安全性之外,使用带有参数标记的PreparedStatement更好是出于其他原因,例如性能,因此切换到使用PreparedStatement或其他具有抽象PreparedStatement s的功能的SQL库在这里很有用。

请注意,包含PreparedStatement的Java JDBC API在Scala中可用,因此可以使用,并且可以使用许多可以使用的Scala特定库,这些库通过原始JDBC API进行抽象。