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.以下例項中,輸入的使用者名稱必須為字母 數字及下劃...