python+Django實現防止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()
一般來說寫SQL語句在程序中,若有where條件一般都可能會去直接拼接,到那時這種方式容易被SQL注入,首先說明下什么是SQL的注入,簡單來說就是你寫的SQL被別人在頁面上拼接了SQL。比如拼接1=1這種條件,如果登錄接口被注入1=1那么就可以隨意進入你的程序了。所以才要防止SQL的注入。
下面再來看看防止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的方法,就可以避免被注入的風險,在SQL的條件中使用%s進行站位,要注意的是這個%s是有順序的,比如說上面這個SQL后面在跟一個條件name=%s那么下面的params集合也要多加一個元素params.append(name)這個時候name是在id后面的在集合中。這樣可以一一對應,但如果要是把params.append(name)寫在了params.append(id)前面SQL執(zhí)行就會出現id=name and name = id 的條件就亂了,甚至還會報錯。
使用connection完畢之后一定要記得close,connection是django.db中的,導入不要導入錯了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python_matplotlib改變橫坐標和縱坐標上的刻度(ticks)方式
這篇文章主要介紹了python_matplotlib改變橫坐標和縱坐標上的刻度(ticks)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python 專題二 條件語句和循環(huán)語句的基礎知識
本文主要介紹了Python條件語句和循環(huán)語句的基礎知識。主要內容包括: 1.條件語句:包括單分支、雙分支和多分支語句,if-elif-else;2.循環(huán)語句:while的使用及簡單網絡刷博器爬蟲;3.循環(huán)語句:for的使用及遍歷列表、元組、文件和字符串。2017-03-03
為什么str(float)在Python 3中比Python 2返回更多的數字
很多朋友質疑為什么str(float)在Python 3中比Python 2返回更多的數字,在Python 2.7中,一個float的repr返回最接近十七位數的十進制數;這足以精確地識別每個可能的IEEE浮點值。對此問題很多朋友都很疑問,下面小編給大家簡單介紹下,需要的朋友可以參考下2018-10-10

