這個月太忙,最近不太太平,我的願望是世界和平!
ps:直接引用別人的話了,因為他們說的已經很好了。
錯誤用法:
1 sql = "select id,type,name from xl_bugs where id =%s and type =
%s" %
(id, type)
2 cur.execute(sql)
這種用法就是常見的拼接字串導致sql注入漏洞的產生。看到這個突然想到上個禮拜drupal水滴的那個漏洞,其並不是預編譯語句被繞過了。而是在構造帶入的預編譯語句的時候拼接了使用者輸入字串,還未帶入查詢的預編譯語句已經被注入了,之後帶入正確的引數,最後被注入了
正確用法:
execute() 函式本身有接受sql語句引數位的,可以通過python自身的函式處理sql注入問題。
1 args =(id, type)
2 cur.execute('
select id, type ,name from xl_bugs where id = %s and type = %s
', args )
使用如此引數帶入方式,python會自動過濾args中的特殊字元,制止sql注入的產生。
execute()函式本身就有接受sql語句變數的引數位,只要正確的使用(直白一點就是:使用」逗號」,而不是」百分號」)就可以對傳入的值進行correctly轉義,從而避免sql注入的發生。
example:
1import sqlite3
23 con =
sqlite3.connect(":memory:")
4 cur = con.cursor
()5 cur.execute("create
table
people (name_last, age)")
67 who =
"yeltsin"
8 age =729
10 # this is
the qmark style:
11 cur.execute("insert
into people values
(?, ?)", (who, age))
1213 # and this is
the named style:
14 cur.execute("select
*from people where name_last=:who and age=
:age", )
1516
print cur.fetchone()
SQL注入和Mybatis預編譯防止SQL注入
所謂sql注入,就是通過把sql命令插入到web表單提交或頁面請求url的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意 的sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而不是按...
SQL語句預編譯(查詢)
sql語句預編譯 sql語句預編譯能預防sql注入提高安全性,是因為sql語句在程式執行前已經進行了預編譯,在程式執行時第一次運算元據庫之前,sql語句已經被資料庫分析,編譯和優化,對應的執行計畫也會快取下來並允許資料庫以引數化的形式進行查詢,當執行時動態地把引數傳給preprarestatemen...
預編譯sql處理 防止sql注入
建立資料庫 create database jdbc demo default character set utf8 i 建立表 use jdbc demo create table admin id int primary key auto increment,username varchar 2...