我读到 ORM 应该最大限度地减少 SQL 注入攻击的可能性。然而在 Django 中,有时 ORM 受到一定限制,我需要使用原始 SQL。我应该采取哪些步骤来避免 SQL 注入攻击?
目前我知道检查查询字符串中的分号,但除此之外就不知道了。如果我使用参数化查询,这可以解决问题吗?是否有任何库可以将字符串传递给它,为我检查它?
The 文档状态 https://docs.djangoproject.com/en/1.6/topics/db/sql/#passing-parameters-into-raw下列:
如果需要执行参数化查询,可以使用params
论证raw()
:
>>> lname = 'Doe'
>>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])
params
是参数列表或字典。你将使用%s
列表查询字符串中的占位符,或者%(key)s
占位符
对于字典(其中 key 被字典键替换,
当然),无论您的数据库引擎如何。这样的占位符将是
替换为 params 参数中的参数。
这也是使用 Python 的 DB-API 传递参数的标准方法,它将正确清理您的查询。
无论你做什么,都不要进行字符串插值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)