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使用rabbitmq实现网络爬虫示例
Feb 20 Python
Python中的数学运算操作符使用进阶
Jun 20 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
深入理解Python异常处理的哲学
Feb 01 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
django实现模型字段动态choice的操作
Apr 01 Python
python开根号实例讲解
Aug 30 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
详解Python中的for循环
Apr 30 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中邮箱地址正则表达式实现与详解
2012/04/24 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php实现三级级联下拉框
2016/04/17 PHP
php post换行的方法
2020/02/03 PHP
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
python 调用有道api接口的方法
2019/01/03 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
新驾驶员个人自我评价
2014/01/03 职场文书
公司道歉信范文
2014/01/09 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang