Python如何防止sql注入。web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题。

那么在Python web开发的过程中sql注入是怎么出现的呢,又是怎么去解决这个问题的?

这里并不想讨论其他语言是如何避免sql注入的,网上关于PHP防注入的各种方法都有,Python的方法其实类似,这里我就举例来说说。

起因

漏洞产生的原因最常见的就是字符串拼接了。

当然,sql注入并不只是拼接一种情况,还有像宽字节注入,特殊字符转义等等很多种,这里就说说最常见的字符串拼接,这也是初级程序员最容易犯的错误。

首先咱们定义一个类来处理mysql的操作:

这个类有问题吗?

答案是:有!

这个类是有缺陷的,很容易造成sql注入,下面就说说为何会产生sql注入。

为了验证问题的真实性,这里就写一个方法来调用上面的那个类里面的方法,如果出现错误会直接抛出异常。

这个方法非常简单:

一个最常见的select查询语句,也使用了最简单的字符串拼接组成sql语句,很明显传入的参数 testUrl 可控,要想进行注入测试,只需要在testUrl的值后面加上单引号即可进行sql注入测试。

这个不多说,肯定是存在注入漏洞的,脚本跑一遍,看啥结果:

(1064, "You have an error in your SQL syntax; check the manual that

corresponds to your MariaDB server version for the right syntax to use

near ''t.tips''' at line 1")

回显报错,很眼熟的错误,这里我传入的测试参数是:

t.tips'

下面再说一种导致注入的情况,对上面的方法进行稍微修改:

这个方法里面没有直接使用字符串拼接,而是使用了 %s 来代替要传入的参数,看起来是不是非常像预编译的sql?

那这种写法能不能防止sql注入呢?测试一下便知道,回显如下:

(1064, "You have an error in your SQL syntax; check the manual that

corresponds to your MariaDB server version for the right syntax to use

near ''t.tips''' at line 1")

和上面的测试结果一样,所以这种方法也是不行的,而且这种方法并不是预编译sql语句,那么怎么做才能防止sql注入呢?

解决

两种方案

1.对传入的参数进行编码转义

2. 使用Python的MySQLdb模块自带的方法

第一种方案其实在很多PHP的防注入方法里面都有,对特殊字符进行转义或者过滤。

python sql注入如何防止_Python如何防止sql注入相关推荐

  1. python连sql server学生管理系统_Python 跨平台连接 SQL Server

    前言 使用 python 访问 SQL Server 数据库,还需要支持跨平台.关于 SQL Server 的吐槽就免了,既然存在,总会有遇到这个问题的时候. 首先在 SQLAlchemy 文档中介绍 ...

  2. python解析sql语句表名_python正则表达式匹配sql语句中的表名

    [ string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg ...

  3. python excel数据处理 空格替换_Python/Excel/SPSS/SQL数据处理方法比较之5 - 空格清理...

    我说的空格清理,是存在于字符串前后(以及中间)的空格. 做过数据清洗才知道空格有多么恶心(平静脸 Python 1.左右两侧空格 如果不使用包,则对于一个字符串左右两边的空格,可以使用字符串函数str ...

  4. python制作表格的语句_python读取excel表格生成sql语句 第一版

    由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦  作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...

  5. python中执行sql语句_python中执行sql语句

    来源:疯狂的蚂蚁的博客 总结和整理 本文介绍了 Python 操作 MYSQL.执行 SQL 语句.获取结果集.遍历结果集.取得某个字 段.获取表字段名....... (游标 对象)用于执行查询和获取 ...

  6. python自带的数据库_Python小白的数据库入门

    前言 SQL数据库数据库SQL语言入门SQL简介SQL 的作用 SQL语句分类 SQLite 数据库SQLite 中的数据类型 DDL语句创建表 删除表 修改表 DML语句添加 删除 修改 查询 Py ...

  7. python中引入sql的优点_引用sql-和引用sql相关的内容-阿里云开发者社区

    bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句 bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句. 具体使用方法如下: <pro ...

  8. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  9. python判断素数的函数_Python素数prime函数练习_Python源码实操

    Python素数prime函数练习_Python源码实操 素数prime函数练习 1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回False def ispr ...

最新文章

  1. python 跳出两层循环,跳出多层循环
  2. App Store 状态列表
  3. 机器学习(MACHINE LEARNING)MATLAB求解状态转移矩阵
  4. reactjs jsx语法规则
  5. 进程和线程的基本概念
  6. figma下载_我关于Figma文件封面的故事
  7. log4j.xml引用Javaweb项目中配置文件的参数
  8. 数据特征分析:2.对比分析
  9. hog函数的用法 python_Python常见内置函数用法(三)
  10. Kubernetes三周年,这仅仅是伟大征途的开始
  11. python runtime错误_Python错误:没有名为RuntimeE的模块
  12. 吴恩达 深度学习 编程作业(2-1.1) Initialization
  13. 什么是阻塞和非阻塞?
  14. 交警高德强联手 助威吉林马拉松
  15. mysql bitmap index_位图索引:原理(BitMap index)
  16. outlook中网址连接打不开解决办法
  17. iOS开发简历这样写,面试电话接到手软
  18. [分享]包饺子全攻略
  19. 使用spring-data-redis实现incr自增
  20. 【kindle技巧】用Calibre给txt文件生成目录,epub格式制作,电子书格式生成

热门文章

  1. 干货分享:用ChatGPT调教批量出Midjourney咒语,出图效率Nice ,附资料。
  2. deepstream检测帧率很高,但是视频有延迟和拖延情况(问题解决)
  3. android全局轮询机制,Android轮询机制
  4. uni-app 小项目开发 仿小米商城 前端开发2
  5. 关于 Flutter JSON 序列化
  6. 使用elementui美化原生input file
  7. 时间复杂度怎么算详解
  8. centos7上rocket.chat环境搭建
  9. 极域电子教室系统 远程桌面 部分设置界面 鼠标卡住 受控端使用administrator或降为users
  10. C语言函数库定点数浮点数转换,定点数与浮点数的相互转换