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注入攻击。我在哪里看到过这一点……啊,是的。。。。看起来很不错。谢谢