FreezeJ' Blog

Django数据库防注入

2019-04-28

Django SQL防注入

SQL注入是所有网站建设都应该注意防范的东西,使用Django当然也不例外。下面介绍几个Django中防范SQL注入的方案。

方案一

总是使用Django自带的数据库API。它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数。这被运用到了整个Django的数据库API中,只有一些例外:
传给 extra() 方法的 where 参数。 (参考 附录 C。) 这个参数故意设计成可以接受原始的SQL。
使用底层数据库API的查询。

方案二

看下面的Python代码:

from django.db import connection
def user_contacts(request):
  user = request.GET[*'username'*]
  sql = *"SELECT \* FROM user_contacts WHERE* *username* *= %s"*
  cursor = connection.cursor()
  cursor.execute(sql, [user])  # 通过传参的方式执行原生SQL
  # ... do something with the results

请注意在cursor.execute() 的SQL语句中使用“%s”,而不要在SQL内直接添加参数。 如果你使用这项技术,数据库基础库将会自动添加引号,同时在必要的情况下转意你的参数。

Tags: Django