pymysql

python代碼鏈接mysql數據庫

有bug(sql注入的問題):python

#pip3 install pymysql
import pymysql

user=input('user>>: ').strip()
pwd=input('password>>: ').strip()

# 創建連接
conn=pymysql.connect(
    host='192.168.10.15',
    port=3306,
    user='root',
    password='123',
    db='db9',
    charset='utf8'
)

# 拿到遊標
cursor=conn.cursor()

# 執行sql語句

sql='select * from userinfo where user = "%s" and pwd="%s"' %(user,pwd)
rows=cursor.execute(sql)

cursor.close()
conn.close()

# 進行判斷
if rows:
    print('登陸成功')
else:
    print('登陸失敗')

 

在sql語句中 --空格 就表示後面的被註釋了,因此密碼pwd就不驗證了,只要帳戶名對了就好了,這樣跳過了密碼認證就是sql注入mysql

 

 這樣的連用戶名都不用知道均可以進入,因此在註冊帳戶名時好多特殊字符都不讓使用,就怕這個.sql

 

 

 

 

改進版(防止sql注入)數據庫

 

#pip3 install pymysql
import pymysql

user=input('user>>: ').strip()
pwd=input('password>>: ').strip()

# 創建連接
conn=pymysql.connect(
    host='192.168.10.15',
    port=3306,
    user='root',
    password='123',
    db='db9',
    charset='utf8'
)

# 拿到遊標
cursor=conn.cursor()

# 原來的執行sql語句

# sql='select * from userinfo where user = "%s" and pwd="%s"' %(user,pwd)
# print(sql)
# 如今的
sql='select * from userinfo where user = %s and pwd=%s'
rows=cursor.execute(sql,(user,pwd))
#原來是在sql中拼接,如今是讓execute去作拼接user和pwd

cursor.close()
conn.close()

# 進行判斷
if rows:
    print('登陸成功')
else:
    print('登陸失敗')
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息