根據相關技術原理,sql注入可以分為平台層注入和**層注入。前者由不安全的資料庫配置或資料庫平台的漏洞所致;後者主要是由於程式設計師對輸入未進行細緻地過濾,從而執行了非法的資料查詢。基於此,sql注入的產生原因通常表現在以下幾方面:
import pymysql
conn = pymysql.connect(host=
'127.0.0.1'
, port=
3306
, user=
'root'
, passwd=
'123456'
, db=
'table'
, charset=
'utf-8'
)cursor = conn.cursor(
)def
query_key
(key)
: sql =
"select * from user where username='{}' and password={}"
.format
(username,password)
cursor.execute(sql)
fet = cursor.fetchone()if
not fet:
result =
"使用者賬號密碼驗證錯誤!"
else
: result =
"登入成功!"
print
(result)
上面的程式會在使用者輸入key的時候,將key拼接到sql語句進行查詢。
測試正常使用者行為
username = admin
password =
123456
query_key(key)
# select * from user where username='admin' and password='123456'
#結果:登入成功!
測試注入攻擊者行為
username =
"' or '1'='1"
password =
"' or '1'='1"
query_key(key)
# sql = select name from user where username='' or '1'='1' and password='' or '1'='1'
#結果:登入成功!
如果是某個需要登入賬號密碼驗證的**,使用sql語句拼接的方法來運算元據庫,那麼即可用sql注入使之無需賬號密碼就能登陸成功,那麼這樣**的風險性則極大。所有我們需要解決這個問題。
使用引數化查詢執行原生語句;
cursor.execute(
'insert into user (name,password) value (?,?)'
,(name,password)
)
或者
cursor.execute(
'insert into user (name,password) value (%s,%s)'
,(name,password)
)
使用帶有orm的web框架等或使用orm元件sqlalchemy,peewee;
使用正則和字串方法檢測注入風險,比如單引號和注釋符號等(不推薦)。
防止SQL注入解決方案
sql注入就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。對於很多 都有使用者提交表單的埠,提交的資料插入mysql資料庫中,就有可能發生sql注入安全問題,那麼,如何防止sql注入呢?針對sql注入安全問題的預防,需時刻認定使用者...
sql注入原理及解決方案
sql注入原理就是使用者輸入動態的構造了意外sql語句,造成了意外結果,是攻擊者有機可乘 sql注入攻擊指的是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是sql語法裡的一些組合,通過執行sql語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料...
SQL注入漏洞過程例項及解決方案
示例 public class jdbcdemo3 else public static boolean login string username,string password else catch sqlexception e return flag 解決方法,使用preparestatmen...