• MySQL注入问题


    语言:python

    sql注入原理:

    首先看一下登录程序代码

    import  pymysql
    
    username = input('username:')
    pwd = input('password:')
    conn = pymysql.connect(host='localhost', user='root', password='123',database='du', charset='utf8')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    sql = "select * from student where sname = '%s' and sid = '%s'" % (username, pwd)
    
    cursor.execute(sql)
    res = cursor.fetchone()
    if res:
        print('登录成功')
    else:
        print('登录失败')
    
    cursor.close()
    conn.close()
    ==》
    username:aaa
    password:3
    登录成功

    正常用户输入用户名和密码不会出现问题但是当输入带有意义的字符时也会登陆成功

    username:aaa'#
    password:
    登录成功

    这是因为在我们采用拼接字符串的方法来生成mysql指令但是如上生成的指令为

    select * from student where sname = 'aaa'#' and sid = ''

    #后面的代码被注释掉了,而且语句也依然合法通过sname来搜索到的用户存在就可以正常登录,这就是sql注入攻击

    如何防御sql注入

    通过前面的讲解我们得知,要想成功利用SQL注入漏洞,需要同时满足两个条件,一是攻击者可以控制用户的输入,二是注入的代码要被成功执行。

     1. 自己手工对用户输入的值进行转义
                
     2. 使用execute()自动进行过滤
        

    sql = "select * from t4 where name = %s and pwd = %s"
    cursor.execute(sql,(username, pwd))
    插入一条
    cursor.execute(sql, ('lxxx', '1234'))
    插入多条
            data = [
                ('aaaaa', 'aaa'),
                ('bbbb', 'bbb'),
                ('ffff', '666'),
                ('rrrr', '888'),
            ]
            cursor.executemany(sql, data)
  • 相关阅读:
    js this
    python词云的制作方法
    flask表单标签
    scrapy使用PhantomJS爬取数据
    flask连接sqlalchemy数据库,实现简单的登录跳转功能
    useful tools and website
    sqlalchemy精华版
    flask连接数据库mysql+SQLAlchemy
    flask框架get post方式
    flask基础知识
  • 原文地址:https://www.cnblogs.com/duGD/p/11040183.html
Copyright © 2020-2023  润新知