由于App Engine实际上并不使用SQL,这是否意味着App Engine应用程序不受SQL注入攻击的影响?
答案 0 :(得分: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生成查询来避免此问题。
答案 1 :(得分:2)
根据定义,没有SQL ==没有SQL注入。 : - )
但如果应用程序使用GQL并且天真地将字符串文字值粘贴到查询中而不进行转义,那么你肯定可以进行GQL注入。你可以做的损害比SQL的一些变种要少;
- 终止当前查询并在同一个字符串中开始一个新查询,但它仍然有潜在危险。
GQLQuery provides一个简单的内置参数绑定机制(不像某些语言的默认库......)。因此,仍然没有理由将字符串文字填充到查询字符串中。
答案 2 :(得分:0)
有关应用引擎安全性的讨论,请参阅this question。通常,您应该使用参数绑定来生成任何类型的查询。