python

超轻量级php框架startmvc

python+Django实现防止SQL注入的办法

更新时间:2020-08-05 11:36:02 作者:startmvc
先看看那种容易被注入的SQLid=11001sql="""SELECTid,name,ageFROMstudentWHEREid="""+id+""""""cursor=connection.cu

先看看那种容易被注入的SQL


 id = 11001
 sql = """
 SELECT
 id,
 name,
 age
 FROM
 student
 WHERE
 id = """+id+""" 
 """
 cursor = connection.cursor()
 try:
 cursor.execute(sql)
 result = cursor.fetchall()
 for result1 in result:
 // 代码块
 pass
 finally:
 cursor.close()
 

一般来说写SQL语句在程序中,若有where条件一般都可能会去直接拼接,到那时这种方式容易被SQL注入,首先说明下什么是SQL的注入,简单来说就是你写的SQL被别人在页面上拼接了SQL。比如拼接1=1这种条件,如果登录接口被注入1=1那么就可以随意进入你的程序了。所以才要防止SQL的注入。

下面再来看看防止SQL的注入


 id = 11001
 params = []
 sql = """
 SELECT
 id,
 name,
 age
 FROM
 student
 WHERE
 id = %s
 """
 params.append(id)
 cursor = connection.cursor()
 try:
 cursor.execute(sql, params)
 result = cursor.fetchall()
 for result1 in result:
 // 代码块
 pass
 finally:
 cursor.close()

我们把直接拼接的条件变量放入集合再把集合带入执行SQL的方法,就可以避免被注入的风险,在SQL的条件中使用%s进行站位,要注意的是这个%s是有顺序的,比如说上面这个SQL后面在跟一个条件name=%s那么下面的params集合也要多加一个元素params.append(name)这个时候name是在id后面的在集合中。这样可以一一对应,但如果要是把params.append(name)写在了params.append(id)前面SQL执行就会出现id=name and name = id 的条件就乱了,甚至还会报错。 使用connection完毕之后一定要记得close,connection是django.db中的,导入不要导入错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Django 防止SQL注入 Django SQL注入 python 防止SQL注入