1. SQL 注入
SQL 注入是非常常見(jiàn)的一種網(wǎng)絡(luò)攻擊方式,主要是通過(guò)參數(shù)來(lái)讓 mysql 執(zhí)行 sql 語(yǔ)句時(shí)進(jìn)行預(yù)期之外的操作。
即:因?yàn)閭魅氲膮?shù)改變SQL的語(yǔ)義,變成了其他命令,從而操作了數(shù)據(jù)庫(kù)。
產(chǎn)生原因:SQL語(yǔ)句使用了動(dòng)態(tài)拼接的方式。
例如,下面這段代碼通過(guò)獲取用戶(hù)信息來(lái)校驗(yàn)用戶(hù)權(quán)限:
import pymysqlsql = 'SELECT count(*) as count FROM user WHERE id = ' + str(input['id']) + ' AND password = "' + input['password'] + '"'cursor = dbclient.cursor(pymysql.cursors.DictCursor)cursor.execute(sql)count = cursor.fetchone()if count is not None and count['count'] > 0: print('登陸成功')但是,如果傳入?yún)?shù)是:
input['id'] = '2 or 1=1'
你會(huì)發(fā)現(xiàn),用戶(hù)能夠直接登錄到系統(tǒng)中,因?yàn)樵?sql 語(yǔ)句的判斷條件被 or 短路成為了永遠(yuǎn)正確的語(yǔ)句。
這里僅僅是舉一個(gè)例子,事實(shí)上,sql 注入的方式還有很多種,這里不深入介紹了。
總之,只要是通過(guò)用戶(hù)輸入數(shù)據(jù)來(lái)拼接 sql 語(yǔ)句,就必須在第一時(shí)間考慮如何避免 SQL 注入問(wèn)題。
那么,如何防止 SQL 注入呢?
2. 預(yù)防 SQL 注入 主站蜘蛛池模板: 绥德县| 怀集县| 萝北县| 南安市| 平阳县| 芜湖市| 祁东县| 龙陵县| 大余县| 临西县| 观塘区| 新干县| 兴业县| 辉南县| 宿迁市| 朝阳市| 化德县| 榆中县| 临洮县| 旺苍县| 尤溪县| 定边县| 铁岭市| 崇左市| 黔西| 射阳县| 淄博市| 中西区| 苗栗县| 元氏县| 邯郸市| 班戈县| 丰台区| 新竹县| 通化县| 防城港市| 全椒县| 南宁市| 祁连县| 津南区| 和龙市|