這個問題在這里已經有了答案: 如何在 Python 的 SQL 陳述句中使用變數? (5 個回答) 10 小時前關閉。
我不熟悉注入攻擊的作業原理。如果我只請求資料(而不是更新/插入),在 .execute() 中使用 f 字串會使我容易受到注入嗎?
同樣,假設我正在嘗試編輯一列。如何在沒有 f 字串的情況下通過 .execute() 放入我自己的變數?
IE
new_date = '30/10/2022'
my_database.execute(f'UPDATE people SET birthday={new_date} WHERE name="Odin"')
更新資料的最佳方法是什么?
另外,如何判斷資料庫是否已損壞?
編輯:我應該添加自己對“漏洞”的理解。用戶可以將自己的 SQL 命令輸入到 new_date 中,以便執行將輸入不同的命令。
uj5u.com熱心網友回復:
是的,只有在new_date用戶可以更改的情況下,它才會讓您容易受到攻擊。例如,假設用戶new_date設定為30/10/2022; DROP DATABASE users --。然后 f 字串將決議為
UPDATE people SET birthday=30/10/2022; DROP DATABASE users -- WHERE name="Odin"
如果此查詢被發送到您的資料庫,那么它將洗掉一個名為users.
為了使用戶輸入安全地發送到資料庫,您必須對其進行清理。要清理您的資料庫輸入,請參閱此網頁。例如,代碼是安全的:
my_database.execute('UPDATE people SET birthday=%s WHERE name="Odin"', (new_date,))
如果new_date是常數并且用戶不能以任何方式更改,則理論上是安全的。但是,請始終謹慎行事。就個人而言,我選擇清理所有輸入而不冒險。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/523324.html
