python sql注入如何防止_Python如何防止sql注入
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注入相关推荐
- python连sql server学生管理系统_Python 跨平台连接 SQL Server
前言 使用 python 访问 SQL Server 数据库,还需要支持跨平台.关于 SQL Server 的吐槽就免了,既然存在,总会有遇到这个问题的时候. 首先在 SQLAlchemy 文档中介绍 ...
- python解析sql语句表名_python正则表达式匹配sql语句中的表名
[ string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg ...
- python excel数据处理 空格替换_Python/Excel/SPSS/SQL数据处理方法比较之5 - 空格清理...
我说的空格清理,是存在于字符串前后(以及中间)的空格. 做过数据清洗才知道空格有多么恶心(平静脸 Python 1.左右两侧空格 如果不使用包,则对于一个字符串左右两边的空格,可以使用字符串函数str ...
- python制作表格的语句_python读取excel表格生成sql语句 第一版
由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦 作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...
- python中执行sql语句_python中执行sql语句
来源:疯狂的蚂蚁的博客 总结和整理 本文介绍了 Python 操作 MYSQL.执行 SQL 语句.获取结果集.遍历结果集.取得某个字 段.获取表字段名....... (游标 对象)用于执行查询和获取 ...
- python自带的数据库_Python小白的数据库入门
前言 SQL数据库数据库SQL语言入门SQL简介SQL 的作用 SQL语句分类 SQLite 数据库SQLite 中的数据类型 DDL语句创建表 删除表 修改表 DML语句添加 删除 修改 查询 Py ...
- python中引入sql的优点_引用sql-和引用sql相关的内容-阿里云开发者社区
bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句 bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句. 具体使用方法如下: <pro ...
- python log函数怎么打_Python的log日志功能及设置方法
python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客
- python判断素数的函数_Python素数prime函数练习_Python源码实操
Python素数prime函数练习_Python源码实操 素数prime函数练习 1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回False def ispr ...
最新文章
- python 跳出两层循环,跳出多层循环
- App Store 状态列表
- 机器学习(MACHINE LEARNING)MATLAB求解状态转移矩阵
- reactjs jsx语法规则
- 进程和线程的基本概念
- figma下载_我关于Figma文件封面的故事
- log4j.xml引用Javaweb项目中配置文件的参数
- 数据特征分析:2.对比分析
- hog函数的用法 python_Python常见内置函数用法(三)
- Kubernetes三周年,这仅仅是伟大征途的开始
- python runtime错误_Python错误:没有名为RuntimeE的模块
- 吴恩达 深度学习 编程作业(2-1.1) Initialization
- 什么是阻塞和非阻塞?
- 交警高德强联手 助威吉林马拉松
- mysql bitmap index_位图索引:原理(BitMap index)
- outlook中网址连接打不开解决办法
- iOS开发简历这样写,面试电话接到手软
- [分享]包饺子全攻略
- 使用spring-data-redis实现incr自增
- 【kindle技巧】用Calibre给txt文件生成目录,epub格式制作,电子书格式生成
热门文章
- 干货分享:用ChatGPT调教批量出Midjourney咒语,出图效率Nice ,附资料。
- deepstream检测帧率很高,但是视频有延迟和拖延情况(问题解决)
- android全局轮询机制,Android轮询机制
- uni-app 小项目开发 仿小米商城 前端开发2
- 关于 Flutter JSON 序列化
- 使用elementui美化原生input file
- 时间复杂度怎么算详解
- centos7上rocket.chat环境搭建
- 极域电子教室系统 远程桌面 部分设置界面 鼠标卡住 受控端使用administrator或降为users
- C语言函数库定点数浮点数转换,定点数与浮点数的相互转换