python使用mysql,sql注入問題


python使用mysql

import pymysql


conn = pymysql.connect(
    host = '127.0.0.1',          # 連接地址
    port = 3306,                   #端口
    user = root,                    #用戶名  
    password = '',                 #密碼
    database = 'db',              #庫名稱
    charset = 'utf8'               #編碼格式   utf8,不是utf-8
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)         #產生一個游標,以字典的形式返回查詢出來的數據,鍵是表的字段,值是表字段對應的信息
sql = select * from userinfo        # 寫sql語句
cursor.execute(sql)              # 執行傳入的sql語句  
print(cursor.fetchone())        #拿到表中一條數據
print(cursor.fetchone())   
print(cursor.fetchone())   
cursor.scroll(1,'absolute')      #absolute絕對移動,前面數字寫幾,就相對於起始位置向后移動幾位
cursor.srcoll(1,'relative')       #relative相對移動,前面寫幾,就相對於當前位置向后移動幾位
print(cursor.fetchall())          #拿到表中所有的數據

sql注入問題

conn = pymysql.connect(
    host = '127.0.0.1',       
    port = 3306,            
    user = root,                    
    password = '',                 
    database = 'db',             
    charset = 'utf8'               
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)
username = input('請輸入用戶名:')
password = input('請輸入密碼:')
sql = "select * from userinfo where name = '%s' and password ='%s'" %s(username, password)
res = cursor.execute(sql)
if res:
    print(cursor.fetchall())
else:
    print('賬號或密碼錯誤')

我們用上述一段代碼詮釋一下sql注入的問題, 當我們輸入正確的賬號密碼的時候,發現可以正常打印字段數據,當我們輸入錯誤賬號或密碼時,就顯示賬號密碼錯誤

以我們只知道用戶名為例

竟然查到了用戶的所有信息,這個是根據 -- 注釋做到的sql注入

 

 

假如我們賬號密碼都不知道,那么如何用sql注入去獲取網站的用戶信息呢

在我們對賬號密碼毫不知情的情況下,我們使用or判斷條件的成立,再加上 --注釋,可以獲取到網站所有的用戶信息

根據以上兩個問題我們應該如何解決呢?

conn = pymysql.connect(
    host = '127.0.0.1',       
    port = 3306,            
    user = root,                    
    password = '',                 
    database = 'db',             
    charset = 'utf8'               
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)
username = input('請輸入用戶名:')
password = input('請輸入密碼:')
sql = "select * from userinfo where name = %s and password =%s" 
res = cursor.execute(sql,(username,password))                      # execute可以自動識別sql語句中的%s,它可以幫助你過濾特殊的字符,避免sql注入的問題
if res:
    print(cursor.fetchall())
else:
    print('賬號或密碼錯誤')

 

 

總結:

  1.sql注入,就是利用注釋等具有特殊意義的符號,來完成的

  2.后續寫sql語句時,不要手動去拼接關鍵性的數據,而是交由execute去拼接

 

 

 

python對mysql的增,改,刪操作

import pymysql


conn = pymysql.connect(
    host = '127.0.0.1',          
    port = 3306,                   
    user = root,                   
    password = '',                 
    database = 'db',             
    charset = 'utf8'               
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)  
sql = "insert into user(name,password) values('wu','123') "    #插入,增
cursor.execute(sql)
conn.commit()   在新增時要寫conn.commit()
import pymysql


conn = pymysql.connect(
    host = '127.0.0.1',          
    port = 3306,                   
    user = root,                   
    password = '',                 
    database = 'db',             
    charset = 'utf8'               
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)  
sql = "update user set name='qazqaz' where id = 1 "    #修改
cursor.execute(sql)
conn.commit()    #在修改時要寫conn.commit()
 
        
import pymysql


conn = pymysql.connect(
    host = '127.0.0.1',          
    port = 3306,                   
    user = root,                   
    password = '',                 
    database = 'db',             
    charset = 'utf8'               
    )    
cursor = conn.cursor(pymsql.cursors.DictCursor)  
sql = "delete from user where id = 1 "    #刪除
cursor.execute(sql)
conn.commit()    #在刪除時要寫conn.commit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM