是否可以在Play Framework中调用SQL注入?

时间:2013-12-11 20:06:41

标签: playframework sql-injection

我想使用Java Play Framework编写RESTful后端。我之前只使用过PHP语言和Android开发。

所以我想知道Play Framework可能是典型的PHP SQL注入吗?如果是,如何防御他们?

2 个答案:

答案 0 :(得分:5)

每一段代码都可以做错或做错,如果你足够顽固,你就可以让孩子通过参数来攻击你......即使是玩游戏。

另一方面,Play(特别是版本2.x)为类型安全付出了巨大的努力,这意味着在路由级别你可以防止最简单的攻击,即你每次都在url中声明类型的params,这意味着你不要当你在路由时将它声明为整数时,需要在PHP if(intval($_GET['param'])>0)中进行检查。播放只是不会识别这个地方的字符串路径。样品:

GET  /find-user/:id   controllers.Users.find(id: Int)

需要http://domain.tld/find-user/123这样的链接,简单的注入方法http://domain.tld/find-user/123 AND 1==1会给你... 404页面(默认情况下路由未找到,因为你需要自己处理404) 。

使用ie with Ebean时更是如此 - 通常即使您手动构建查询 ,也可以使用参数化占位符来提高安全性。上次我在我们的项目中进行了一项调查,虽然我不是超级黑客......但是我甚至无法将SQL注入到使用Ebean API编写的基本查询中。

最后,如果您使用原始mysql_query("SELECT ...直到现在并且学会了如何防止使用Play进行注射,那么您可能会忘记额外的努力,只需保持睁眼,您就会安全。

答案 1 :(得分:4)

问题不在于Play,而在于你在Play中使用的持久性框架。使用Play with Java时,您可以开箱即用JPAEBean(尽管被降级),并且都有防止SQL注入的工具 - 包括使用原始SQL时(而不是在JPA中说JPQL)。

Here是防止使用JPA注入SQL的好资源。

使用Play with Scala时,Slick和Anorm也有类似的保护措施。

但是,当然,如果您不遗余力地编写带有漏洞的代码,那么您将拥有包含漏洞的代码。