国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中防止sql注入的方法詳解

2020-02-23 04:24:03
字體:
來源:轉載
供稿:網友

前言

大家應該都知道現在web漏洞之首莫過于sql了,不管使用哪種語言進行web后端開發,只要使用了關系型數據庫,可能都會遇到sql注入攻擊問題。那么在Python web開發的過程中sql注入是怎么出現的呢,又是怎么去解決這個問題的?

當然,我這里并不想討論其他語言是如何避免sql注入的,網上關于PHP(博主注:據說是世界上最屌的語言)防注入的各種方法都有,Python的方法其實類似,這里我就舉例來說說。

起因

漏洞產生的原因最常見的就是字符串拼接了,當然,sql注入并不只是拼接一種情況,還有像寬字節注入,特殊字符轉義等等很多種,這里就說說最常見的字符串拼接,這也是初級程序員最容易犯的錯誤。

首先咱們定義一個類來處理mysql的操作

class Database: aurl = '127.0.0.1' user = 'root' password = 'root' db = 'testdb' charset = 'utf8' def __init__(self):  self.connection = MySQLdb.connect(self.aurl, self.user, self.password, self.db, charset=self.charset)  self.cursor = self.connection.cursor() def insert(self, query):  try:   self.cursor.execute(query)   self.connection.commit()  except Exception, e:   print e   self.connection.rollback() def query(self, query):  cursor = self.connection.cursor(MySQLdb.cursors.DictCursor)  cursor.execute(query)  return cursor.fetchall() def __del__(self):  self.connection.close()

這段代碼在我之前很多腳本里面都會看見,涉及到Python操作mysql數據庫的腳本我都會寫進去這個類,那么這個類有問題嗎?
答案是:有!

這個類是有缺陷的,很容易造成sql注入,下面就說說為何會產生sql注入。

為了驗證問題的真實性,這里就寫一個方法來調用上面的那個類里面的方法,如果出現錯誤會直接拋出異常。

def test_query(articleurl): mysql = Database() try:  querySql = "SELECT * FROM `article` WHERE url='" + articleurl + "'"  chanels = mysql.query(querySql)  return chanels except Exception, e:  print e

這個方法非常簡單,一個最常見的select查詢語句,也使用了最簡單的字符串拼接組成sql語句,很明顯傳入的參數 articleurl 可控,要想進行注入測試,只需要在articleurl的值后面加上單引號即可進行sql注入測試,這個不多說,肯定是存在注入漏洞的,腳本跑一遍,看啥結果

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''t.tips''' at line 1")

回顯報錯,很眼熟的錯誤,這里我傳入的測試參數是

t.tips'

下面再說一種導致注入的情況,對上面的方法進行稍微修改后

def test_query(articleurl): mysql = Database() try:  querySql = ("SELECT * FROM `article` WHERE url='%s'" % articleurl)  chanels = mysql.query(querySql)  return chanels except Exception, e:  print e            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延庆县| 泰宁县| 武清区| 乌海市| 镇安县| 肥乡县| 吉木萨尔县| 广元市| 繁峙县| 宁海县| 玉林市| 渝北区| 沅陵县| 衡阳市| 双辽市| 庆元县| 游戏| 沙雅县| 荥阳市| 丹阳市| 湘潭市| 玉屏| 高青县| 库车县| 太仆寺旗| 桃江县| 乐山市| 灵宝市| 大悟县| 双城市| 奉贤区| 阿巴嘎旗| 南京市| 兴安县| 界首市| 共和县| 石家庄市| 长泰县| 广州市| 万州区| 射阳县|