Django sql注入及解決方案

2021-10-10 19:12:03 字數 1065 閱讀 3386

my_connection = connections['default']

with my_connection.cursor() as cursor:

sql = "select * from my_table where id=%s "%(pk)

cursor.execute(sql)

result = cursor.fetchall()

當進行如圖所示的查詢操作時,將獲取my_table資料表所有資料

解決方案:

一:使用django的orm查詢,可有效避免sql注入問題。較簡單,不在此贅述

二:引數化查詢

1.簡單查詢,上述查詢**修改為:

my_connection = connections['default']

with my_connection.cursor() as cursor:

sql = '''select * from my_table where id = "%s" '''

cursor.execute(sql,[pk])

cursor.execute(sql)

result = cursor.fetchall()

sql注入問題得以避免

2.模糊查詢,如含like的語句,將引數處理為 「%{}%」的格式:

my_connection = connections['default']

with my_connection.cursor() as cursor:

sql = '''select * from my_table where id like %s '''

cursor.execute(sql,['%{}%'.format(pk)])

cursor.execute(sql)

result = cursor.fetchall()

儲存過程的注入及解決

由於儲存過程中存在用於字串連線的 號連線sql語句,這就造成sql注入的可能性.下面乙個例子 pr usermanage users batchmove create procedure dbo pr usermanage users batchmove usertype int 1,groupid...

sql注入原理及解決方案

sql注入原理就是使用者輸入動態的構造了意外sql語句,造成了意外結果,是攻擊者有機可乘 sql注入攻擊指的是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是sql語法裡的一些組合,通過執行sql語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料...

sql注入解決

所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。我們永遠不要信任使用者的輸入,我們必須認定使用者輸入的資料都是不安全的,我們都需要對使用者輸入的資料進行過濾處理。1.以下例項中,輸入的使用者名稱必須為字母 數字及下劃...