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内直接添加参数。 如果你使用这项技术,数据库基础库将会自动添加引号,同时在必要的情况下转意你的参数。