python的sql註入
阿新 • • 發佈:2019-03-16
原理 註入攻擊 根據 val space 數位 sel where tab
一、什麽是sql註入:
SQL註入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統。
根據相關技術原理,SQL註入可以分為平臺層註入和代碼層註入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;後者主要是由於程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。
基於此,SQL註入的產生原因通常表現在以下幾方面:
①不當的類型處理;
②不安全的數據庫配置;
③不合理的查詢集處理;
④不當的錯誤處理;
⑤轉義字符處理不合適;
⑥多個提交處理不當。
二、python中解決sql註入
python中存在sql註入風險的sql語句
錯誤用法:
sql
=
"select id,name from user_table where id = %s and name = %s"
%
(
id
, name)
cur.execute(sql)
正確用法:
1.
execute() 函數本身有接受sql語句參數位的,可以通過python自身的函數處理sql註入問題。
args
=
(
id
,
type
)
cur.execute(
‘select id,name from user_table where id = %s and name = %s‘
, args )
2.
rs
=
c.execute(
"select * from log where f_UserName=:usr"
,{
"usr"
:
"jetz"
})
3.
rs
=
c.execute(
"select * from log where f_UserName=:1 "
,[
"jetz"
])
使用如此參數帶入方式,python會自動過濾args中的特殊字符,制止SQL註入的產生。
python的sql註入