2011-06-02 50 views
7

由于App Engine并未实际使用SQL,这是否意味着App Engine应用程序可以免受SQL注入攻击?Google App Engine应用程序是否容易受到SQL注入攻击?

+1

如果您可以断然声明App Engine不在任何地方使用SQL(直接通过前端或后端的某个地方),那么它不受此类攻击的影响。否则,谁知道。 – 2011-06-02 23:08:22

+0

您是指[数据存储](https://developers.google.com/appengine/docs/java/datastore/)? – 2014-01-28 11:54:53

回答

0

有关应用引擎安全性的讨论,请参阅this question。一般来说,您应该使用参数绑定来生成任何类型的查询。

+0

应该是一个评论 – Sheena 2017-12-14 05:48:37

2

没有SQL ==没有SQL注入,按照定义。 :-)

但是,如果应用程序使用GQL并且天真地将字符串字面值粘贴到查询中而无需转义,那么您当然可以进行GQL注入。你可以用这种方式造成的损失比SQL的某些变体少,它可以让你终止当前的查询并在同一个字符串中开始一个新的查询,但它仍然有潜在的危险。尽管(不像某些语言的默认库...),GQLQuery provides是一个简单的内置参数绑定机制。因此,仍然没有理由将字符串文字填充到查询字符串中。

10

是的,只要您按照用户输入与GQL字符串连接的方式进行操作,它们都同样容易受到注入攻击的影响。但是,如果您按照Google的最佳实践建议,在GQL字符串中输入值时使用参数,那么使用GQL时应该没问题。因此,而不是:

query = GqlQuery("SELECT * FROM Song WHERE composer = 'Lennon, John'") 

你可以使用:

query = GqlQuery("SELECT * FROM Song WHERE composer = :1", "Lennon, John") 

或:

query = GqlQuery("SELECT * FROM Song WHERE composer = :composer", composer="Lennon, John") 

此外,你会避免这个问题完全由使用Query class生成查询。

相关问题