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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python contextlib模块使用示例
Feb 18 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
python的re正则表达式实例代码
Jan 24 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
Feb 12 Python
基于Python和C++实现删除链表的节点
Jul 06 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 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代码包装修正版
2008/03/15 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP 微信扫码支付源代码(推荐)
2016/11/03 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
vue中使用input[type="file"]实现文件上传功能
2018/09/10 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
python打开网页和暂停实例
2014/09/30 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python中dict和set的用法讲解
2019/03/28 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python list转置和前后反转的例子
2019/08/26 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
django有哪些好处和优点
2020/09/01 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
小学语文课后反思精选
2014/04/25 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP