python連接mysql的客戶端 MySQL註入問題 之前我們進行用戶名密碼認證是先將用戶名和密碼保存到一個文件中,然後通過讀文件裡面的內容,來和客戶端發送過來的用戶名密碼進行匹配,現在我們學了資料庫,我們可以將這些用戶數據保存到資料庫中,然後通過資料庫裡面的數據來對客戶端進行用戶名和密碼的認證。 ...
python連接mysql的客戶端
import pymysql # 導入模塊
conn = pymysql.connect(
host='127.0.0.1', # 主機模塊
port=3306, # 埠號
user='root',# 用戶名
password='123', # 密碼
database='db', # 需要連接的庫
charset='utf8' # 指定編碼utf8
)
cursor = conn.cursor() # 獲取游標
# cursor = conn.cursor(pymysql.cursors.DictCursor) # 獲取的查詢結果更加規範化 便於分辨
sql = "select * from dep;"
ret = cursor.execute(sql) # ret 受影響的行數
# res = cursor.executemany(sql,[(a,b),(a1,b1),(a2,b2)]) # 插入多行數據時
print(cursor.fetchall()) # 取出所有的
print(cursor.fetchmany(3))# 取出多條
print(cursor.fetchone()) # 取出單條
cursor.scroll(3,'absolute') # 絕對移動,按照數據最開始位置往下移動3條
cursor.scroll(1,'relative') # 通過上面取了一次數據,游標的位置 ,我現在相對移動了1個記錄,那麼下次再取,取出的是第三條,我相對於上一條,往下移動了一條
conn.commit() # 增刪改操作時,需要進行提交
cursor.close() # 關閉游標
conn.close() # 關閉連接
MySQL註入問題
之前我們進行用戶名密碼認證是先將用戶名和密碼保存到一個文件中,然後通過讀文件裡面的內容,來和客戶端發送過來的用戶名密碼進行匹配,現在我們學了資料庫,我們可以將這些用戶數據保存到資料庫中,然後通過資料庫裡面的數據來對客戶端進行用戶名和密碼的認證。
自行創建一個用戶信息表userinfo,裡面包含兩個欄位,username和password,然後裡面寫兩條記錄
sql註入:解決方案
cursor.excute(sql,[參數1,參數2...])
# 使用數據來進行一下用戶名和密碼的認證操作
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db',
charset='utf8'
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
usr = input('請輸入用戶名:').strip()
pwd = input('請輸入密碼:').strip()
# 當已知用戶名時 破解密碼為 (feng'-- dfadasdad)
# 當未知用戶名密碼時 破解密碼為 (fsdf' or 1=1 -- fdsfsdfs)
sql = "select * from userinfo where username='%s' and password='%s';"%(usr,pwd)
res = cursor.execute(sql) # res我們說是得到的行數,如果這個行數不為零,說明用戶輸入的用戶名和密碼存在,如果為0說名存在,你想想對不
print(res) # 如果輸入的用戶名和密碼錯誤,這個結果為0,如果正確,這個結果為1
if res:
print('登陸成功')
else:
print('用戶名和密碼錯誤!')
# 通過上面的驗證方式,比我們使用文件來保存用戶名和密碼信息的來進行驗證操作要方便很多。
解決註入問題
sql = "select * from userinfo where username = %s and password = %s;"%(usr,pwd)
res = cursor.execute(sql,[usr,pwd]) # pymysql 模塊會自動將輸入的特殊字元刪除