我有一个网络应用程序,允许用户输入搜索查询,然后检索符合此搜索条件的模型。以下是我的方法:
@staticmethod
def searchBody(query):
'''
Return all entries whose body text contains the query.
'''
return Entry.objects.get(text__icontains=query)
@staticmethod
def searchTitle(query):
'''
Return all entries whose title text contains the query.
'''
return Entry.objects.get(title__icontains=query)
@staticmethod
def searchAuthor(query):
'''
Return all entries whose author text contains the query.
'''
return Entry.objects.get(author.icontains=query)
我的问题很简单:这是否安全?换句话说,incontains
是否执行必要的字符串转义操作,因此一个人不能将SQL或Python代码注入查询以启动攻击?
答案 0 :(得分:2)
是的,Django ORM可以保护您免受SQL注入。
当然,您永远无法完全确定应用程序中没有安全漏洞。尽管如此,ORM是负责保护您免受SQL注入的组件,因此您应该认为它是安全的并且保持您的django安装最新!
在不相关的说明中,Entry.objects.get(author.icontains=query)
中存在拼写错误。
此外,使用.get
会在此处抛出大量错误(只要对象不存在或存在多个错误)。它不会像你的docstring那样做。
您可能希望改为使用.filter
。