Django中的sql注入

2022-06-30 08:45:07 字數 2216 閱讀 9824

django中防止sql注入的方法

總是使用django自帶的資料庫api。它會根據你所使用的資料庫伺服器(例如postsql或者mysql)的轉換規則,自動轉義特殊的sql引數。這被運用到了整個django的資料庫api中,只有一些例外:

傳給 extra() 方法的 where 引數。  這個引數故意設計成可以接受原始的sql。使用底層資料庫api的查詢。

#

# select提供簡單資料

#person.objects.all().extra(select=) #

加在select後面

## where提供查詢條件

#person.objects.all().extra(where=["

first||last ilike 'jeffrey%'

"]) #

加乙個where條件

## table連線其它表

#book.objects.all().extra(table=['

'], where=['

last = author_last

']) #

加from後面

## params添引數

#!! 錯誤的方式 !!

first_name = '

joe'

#如果first_name中有sql特定字元就會出現漏洞

person.objects.all().extra(where=["

first = '%s'

" %first_name])

#正確方式

person.objects.all().extra(where=["

first = '%s'

"], params=[first_name])

python中sql中注入

from pymysql import *

defmain():

find_name = input("

請輸入物品名稱:")

#建立connection連線

conn = connect(host='

localhost

',port=3306,user='

root

',password='

mysql

',database='

jing_dong

',charset='

utf8')

#獲得cursor物件

cs1 =conn.cursor()

## 非安全的方式

## 輸入 " or 1=1 or " (雙引號也要輸入)

#sql = 'select * from goods where name="%s"' % find_name

#print("""sql===>%s<====""" % sql)

## 執行select語句,並返回受影響的行數:查詢所有資料

#count = cs1.execute(sql)

#安全的方式

#構造引數列表

params =[find_name]

#執行select語句,並返回受影響的行數:查詢所有資料

count = cs1.execute('

select * from goods where name=%s

', params)

#注意:

#如果要是有多個引數,需要進行引數化

#那麼params = [數值1, 數值2....],此時sql語句中有多個%s即可

#列印受影響的行數

print

(count)

#獲取查詢的結果

#result = cs1.fetchone()

result =cs1.fetchall()

#列印查詢的結果

print

(result)

#關閉cursor物件

cs1.close()

#關閉connection物件

conn.close()

if__name__ == '

__main__':

main()

請注意在cursor.execute() 的sql語句中使用「%s」,而不要在sql內直接新增引數。 如果你使用這項技術,資料庫基礎庫將會自動新增引號,同時在必要的情況下轉意你的引數。

Django之SQL注入

所謂sql注入,就是通過把sql命令插入到表單中或頁面請求的查詢字串中,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而不是按照設計者意圖...

滲透攻防Web篇 Django中SQL注入攻與防

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,...

SQL注入中的union注入

環境自己搭的 union聯合,合併,將多條查詢語句結果合併成乙個結果,union注入攻擊是手工測試 1.首先要判斷是否存在注入點 2.通過order by 1 99 查詢字段 首先應該用查詢出欄位 1.注 20表示空格,我這裡從1試到了7 到7的時候報錯,也就會是說有6個字段 2.我的回顯是2和4,...