什么是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 = "146"
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,))

  

  

  

  

  

转载于:https://www.cnblogs.com/wangbaojun/p/11341252.html

mysql中防止sql注入相关推荐

  1. mysql node null_node-mysql中防止SQL注入的方法总结

    SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. node-mysql中防止S ...

  2. expressjs如何做mysql注入_node-mysql中防止SQL注入的方法

    大家都知道SQL注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止SQL注入的几种常用做法,有需要的朋 ...

  3. Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入

    文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...

  4. MySQL注入读写文件、HTTP头中的SQL注入和cookie注入

    MySQL注入读写文件 MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(前提是权限足够) 读取前提: 1.用户权限足够高,尽量具有root权限 2. ...

  5. Java应用程序中的SQL注入

    在本文中,我们将讨论什么是SQL注入攻击. 以及它如何影响任何Web应用程序使用后端数据库. 在这里,我专注于Java Web应用程序. 开放Web应用程序安全项目(OWAP)列出了SQL注入是Web ...

  6. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  7. MySQL中的SQL Mode及其作用

    点击上方"蓝字" 关注我们,享更多干货! 与其它数据库不同,MySQL可以运行在不同的SQL Mode下.SQL Mode定义MySQL应该支持什么样的SQL语法,以及它应该执行什 ...

  8. 【MySQL 中 动态sql,游标_】

    MySQL 中   动态sql,游标_SQLServer MySQL的技术博客_51CTO博客

  9. 浅析Java代码审计中的SQL注入漏洞

    浅析Java代码审计中的SQL注入漏洞 1.注入漏洞简介 2.SQL注入漏洞简介 3.JDBC拼接不当造成SQL注入 第一关:使用Statement 第二关:使用PrepareStatement 4. ...

最新文章

  1. JavaScript基础---语言基础(1)
  2. hosts文件_电脑修改hosts文件屏蔽网站方法
  3. Docker操作命令详解
  4. 今天写一个关于浮动的页面,页面高度不能设置。用元素将他撑开。
  5. Arm v8 中断处理
  6. 如何在STS中创建Spring Boot项目
  7. Android.View.InflateException: Binary XML File Line #异常的解决
  8. Gitter - 高颜值GitHub小程序客户端诞生记
  9. 【Kafka】kafka消费 Increase the fetch size, or decrease the maximum message size the broker will allow
  10. (配置消息转换器) sso单点登入之jsonp改进版
  11. TCP/IP协议学习(五) 基于C# Socket的C/S模型
  12. add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'
  13. OKHttp源码解析(6)----拦截器CallServerInterceptor
  14. Idea+Mybatis源码构建
  15. 微信小程序如何跳转视频号直播间
  16. 人民日报喊你学数学!实力不允许?8本书带你入门
  17. opengl-shader学习笔记:varying变量
  18. QStyle之PenStyle的CustomDashLine使用
  19. 花菁染料CY3标记聚乙二醇修饰的活性基团MAL/SH/NH2-星戈瑞
  20. GEE学习记录~~~

热门文章

  1. 三星s8android pie,三星确认了Galaxy S8/S8+及Note9等手机的Android
  2. 0-n-1中缺失的数字
  3. 2018 Multi-University Training Contest 1
  4. 集训8.21树状数组讲解
  5. 计算机网络—无线局域网
  6. 数组和指针:超过一半的数字;水王发帖
  7. SourcesTree使用手册1:与Git进行通信
  8. Unity3D之NGUI基础5.1:代码控制UISprite
  9. bzoj 1086: [SCOI2005]王室联邦(DFS)
  10. 多重背包(二进制优化)