Python 访问Django';s SQL净化器离线

Python 访问Django';s SQL净化器离线,python,sql,database,django,sql-injection,Python,Sql,Database,Django,Sql Injection,我认为在关闭%s格式参数时包含显式”可能会阻止这种情况,但是 cursor.execute("SELECT word_id from words where word_name = '%s'" % (word)) if cursor.fetchone() == None: return False return True 这将是一个非常讨厌的字符串搜索!我知道Django总是建议通过他们的防篡改SQL清理器处理基于参数的查询

我认为在关闭
%s
格式参数时包含显式
可能会阻止这种情况,但是

cursor.execute("SELECT word_id from words where word_name = '%s'" %
                   (word))
    if cursor.fetchone() == None:
        return False
    return True

这将是一个非常讨厌的字符串搜索!我知道
Django
总是建议通过他们的防篡改SQL清理器处理基于参数的查询,但如果我将其用于脱机应用程序,我如何能够访问这些方法并首先避免这种情况?有人这样做吗?

您不能使用
raw()
管理器执行查询吗?这将仍然使用Django的SQL清理函数,但允许您对模型运行原始SQL查询

在本例中,我假设模型名为“Word”,所以

"'best'; DELETE * FROM words;"

应该很好用。请注意,您使用word作为参数,而不是直接字符串,这是保护您的。
raw()
的文档位于您不能使用
raw()
管理器执行查询吗?这将仍然使用Django的SQL清理函数,但允许您对模型运行原始SQL查询

在本例中,我假设模型名为“Word”,所以

"'best'; DELETE * FROM words;"

应该很好用。请注意,您使用word作为参数,而不是直接字符串,这是保护您的。
raw()
的文档位于

如果您不是从django应用程序执行此操作,则不需要依赖django的API来保护您免受SQL注入攻击。您正在使用的db API将提供自己的方法,用于将参数安全地输入到SQL查询中。例如,如果您正在使用SQLite,您可以参考中的文档,了解如何安全地构造参数化SQL语句:

Word.objects.raw("SELECT word_id from words where word_name = %s", [word])

如果您不是从django应用程序执行此操作,则不需要依赖django的API来保护您免受SQL注入攻击。您正在使用的db API将提供自己的方法,用于将参数安全地输入到SQL查询中。例如,如果您正在使用SQLite,您可以参考中的文档,了解如何安全地构造参数化SQL语句:

Word.objects.raw("SELECT word_id from words where word_name = %s", [word])

同样的原则也适用于使用Django的ad-hoc cursor.execute函数:使用'params'函数参数,而不是%运算符,为cursor.execute执行的查询提供参数,将保护调用免受SQL注入攻击。我在哪里看到过这一点……啊,是的。。。。看起来很不错。谢谢同样的原则也适用于使用Django的ad-hoc cursor.execute函数:使用'params'函数参数,而不是%运算符,为cursor.execute执行的查询提供参数,将保护调用免受SQL注入攻击。我在哪里看到过这一点……啊,是的。。。。看起来很不错。谢谢