下面的代码是否受到SQL注入的影响,如果是,请提供任何修复建议。谢谢
def Function(x: Int, y: Int) = {
var query = s"SELECT * FROM table LIMIT $x, $y"
}发布于 2016-04-06 05:05:22
SQL: On reflection,我刚刚意识到,因为这是一个LIMIT字段,而且Int.MAX_INT非常高,我会将其视为一个潜在的安全问题,尽管可能不是确切的注入。这是因为,如果输入数据来自不受信任的来源,调用者可能会导致数据库执行比预期多得多的工作。
传递给LIMIT的值应该被验证在预期的合理范围内,我也会考虑使用PreparedStatement。
因为传递给函数的类型是Int类型,所以Scala的类型系统的类型安全性意味着这些类型被保证为Integer值。因此,不能将任意SQL注入到SQL中,因此我不认为这会受到SQL注入的影响。
然而,除了安全性之外,使用带有参数标记的PreparedStatement更好,例如性能,所以切换到使用PreparedStatement或其他具有在PreparedStatement上抽象的特性的SQL库在这里会很有用。
请注意,Java JDBC API (包括PreparedStatement )在Scala中可用,因此可以使用,并且可以使用许多特定于Scala的库,这些库在原始的JDBC API上进行抽象。
https://stackoverflow.com/questions/36436043
复制相似问题