0

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

@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 代码注入到查询中来发起攻击?

4

1 回答 1

2

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

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


在不相关的注释中,有一个错字Entry.objects.get(author.icontains=query)

此外, using.get会在这里抛出很多错误(只要对象不存在,或者存在多个)。它也不像您的文档字符串所说的那样。

您可能想.filter改用。

于 2013-04-18T16:49:56.283 回答