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 23 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
python计算时间差的方法
May 20 Python
Python下Fabric的简单部署方法
Jul 14 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
Python 存取npy格式数据实例
Jul 01 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 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实现文件下载断点续传详解
2014/10/15 PHP
php mysql 封装类实例代码
2016/09/18 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
学习ExtJS Column布局
2009/10/08 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
vue实现购物车小案例
2019/09/27 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
Python的Urllib库的基本使用教程
2015/04/30 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
农业大学毕业生的个人自我评价
2013/10/11 职场文书
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL