下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

如何防止sql注入到Python中?

作者:课课家教育     来源: http://www.kokojia.com点击数:1090发布时间: 2019-02-28 10:07:08

标签: web漏洞Pythonsql注入

大神带你学编程,欢迎选课

在web漏洞当中,我想大家对于sql都不陌生,毕竟它可是web漏洞之首。sql注入是比较常见的网络攻击,它可以利用程序员编程出现疏忽时实现无账号登录甚至篡改数据库。在Python Web开发的过程都会使用到关系型的数据库,sql注入是就是通过这个而出现的。

如何防止sql注入到Python中?_web漏洞_Python_sql注入_课课家

  那么,我们需要怎么做来解决这个问题呢?又该采取什么样的方案来防止sql注入到Python中呢?接下来小编就来分析讲解一下。

  sql注入产生的起因

  字符串拼接是漏洞产生最常见的一个原因了,sql注入也不例外,但它却并不是只有拼接这一种情况,像特殊字符转移、宽字节注入等等这些情况都是有出现的。初级程序员最容易出现的错误还是字符串拼接,那我们就拿这个作为例子来讲讲吧。

  我们首先需要做的就是为处理MySQL的操作定义一个类

     为处理mysql的操作定义一个类

  不难发现,我们在很多的脚本里面都会有这一段代码,而且这个类在很多涉及到Python操作mysql数据库都会写进去。

  其实这个类是存在一些缺陷的,这些缺陷使得它很容易受到sql注入。那么sql注入为什么会产生呢?下面我们就来说说吧。

  调用上面那个类里面的方法来写一个方法可以用来验证问题的真实性,当出现错误时异常就会被直接抛出来。

      很常见的select查询语句

  这就是一个很常见的select查询语句,方法非常简单,而且也使用了字符串拼接来组成sql语句。Articleurl这个传入的参数很明显是可控的,如果想要进行一个注入测试,在articleurl的值后面加上单引号就可以进行sql注入测试了,并不需要做其他的。可以清楚地说,这个是肯定存在着注入漏洞的,不信可以将脚本跑一遍来看看是什么样的结果

      测试错误

  这里显示是错误的,而且是很熟悉的错误,测试参数传入的是 

      测试参数

  接下来说说导致注入的一种情况,在稍微修改一下上面的方法之后

      导致注入的一种情况

  上面这里使用了%s来代替要传入的参数,并没有直接用字符串拼接,这个看起来是否被很像预编译的sql?然而重要的是,这个方法可不可以防止sql注入。那我们就来测试一下吧

      测试错误

  回显的依然是报错,和之前那种方法的测试结果一样是错误的,显而易见这个方法也不行,而且这并不是预编译的sql语句,即使它像,但它不是。

  那么究竟怎么做才能才能防止sql注入呢?小编就来讲讲两种解决的方案吧

  解决的方案

  (1)对传入的参数进行编码转义。这种方法在很多php的防注入方法里面其实都有,只需要对特殊字符进行转移或者过滤就行。

  使用Python的MySQLdb模块自带的方法。这是内部自带的一种使用方法,和PHP里面的PDO很相似,用上面的数据库类来举例,只需要简单地修改数据库类就行。

  修改后的代码如下

      修改后的代码

  execute执行的时候会传入两个参数,第一个是参数化的sql语句,第二个是其对应的一个实际参数值,传入的参数值会在函数内部进行相应的处理用以防止sql注入,它的实际使用的方法为

     实际使用的方法

  这么做之后就可以防止sql注入了,MySQLdb模块内部在传入一个列表之后会把列表序列化成一个元组,然后再进行escape操作。

以上就是小编整理的关于Python中防止sql注入的内容了,希望大家阅读了这些内容后可以对这方面的学习或者应用更加熟悉。如果想要延伸学习关于Python或者sql的内容的话,大家可以到课课家教育平台搜索相关的课程,里面有丰富的课程内容,相信能给大家带来帮助的哦。

赞(11)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程