SQL注入查询漏洞

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

例如当我们想查询姓名为孙权的有关信息

方法一:静态查询

def login1():
    con=pymysql.connect(host='localhost',port=3306,user='root',password='admin',charset='utf8',db='sxt')
    coursor=con.cursor()
    # sql='select * from table1 where name="孙权" and psw="123";'
    sql='select * from table1 where name="孙权" and 1=1'#psw="1234";'
    coursor.execute(sql)
    rs=coursor.fetchone()
    print(rs)
    coursor.close()
    con.close()

我们可以直接通过name="孙权" and psw="123"来进行判断就可以获取。但攻击者也可以通过将姓名位置输入"孙权" and 1=1'#将后面的密码注释掉,使得密码失去其保护隐私的作用,而获得相关的信息。

方法二:动态查询

def login2(name,psw):
    con=pymysql.connect(host='localhost',port=3306,user='root',password='admin',charset='utf8',db='sxt')
    coursor=con.cursor()
    # sql='select * from table1 where name="'+name+'" and psw="'+psw+'";'
    sql=f'select * from table1 where name="{name}" and psw="{psw}";'
    coursor.execute(sql)
    rs=coursor.fetchone()
    print(rs)
    coursor.close()
    con.close()

我们将name和psw的输入位置用'+name+'和'+psw+'或者{name}和{psw}来替代,通过函数传入有关的参数变量。这样可以通过函数动态查询有关的信息,然而SQL的注入查询漏洞仍然存在。

方法三:占位查询法

def login3(arg):
    con=pymysql.connect(host='localhost',port=3306,user='root',password='admin',charset='utf8',db='sxt')
    coursor=con.cursor()
    sql='select * from table1 where name=%s and psw=%s;'
    coursor.execute(sql,arg)
    rs=coursor.fetchone()
    print(rs)
    coursor.close()
    con.close()

通过%s占位name和psw的输入位置,可以预防注入查询的漏洞。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值