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同时兼容python2和python3的8个技巧分享
Jul 11 Python
Linux下将Python的Django项目部署到Apache服务器
Dec 24 Python
Python数据类型详解(一)字符串
May 08 Python
基于python的七种经典排序算法(推荐)
Dec 08 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
如何用Python做一个微信机器人自动拉群
Jul 03 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
PyTorch中反卷积的用法详解
Dec 30 Python
Jupyter notebook如何修改平台字体
May 13 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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
一个改进的UBB类
2006/10/09 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
最新党员的自我评价分享
2013/11/04 职场文书
致裁判员加油稿
2014/02/08 职场文书
十佳护士获奖感言
2014/02/18 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
学习作风建设心得体会
2014/10/22 职场文书
寻找成龙观后感
2015/06/12 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS