python web 數據庫sql注入

大家都知道在數據庫查詢數據時,是被提示儘量少用字符串查詢數據,而是用(?,?,?)的方式代替,這樣就是爲了防sql注入。

那什麼是sql注入呢,我們下面就演示一下:

錯誤實例:

sql = '''
    SELECT
        id,username,email
    FROM
        users
    WHERE
        username="{}" and password="{}"
    '''.format(usr, pwd)

數據庫中有條數據,username = fei ,password = 1234 ,email = [email protected]

我們這裏usr = fei,pwd = 1234

我們執行正確的數據,返回,如下:

打開了數據庫
查詢到的數據 [(1, 'fei', '[email protected]')]

這樣就查詢到了需要的數據,但是我們用一條數據庫不存在的數據,usr = fei11,pwd = 1234,如下:

打開了數據庫
查詢到的數據 []

數據爲空,因爲數據庫根本沒有這條數據!,但是,用sql注入的話,卻可以輕鬆查到數據

sql注入,只需要改變一句話:

    usr = 'fei11" or "1"="1'

我們再次查詢:

打開了數據庫
查詢到的數據 [(1, 'fei', '[email protected]')]

看見了吧,因爲是字符串查詢,所以用個 or 條件就可以輕鬆擺脫限制查詢到數據。

現在,我們改成正確的代碼:

 usr = 'fei11" or "1"="1'
    # usr = 'fei222'
    pwd = '1234'
    sql = '''
    SELECT
        id,username,email
    FROM
        users
    WHERE
        username= ? and password= ?
    '''
    cursor = conn.execute(sql,(usr,pwd))

usr選擇錯誤的且有注入,然後看結果:

打開了數據庫
查詢到的數據 []

查詢到的爲空,所以在數據庫操作中儘量少用字符串插入,防止sql注入。

發佈了41 篇原創文章 · 獲贊 24 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章