icontains和SQL安全

时间:2013-04-18 16:40:41

标签: python django

我有一个网络应用程序,允许用户输入搜索查询,然后检索符合此搜索条件的模型。以下是我的方法:

@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代码注入查询以启动攻击?

1 个答案:

答案 0 :(得分:2)

是的,Django ORM可以保护您免受SQL注入。

当然,您永远无法完全确定应用程序中没有安全漏洞。尽管如此,ORM是负责保护您免受SQL注入的组件,因此您应该认为它是安全的并且保持您的django安装最新


在不相关的说明中,Entry.objects.get(author.icontains=query)中存在拼写错误。

此外,使用.get会在此处抛出大量错误(只要对象不存在或存在多个错误)。它不会像你的docstring那样做。

您可能希望改为使用.filter