Playframework 是否可以在Play框架中调用SQL注入?

Playframework 是否可以在Play框架中调用SQL注入?,playframework,sql-injection,Playframework,Sql Injection,我想使用Java Play框架来编写RESTful后端。我以前只使用过PHP语言和Android开发 所以我想知道可能的典型PHP SQL注入for Play框架?如果是,如何防御它们?问题不在于游戏,而在于你在游戏中使用的持久性框架。在使用Play with Java时,我相信您已经降级了,尽管降级了,但我认为这两个版本都支持开箱即用,并且都有防止SQL注入的功能,包括使用原始SQL而不是JPA中的JPQL 是一个很好的资源,用于防止使用JPA进行SQL注入 当与Scala一起使用Play时,

我想使用Java Play框架来编写RESTful后端。我以前只使用过PHP语言和Android开发


所以我想知道可能的典型PHP SQL注入for Play框架?如果是,如何防御它们?

问题不在于游戏,而在于你在游戏中使用的持久性框架。在使用Play with Java时,我相信您已经降级了,尽管降级了,但我认为这两个版本都支持开箱即用,并且都有防止SQL注入的功能,包括使用原始SQL而不是JPA中的JPQL

是一个很好的资源,用于防止使用JPA进行SQL注入

当与Scala一起使用Play时,Slick和Anorm也有类似的保护


但是,当然,如果你不遗余力地编写带有漏洞的代码,你就会有带有漏洞的代码。

每一段代码都可能做得不好或不好,如果你足够固执,你将能够允许孩子们通过参数攻击你。。。即使是玩

另一方面,尤其是在游戏中。2.x在类型安全方面投入了大量精力,这意味着在路由级别上,您可以防止最简单的攻击,即在url中声明每个参数类型,这意味着您不需要像在PHP ifintval$_GET['param']>0中那样检查,因为您在路由时间中将其声明为整数。Play就是无法识别这个地方有字符串的路径。样本:

GET  /find-user/:id   controllers.Users.find(id: Int)
需要链接式http://domain.tld/find-user/123 和简单的注入方法http://domain.tld/find-user/123 1==1会给你。。。404页面实际上在默认情况下找不到路由,因为您需要自己处理404

更重要的是,将ie Java与Ebean结合使用时,通常即使您手动构建查询,也可以使用参数化占位符,从而提高安全性。上次我在我们的项目中做了一个调查,虽然我不是超级黑客。。。我无论如何都无法将SQL注入到使用Ebean API编写的基本查询中


最后,如果您使用原始mysql_querySELECT。。。到目前为止,您已经学会了如何使用Play防止注入,您很可能会忘记额外的工作,只要睁大眼睛,您就会安全。

如果框架公开了任何提交原始SQL查询的方法,那么是的-这是完全可能的。框架在保护人们免受自身愚蠢行为的伤害方面只能起到这么大的作用。