zoukankan      html  css  js  c++  java
  • pymysql防止SQL注入的方法

    import pymysql
    
    
    class Db(object):
    
        def __init__(self):
            self.conn = pymysql.connect(host="192.168.0.58", user="root", password="123456", port=3306)
            self.cursor = self.conn.cursor()
    
        def __del__(self):
            self.cursor.close()
            self.conn.close()
    
        def execute_sql(self):
            name = input("请输入被查询人的姓名:")
            sql = F"select * from test1.user_info where name='{name}'"
            print(f"----->{sql}<------")
            self.cursor.execute(sql)    # 自己拼装的SQL,在输入时使用特殊的传入值(比如:' or 1=1 or '1),能获取到数据表中的所有信息,也就是存在SQL注入的风险。
            print(self.cursor.fetchall())
    
        def secure_execute_sql(self):
            name = input("(安全)请输入被查询人的姓名:")
            sql = "select * from test1.user_info where name=%s"
            # print(f"----->{sql}<------")
            params = [name]     # 将参数放入列表或元组中
            self.cursor.execute(sql, params)    # 使用execute方法拼装SQL语句,防SQL注入
            print(self.cursor.fetchall())
    
    
    def main():
        db = Db()
        while True:
            db.execute_sql()
            db.secure_execute_sql()
    
    
    if __name__ == "__main__":
        main()

    执行结果:

  • 相关阅读:
    有关乞讨的人
    雪之国
    Direction
    Qt表格
    单例模式
    工作
    Qt模型model、视图view、代理
    Qt数据库sqlite
    QDateTime
    跨工程传输数据
  • 原文地址:https://www.cnblogs.com/testlearn/p/12497074.html
Copyright © 2011-2022 走看看