python+Django實(shí)現(xiàn)防止SQL注入的辦法
先看看那種容易被注入的SQL
id = 11001
sql = """
SELECT
id,
name,
age
FROM
student
WHERE
id = """+id+"""
"""
cursor = connection.cursor()
try:
cursor.execute(sql)
result = cursor.fetchall()
for result1 in result:
// 代碼塊
pass
finally:
cursor.close()
一般來(lái)說(shuō)寫(xiě)SQL語(yǔ)句在程序中,若有where條件一般都可能會(huì)去直接拼接,到那時(shí)這種方式容易被SQL注入,首先說(shuō)明下什么是SQL的注入,簡(jiǎn)單來(lái)說(shuō)就是你寫(xiě)的SQL被別人在頁(yè)面上拼接了SQL。比如拼接1=1這種條件,如果登錄接口被注入1=1那么就可以隨意進(jìn)入你的程序了。所以才要防止SQL的注入。
下面再來(lái)看看防止SQL的注入
id = 11001
params = []
sql = """
SELECT
id,
name,
age
FROM
student
WHERE
id = %s
"""
params.append(id)
cursor = connection.cursor()
try:
cursor.execute(sql, params)
result = cursor.fetchall()
for result1 in result:
// 代碼塊
pass
finally:
cursor.close()
我們把直接拼接的條件變量放入集合再把集合帶入執(zhí)行SQL的方法,就可以避免被注入的風(fēng)險(xiǎn),在SQL的條件中使用%s進(jìn)行站位,要注意的是這個(gè)%s是有順序的,比如說(shuō)上面這個(gè)SQL后面在跟一個(gè)條件name=%s那么下面的params集合也要多加一個(gè)元素params.append(name)這個(gè)時(shí)候name是在id后面的在集合中。這樣可以一一對(duì)應(yīng),但如果要是把params.append(name)寫(xiě)在了params.append(id)前面SQL執(zhí)行就會(huì)出現(xiàn)id=name and name = id 的條件就亂了,甚至還會(huì)報(bào)錯(cuò)。
使用connection完畢之后一定要記得close,connection是django.db中的,導(dǎo)入不要導(dǎo)入錯(cuò)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python_matplotlib改變橫坐標(biāo)和縱坐標(biāo)上的刻度(ticks)方式
這篇文章主要介紹了python_matplotlib改變橫坐標(biāo)和縱坐標(biāo)上的刻度(ticks)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
python線(xiàn)程類(lèi)改變類(lèi)變量的操作代碼
這篇文章主要介紹了python線(xiàn)程類(lèi)改變類(lèi)變量的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01
python利用requests庫(kù)進(jìn)行接口測(cè)試的方法詳解
在python的標(biāo)準(zhǔn)庫(kù)中,雖然提供了urllib,utllib2,httplib,但是做接口測(cè)試,requests真心好,正如官方說(shuō)的,“讓HTTP服務(wù)人類(lèi)”,一言以蔽之,說(shuō)明一切,這篇文章主要給大家介紹了關(guān)于python利用requests庫(kù)進(jìn)行接口測(cè)試的相關(guān)資料,需要的朋友可以參考下2018-07-07
Pytorch中torch.argmax()函數(shù)使用及說(shuō)明
這篇文章主要介紹了Pytorch中torch.argmax()函數(shù)使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Python Matplotlib庫(kù)入門(mén)指南
這篇文章主要介紹了Python Matplotlib庫(kù)入門(mén)指南,本文講解了Matplotlib是什么,然后給出了Matplotlib基礎(chǔ)繪圖實(shí)例如繪制折線(xiàn)圖、繪制多線(xiàn)圖,并給出了圖例功能使用實(shí)例,需要的朋友可以參考下2015-05-05
一個(gè)Python優(yōu)雅的數(shù)據(jù)分塊方法詳解
在做需求過(guò)程中有一個(gè)對(duì)大量數(shù)據(jù)分塊處理的場(chǎng)景,具體來(lái)說(shuō)就是幾十萬(wàn)量級(jí)的數(shù)據(jù),分批處理,每次處理100個(gè)。這時(shí)就需要一個(gè)分塊功能的代碼。本文為大家分享了一個(gè)Python中優(yōu)雅的數(shù)據(jù)分塊方法,需要的可以參考一下2022-05-05
Python 專(zhuān)題二 條件語(yǔ)句和循環(huán)語(yǔ)句的基礎(chǔ)知識(shí)
本文主要介紹了Python條件語(yǔ)句和循環(huán)語(yǔ)句的基礎(chǔ)知識(shí)。主要內(nèi)容包括: 1.條件語(yǔ)句:包括單分支、雙分支和多分支語(yǔ)句,if-elif-else;2.循環(huán)語(yǔ)句:while的使用及簡(jiǎn)單網(wǎng)絡(luò)刷博器爬蟲(chóng);3.循環(huán)語(yǔ)句:for的使用及遍歷列表、元組、文件和字符串。2017-03-03
為什么str(float)在Python 3中比Python 2返回更多的數(shù)字
很多朋友質(zhì)疑為什么str(float)在Python 3中比Python 2返回更多的數(shù)字,在Python 2.7中,一個(gè)float的repr返回最接近十七位數(shù)的十進(jìn)制數(shù);這足以精確地識(shí)別每個(gè)可能的IEEE浮點(diǎn)值。對(duì)此問(wèn)題很多朋友都很疑問(wèn),下面小編給大家簡(jiǎn)單介紹下,需要的朋友可以參考下2018-10-10

