SQL注入尤其是字符串型注入尤為明顯且容易,下面以登錄校驗為例簡單介紹其原理和防御策略。
登錄接口SQL
根據(jù)用戶名和密碼獲取用戶數(shù)據(jù):
正常情況下的請求體Application/json:
所得到的SQL:
SQL注入下的請求體
此時得到的SQL將是:
成功注入的原因:
和原來的結(jié)合
后面的sql組成部分變成了注釋,失去了原來的and邏輯判斷作用
且永遠為真
結(jié)果:
將會造成用戶表所有數(shù)據(jù)的泄露
SQL注入防御
阻止SQL注入的方法主要是利用現(xiàn)有數(shù)據(jù)庫第三方庫完善的防SQL注入的特性,避免重復(fù)造輪子
原始SQL情況下
使用%s占位符,利用PyMySQL自帶的防注入特性
ORM情況下
SQLAlchemy ORM已經(jīng)對SQL注入進行了處理,直接使用ORM語法即可,不需要特別處理。