• mysql 注入问题


    1、实质

    MySql语句是用户自行拼接的字符串

    2、例子

    import pymysql
    # 获取用户输入信息
    username = input("请输入用户名:")
    pwd = input("请输入密码:")
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='@WSX3edc',
        database='userinfo',
        charset='utf8'
    )
    # 获取光标
    cursor = conn.cursor()
    sql = "select * from info where name='%s' and password='%s';" % (username, pwd)
    # 执行MySql语句
    print(sql)
    ret = cursor.execute(sql)
    if ret:
        print("登录成功!")
    else:
        print("登录失败!")
    # 关闭光标
    cursor.close()
    # 关闭连接
    conn.close()

    注入语句

    输入语句
    losser' or 1=1 #
    输出sql语句
    select * from info where name='losser' or 1=1 #' and password='';
    注意:我这里用pycharm连接MySql,在pycharm中sql语句的注释是:#
    如果不通过pycharm连接数据库,而是直接通过pymysql连接 注释应该是: --
    select * from info where name='losser' or 1=1 
    1=1为永真语句
    #' and password='';

    3、解决注入问题->通过pymysql模块进行字符拼接

    import pymysql
    # 获取用户输入信息
    username = input("请输入用户名:")
    password = input("请输入密码:")
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='@WSX3edc',
        database='userinfo',
        charset='utf8'
    )
    # 获取光标
    cursor = conn.cursor()
    # sql语句
    sql = 'select * from info where name=%s and password=%s;'
    # 执行sql语句,通过pymysql进行sql语句拼接
    ret = cursor.execute(sql, [username, password])
    if ret:
        print("登录成功!")
    else:
        print("登录失败!")
    # 关闭光标
    cursor.close()
    # 关闭连接
    conn.close()
  • 相关阅读:
    Linux iptables 配置规则
    Java之品优购课程讲义_day06(7)
    TCP的三次握手与四次挥手
    区块链挖矿演变史,一键挖矿逐渐成主流
    Java KeyStore 用命令生成keystore文件
    SpringBoot | 第六章:常用注解介绍及简单使用
    PHP开发模式之-单例模式
    Ansible笔记
    CentOS7中搭建cobbler自动装机服务
    号称“新至强,可拓展,赢当下”的Xeon可拓展处理器有多逆天?
  • 原文地址:https://www.cnblogs.com/wt7018/p/11210514.html
Copyright © 2020-2023  润新知