總是使用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即可
#列印受影響的行數
(count)
#獲取查詢的結果
#result = cs1.fetchone()
result =cs1.fetchall()
#列印查詢的結果
(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,...