数据库sql防注入

python web 数据库sql注入

大家都知道在数据库查询数据时,是被提示尽量少用字符串查询数据,而是用(?,?,?)的方式代替,这样就是为了防sql注入。

那什么是sql注入呢,我们下面就演示一下:

错误实例:

[html]  view plain  copy
  1. sql = '''  
  2.     SELECT  
  3.         id,username,email  
  4.     FROM  
  5.         users  
  6.     WHERE  
  7.         username="{}" and password="{}"  
  8.     '''.format(usr, pwd)  

数据库中有条数据,username = fei ,password = 1234 ,email = fei@qq.com

我们这里usr = fei,pwd = 1234

我们执行正确的数据,返回,如下:

[html]  view plain  copy
  1. 打开了数据库  
  2. 查询到的数据 [(1, 'fei', 'a@b.c')]  

这样就查询到了需要的数据,但是我们用一条数据库不存在的数据,usr = fei11,pwd = 1234,如下:

[html]  view plain  copy
  1. 打开了数据库  
  2. 查询到的数据 []  

数据为空,因为数据库根本没有这条数据!,但是,用sql注入的话,却可以轻松查到数据

sql注入,只需要改变一句话:

[html]  view plain  copy
  1. usr = 'fei11" or "1"="1'  

我们再次查询:

[html]  view plain  copy
  1. 打开了数据库  
  2. 查询到的数据 [(1, 'fei', 'a@b.c')]  

看见了吧,因为是字符串查询,所以用个 or 条件就可以轻松摆脱限制查询到数据。

现在,我们改成正确的代码:

[html]  view plain  copy
  1. usr = 'fei11" or "1"="1'  
  2.    # usr = 'fei222'  
  3.    pwd = '1234'  
  4.    sql = '''  
  5.    SELECT  
  6.        id,username,email  
  7.    FROM  
  8.        users  
  9.    WHERE  
  10.        username= ? and password= ?  
  11.    '''  
  12.    cursor = conn.execute(sql,(usr,pwd))  

usr选择错误的且有注入,然后看结果:

[html]  view plain  copy
https://blog.csdn.net/qq_37561761/article/details/79326099
  1. 打开了数据库  
  2. 查询到的数据 []  

查询到的为空,所以在数据库操作中尽量少用字符串插入,防止sql注入。

摘自:https://blog.csdn.net/qq_37561761/article/details/79326099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值