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处理csv数据的方法
Mar 11 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
python面试题之列表声明实例分析
Jul 08 Python
python3实现mysql导出excel的方法
Jul 31 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
聊聊python中的循环遍历
Sep 07 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中的null合并运算符
2015/12/30 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
PHP实现简单日历类编写
2020/08/28 PHP
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python3实现磁盘空间监控
2018/06/21 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
django和vue实现数据交互的方法
2019/08/21 Python
没编程基础可以学python吗
2020/06/17 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
销售个人求职信范文
2014/04/28 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
领导新年致辞2016
2015/07/29 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
Python List remove()实例用法详解
2021/08/02 Python