什么是sql注入

 图片来源:百度百科

python 操作mysql产生sql注入问题

  不用ORM框架,框架中已经集成了防范sql注入的功能,使用pymysql实践一下:

  

# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host='127.0.0.1', user='root',password='root',database='oss2_base_test',charset='utf8')
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 定义要执行的SQL语句
proj_id = ""
sql = "SELECT * FROM oss2_base_test.auto_task where proj_id={};".format(proj_id)
# 执行SQL语句
cursor.execute(sql)
result = cursor.fetchall()
print(result)
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()

  上面的sql最终被转为了:sql = "SELECT * FROM oss2_base_test.auto_task where proj_id='146';

  符合预期,执行也是没有问题的

  

sql注入攻击:

  sql = "SELECT * FROM oss2_base_test.auto_task where proj_id={};".format("'' or 1=1")

  上面语句被转为:"SELECT * FROM oss2_base_test.auto_task where proj_id='' or 1=1;"

  这将导致表中所有数据都被读取出来,造成的压力可想而知

  我们如果涉及到只取部分数据,用limit限制,看sql注入攻击如何写:

  正常查询:sql = "SELECT * FROM oss2_base_test.auto_task where proj_id={} limit 5;".format("146")

  最终被转为:sql = "SELECT * FROM oss2_base_test.auto_task where proj_id='146' limit 5;"

  sql注入:sql = "SELECT * FROM oss2_base_test.auto_task where proj_id={} limit 5;".format("'' or 1=1#")

  最终转化为:sql = "SELECT * FROM oss2_base_test.auto_task where proj_id='' or 1=1 # limit 5;"

  在sql中,#表示注释,#后面的语句都不会被执行,自然limit也就失效了,所有的数据都会被查出来

sql注入原理:

  传入参数中'' or 1=1# 被当作sql语句执行了,or 后面 1=1使条件永远为真,且# 将limit进行注释,我们当前表就被脱裤了

预防:

  不要手动进行拼接sql语句,execute() 提供了自动拼接功能,并进行了sql注入防范机制

  替换为:

  proj_id = "'' or 1=1 #"
  sql = "SELECT * FROM oss2_base_test.auto_task where proj_id=%s limit 5;"
  cursor.execute(sql,(proj_id,))

  

  

  

  

  

mysql中防止sql注入的更多相关文章

  1. MySQL中关于SQL注入的相关需要的基础知识

    零.绪论: 文章部分整理来源于公司同事,特此鸣谢!!! 一.关于注入点在KEY上的注入: 我们来看一个查询,你的第一个字段是过滤器(filter)第二个字段是查询的关键字,例如查询ip == 1.2. ...

  2. 在php中防止SQL注入的方法

    摘要:我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行 php能够更安全.整个PH ...

  3. Python中防止sql注入的方法详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...

  4. Django中的sql注入

    Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整 ...

  5. MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause

    MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause 201 ...

  6. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  7. 【原创】6. 在MYSQL++中实现SQL语法中的NULL

    这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...

  8. python之MySQL学习——防止SQL注入

    python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...

  9. Mysql中的sql是如何执行的 --- 极客时间学习笔记

    MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...

随机推荐

  1. 如何让使用create-react-app构建的项目在build过程中如何不生成.map文件

    避免create-react-app的项目在build的过程中生成 .map 文件的方法:主要是更改 package.json 里面的 build 命令!正式进入修改步骤前,推荐安装 cross-en ...

  2. springboot不同环境打包

    1. 场景描述 springboot+maven打包,项目中经常用到不同的环境下打包不同的配置文件,比如连接的数据库.配置文件.日志文件级别等都不一样. 2. 解决方案 在pom.xml文件中定义 2 ...

  3. [NOIP2016]换教室 题解(奇怪的三种状态)

    2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...

  4. linux_硬链接和软链接区别

    硬链接有点类似于复制的概念.    ln 源文件 目的文件    ln不加-s,则默认是硬链接.例如,ln script script-hard,ls命令显示,script*显示硬链接有两个.我任意删 ...

  5. 【基础算法-模拟-例题-玩具谜题】-C++

    原题链接P1563 玩具谜题 这道题依然是一道模拟题目,就简单讲讲坑点: 1.有些时候在转圈的时候要用到它们站成了一个环的性质! 2.小人面朝的方向影响了它们左右的方向! 3.注意考虑顺时针逆时针与小 ...

  6. [记录]HAproxy负载均衡配置教程

    HAproxy负载均衡配置教程 一.简介 haproxy是一个开源的高性能负载均衡软件:支持双机热备.虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能:支持TCP(四层).HTTP(七层)应用 ...

  7. 洛谷P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解

    题目链接: https://www.luogu.org/problemnew/show/P2880 分析: ST表实现即可,一个最大值数组和最小值数组同时维护 代码: #include<cstd ...

  8. 个人永久性免费-Excel催化剂功能第83波-遍历文件夹内文件信息特别是图像、音视频等特有信息

    在过往的功能中,有体现出在Excel上管理文件的极大优势,在文件的信息元数据中,有图片和音视频这两类特有的属性数据,此篇对过往功能的一个补充,特别增加了图片和音视频信息的遍历功能. 使用场景 在文件管 ...

  9. Excel催化剂开源第24波-较VBA更强大的.Net环境的正则表达式

    在VBA上可以调用正则表达式库,从而编写正则表达式自定义函数,这个相信不少VBA开发者已经熟知,但VBA的VBScript正则表达式库毕竟是一个过时的产品,不像.Net那样是与时俱进的,所以两者实现出 ...

  10. OWASP 关于会话管理 - 译文 [原创]

    英文原文:https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Session_Management_Cheat_Shee ...