Django中的sql注入


 
        

Django中防止SQL注入的方法

總是使用Django自帶的數據庫API。它會根據你所使用的數據庫服務器(例如PostSQL或者MySQL)的轉換規則,自動轉義特殊的SQL參數。這被運用到了整個Django的數據庫API中,只有一些例外:
傳給 extra() 方法的 where 參數。  這個參數故意設計成可以接受原始的SQL。使用底層數據庫API的查詢。

## select提供簡單數據
# SELECT age, (age > 18) as is_adult FROM myapp_person;
Person.objects.all().extra(select={'is_adult': "age > 18"})  # 加在select后面

## where提供查詢條件
# SELECT * FROM myapp_person WHERE first||last ILIKE 'jeffrey%';
Person.objects.all().extra(where=["first||last ILIKE 'jeffrey%'"])  # 加一個where條件

## table連接其它表
# SELECT * FROM myapp_book, myapp_person WHERE last = author_last
Book.objects.all().extra(table=['myapp_person'], 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 *

def main():

    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內直接添加參數。 如果你使用這項技術,數據庫基礎庫將會自動添加引號,同時在必要的情況下轉意你的參數。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM