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


Posted in Python onOctober 31, 2019

先看看那种容易被注入的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中的,导入不要导入错了。

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

Python 相关文章推荐
Python中几个比较常见的名词解释
Jul 04 Python
Python3安装Pymongo详细步骤
May 26 Python
Python与R语言的简要对比
Nov 14 Python
Python堆排序原理与实现方法详解
May 11 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
宝塔更新Python及Flask项目的部署
Apr 11 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 #Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 #Python
如何关掉pycharm中的python console(图解)
Oct 31 #Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 #Python
python实现根据文件格式分类
Oct 31 #Python
Python简易计算器制作方法代码详解
Oct 31 #Python
python3 pillow模块实现简单验证码
Oct 31 #Python
You might like
php仿ZOL分页类代码
2008/10/02 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
js的一些常用方法小结
2011/06/29 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
Python之re操作方法(详解)
2017/06/14 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
小学一年级学生评语
2014/04/22 职场文书
党建工作先进材料
2014/05/02 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Python sklearn分类决策树方法详解
2022/09/23 Python