精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一次SQL請求,返回分頁數(shù)據(jù)和總條數(shù),你學(xué)會了嗎?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
本文通過我們最初開始數(shù)據(jù)庫編程時的一個實(shí)踐, 提出在【一次sql請求中執(zhí)行多次sql查詢】的猜想;了解到client_multi_statements= false 確實(shí)能避免一部分sql注入風(fēng)險;之后落地到sql注入的原理, 給出了參數(shù)化查詢(預(yù)編譯語句)能防止sql注入的核心機(jī)制。

日常搬磚,總少不了需要獲取分頁數(shù)據(jù)和總行數(shù)。

一直以來的實(shí)踐是編碼兩次sql請求,分別拉分頁數(shù)據(jù)和totalCount。

最近我在思考:

常規(guī)實(shí)踐為什么不是 在一次sql請求中中執(zhí)行多次sql查詢或多次更新,顯而易見的優(yōu)勢:

① 能顯著減低“客戶端和服務(wù)器之間的網(wǎng)絡(luò)往返次數(shù)”,提高吞吐量② 簡化客戶端代碼邏輯

1. mysql 默認(rèn)單sql請求單語句

mysql客戶端選項client_multi_statements默認(rèn)為false:會禁止多條 SQL 語句的執(zhí)行,這意味著在單個sql請求中只有第一條 SQL 語句會被執(zhí)行,后續(xù)的 SQL 語句將被忽略。

這是一種提高數(shù)據(jù)庫操作安全性的方法,可以有效防止 SQL 注入攻擊和意外執(zhí)行多條語句帶來的風(fēng)險。

MySQL客戶端支持修改這樣的設(shè)定 :client_multi_statements=true。

圖片圖片

劣勢:存在sql注入的風(fēng)險, 錯誤處理比較復(fù)雜。

(1) go-sql-driver開啟多語句支持: multiStatements=true

(2)

SELECT *  FROM `dict_plugin`  limit  20 ,10;
SELECT count(*) as  totalCount  from `dict_plugin`;

將會形成2個數(shù)據(jù)集,golang的實(shí)踐如下:

results, err = p.Query(querystring)
    for results.Next() {
        err = results.Scan(&...)
    }

    if !results.NextResultSet() {
       log.ErrorF(ctx, "expected more result sets: %v", results.Err())
    }
        
    for results.Next() {
        err = results.Scan(&totalCount)
    }

既然提到了開啟client_multi_statements 有sql注入的風(fēng)險,我們就展開聊一聊。

2. sql注入

我們先看下sql注入的原理:

有這樣的業(yè)務(wù)sql:

var input_name string
query: = "select  * from user where user_name='" + input_name+"'"
sql.Query(query)

如果從界面輸入的input_name="janus';delete from user;  --",會形成惡意sql:select * from user where user_name='janus';delete from user;  --' 。

這個時候,客戶端的client_multi_statements默認(rèn)值為false就能于水火之間挽救數(shù)據(jù)庫:執(zhí)行第一個sql之后,后面的惡意sql都不會執(zhí)行。

由此可知,client_multi_statements=false,確實(shí)可以顯著降低sql注入的風(fēng)險,但是還是沒有辦法避免單sql注入, 比如從界面密碼框注入' OR '1'='1 會繞過登錄認(rèn)證。

query:= "select * from user where user='" + input_name +"' and  pwd='" +input_pwd +"'" 
 

select * from user where user='xxx' and pwd='' OR '1'='1'  -- 會繞過認(rèn)證邏輯。

3. 參數(shù)化查詢防止sql注入

參數(shù)化查詢可以防止sql注入風(fēng)險[1]

// Correct format for executing an SQL statement with parameters.

var queryStr = "SELECT * FROM `dict_plugin_Test` WHERE `plugin_name` = ?"
var args string = "55 union select * from `dict_plugin_Test`"

rows, err := db.Query(queryStr, args)

sql查詢內(nèi)部會利用提供的參數(shù)1創(chuàng)建預(yù)編譯語句, 在運(yùn)行時,實(shí)際是執(zhí)行帶參的預(yù)編譯后的語句。

在服務(wù)器收到的查詢?nèi)罩救缦拢?/p>

2024-08-13T08:07:18.922818Z   26 Connect root@localhost on tcinfra_janus_sharing using TCP/IP
2024-08-13T08:07:18.924525Z   26 Prepare SELECT * FROM `dict_plugin_Test` WHERE `plugin_name` = ?
2024-08-13T08:07:18.924671Z   26 Execute SELECT * FROM `dict_plugin_Test` WHERE `plugin_name` = '55 union select * from `dict_plugin_Test`'
2024-08-13T08:07:18.925273Z   26 Close stmt

判斷mysql數(shù)據(jù)庫開啟了查詢?nèi)罩荆簊how variables like '%general_log%';打開sql查詢?nèi)罩镜拈_關(guān):set global general_log = on; 。

注意:參數(shù)占位符根據(jù)DBSM和驅(qū)動而有所不同,例如,Postgres 的pq驅(qū)動程序接受占位符形式是 $1而不是?。

3.1 預(yù)編譯語句

數(shù)據(jù)庫預(yù)編譯后, SQL語義結(jié)構(gòu)和數(shù)據(jù)分離,這樣即使輸入包含惡意代碼,它也只會被當(dāng)作數(shù)據(jù)處理,不會影響已經(jīng)被解析固定的SQL語義結(jié)構(gòu)。

預(yù)編譯語句包含兩次 sql交互:

①  預(yù)編譯階段(Prepare Phase):

  • 客戶端向服務(wù)器發(fā)送一個包含 SQL 語句(帶有參數(shù)占位符)的請求。
  • sql服務(wù)器對SQL 語句進(jìn)行語法和語義檢查,然后對其進(jìn)行預(yù)編譯,并為其分配一個標(biāo)識符(Statement ID)。
  • 服務(wù)器返回一個確認(rèn)響應(yīng),表示預(yù)編譯語句已經(jīng)成功準(zhǔn)備好。

②  執(zhí)行階段(Execute Phase):

  • 客戶端發(fā)送執(zhí)行請求,包含預(yù)編譯語句的標(biāo)識符和實(shí)際參數(shù)值。
  • 服務(wù)器將參數(shù)值綁定到預(yù)編譯語句的占位符上,然后執(zhí)行該語句。
  • 服務(wù)器返回執(zhí)行結(jié)果(如結(jié)果集或影響的行數(shù))。

圖示如下:

客戶端                          服務(wù)器
   |                               |
   |----預(yù)編譯語句(Prepare)------>|
   |                               |
   |<-------確認(rèn)響應(yīng)(OK)----------|
   |                               |
   |---執(zhí)行語句(Execute) + 參數(shù)---->|
   |                               |
   |<----------查詢結(jié)果-------------|

我們了解到預(yù)編譯語句,將SQL語義和數(shù)據(jù)分離,通過兩次sql交互(在預(yù)編譯階段固定了sql語義結(jié)構(gòu)), 有效防止了SQL注入攻擊, 另一方面,預(yù)編譯語句在重復(fù)執(zhí)行某一sql語句時確實(shí)有加快查詢結(jié)果的效果。

golang的預(yù)編譯的寫法與常規(guī)的sql查詢類似:

stmt, err := p.Prepare("SELECT * FROM `dict_plugin_Test` WHERE `plugin_name` = ?")
var args string = "55 union select * from `dict_plugin_Test`"
results, err := stmt.Query(args)
if err != nil {
        fmt.Printf("query fail: %v", err)
        return err
}
defer stmt.Close()

for results.Next() {
    err = results.Scan(.....)
    ......
}

btw, C#  其實(shí)也支持預(yù)編譯語句版本的sqlCommand:SqlCommand.Prepare()

總結(jié)

本文通過我們最初開始數(shù)據(jù)庫編程時的一個實(shí)踐, 提出在【一次sql請求中執(zhí)行多次sql查詢】的猜想;

了解到client_multi_statements= false 確實(shí)能避免一部分sql注入風(fēng)險;

之后落地到sql注入的原理, 給出了參數(shù)化查詢(預(yù)編譯語句)能防止sql注入的核心機(jī)制。

參考資料

[1]參數(shù)化查詢可以防止sql注入風(fēng)險: https://go.dev/doc/database/sql-injection

責(zé)任編輯:武曉燕 來源: 精益碼農(nóng)
相關(guān)推薦

2024-09-22 14:17:54

2024-12-02 09:57:43

GormScopesClauses

2024-06-12 08:36:25

2022-09-29 08:32:14

查詢語句OR

2024-01-18 09:38:00

Java注解JDK5

2024-04-28 08:24:27

分布式架構(gòu)Istio

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-03-28 07:36:01

SQL數(shù)據(jù)庫管理

2024-01-11 08:21:33

Jetpack數(shù)據(jù)技術(shù)

2023-09-06 11:31:24

MERGE用法SQL

2023-07-10 08:36:21

工具pptword

2023-06-05 08:29:46

HTMLWebViewJavaScript

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2024-09-26 09:10:08

2023-10-13 09:04:09

2024-10-29 08:08:44

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

亚洲在线观看| 亚洲综合网狠久久| 国产片一区二区三区| 国产男人精品视频| 欧美精品一级片| 女人抽搐喷水高潮国产精品| 色综合久久88色综合天天| 亚洲mv在线看| 亚洲精品无遮挡| 久久都是精品| 欧美成人免费全部观看天天性色| 中文字幕一区二区人妻电影丶| 成人性生活视频| 亚洲欧美激情在线| 欧美一区二区三区在线播放 | 成年人在线免费看片| 成人永久在线| 色综合久久久网| 日本人妻伦在线中文字幕| 青青久草在线| 国产高清精品网站| 国产精品久久av| 国产 日韩 欧美 成人| 成人动漫免费在线观看| 日韩亚洲欧美综合| 青青青在线视频免费观看| 蜜臀av在线| 国产精品久久夜| 欧美另类网站| 手机看片福利在线| 国产成人综合精品三级| 国产精品色午夜在线观看| 国产精品第9页| 欧美黄污视频| 久久九九精品99国产精品| 欧美色图亚洲激情| 欧美日韩看看2015永久免费| 精品精品欲导航| 国产女同无遮挡互慰高潮91| 国产资源一区| 欧美三级日韩在线| 日韩在线第三页| 亚洲美女久久精品| 黄网站色欧美视频| 黄色一级在线视频| 国产亚洲成av人片在线观看| 亚洲综合成人网| 激情图片qvod| 黄网址在线观看| 成人欧美一区二区三区白人| 日韩理论片在线观看| 青春有你2免费观看完整版在线播放高清 | www夜片内射视频日韩精品成人| 蜜桃精品在线观看| 国产伦精品一区二区三区精品视频| 日本黄色一级视频| 久久久精品午夜少妇| 97av在线视频| 久久综合九色九九| 精品久久久久久久免费人妻| cao在线视频| 亚洲国产日韩一区二区| 亚洲色欲久久久综合网东京热| 性欧美videos高清hd4k| 一区二区三区四区不卡视频| 成年在线观看视频| 日本一本在线免费福利| 亚洲午夜一区二区三区| 国产人妻777人伦精品hd| 高清在线视频不卡| 欧美性生交大片免网| 大肉大捧一进一出好爽视频| 中文字幕人成乱码在线观看| 91豆麻精品91久久久久久| 色婷婷综合久久久久中文字幕| 日韩在线观看不卡| 欧美男生操女生| 麻豆精品国产传媒| 欧美日韩导航| 自拍亚洲一区欧美另类| 五月综合色婷婷| 黄色av日韩| 欧美做爰性生交视频| 亚洲精品国产欧美在线观看| 狠狠色伊人亚洲综合成人| 91视频免费进入| 视频一区二区在线播放| 欧美激情一二三区| 男人的天堂视频在线| 小早川怜子影音先锋在线观看| 在线观看成人免费视频| 成人在线短视频| 校花撩起jk露出白色内裤国产精品| 亚洲人成电影网站色xx| 欧美爱爱免费视频| 国产欧美短视频| 国产精品久久激情| 成人黄色免费视频| 中文字幕欧美日韩一区| 国产肉体ⅹxxx137大胆| 日本少妇一区| 亚洲第一av在线| 亚洲欧洲综合网| 亚洲国产国产亚洲一二三| 国产精品免费视频xxxx| 懂色av蜜臀av粉嫩av分享吧| 国产日韩欧美一区二区三区乱码 | 欧美精品少妇| 亚洲欧洲综合另类| 日韩av片在线看| 日本成人精品| 在线播放精品一区二区三区 | 熟女高潮一区二区三区| 图片小说视频色综合| 热久久免费国产视频| 国产高清在线观看视频| 国产精品素人视频| 精品这里只有精品| 高清不卡一区| 中文字幕国产精品| aaaaaa毛片| 成人av电影在线观看| 日本丰满少妇黄大片在线观看| 久久爱91午夜羞羞| 亚洲国产91精品在线观看| 特一级黄色录像| 日本成人在线电影网| 国产不卡av一区二区| 亚洲国产小视频| 精品爆乳一区二区三区无码av| 日本欧美在线观看| 欧美另类高清视频在线| 色综合桃花网| 亚洲精品国产精品国产自| 欧美精品一区二区蜜桃| 韩国v欧美v日本v亚洲v| 亚洲欧洲精品一区二区| 亚洲成人不卡| 亚洲免费av电影| 日韩精品一区二区在线播放| 成人精品视频一区二区三区| 天天爱天天做天天操| 日韩高清不卡| 中文字幕日本精品| 国产精品成人久久久| 91麻豆国产香蕉久久精品| 欧美成人三级在线视频| 牛牛影视一区二区三区免费看| 欧美激情一级欧美精品| xxxx18国产| 亚洲国产日日夜夜| 国产麻豆xxxvideo实拍| 日韩香蕉视频| 久久99精品久久久久久秒播放器| 9999在线视频| 亚洲成人999| 99久在线精品99re8热| 99久久er热在这里只有精品66| 人妻av无码专区| 高清日韩欧美| 91精品国产九九九久久久亚洲| 亚州男人的天堂| 狠狠综合久久av一区二区小说| 中文文字幕文字幕高清| 国产农村妇女毛片精品久久莱园子 | 国产性生活视频| 中文字幕精品—区二区四季| 污污动漫在线观看| 一本到12不卡视频在线dvd| 51成人做爰www免费看网站| 日本高清在线观看| 亚洲国产成人爱av在线播放| 国产成人精品777777| 国产欧美一区二区三区在线看蜜臀| 九九热精品在线播放| 欧美在线首页| 精品国产乱码久久久久久蜜柚| 国产高清不卡| 久久精品国产电影| 欧美亚洲精品在线观看| 一本一道综合狠狠老| 国产第一页精品| 国产精品1024| 国产精品丝袜久久久久久消防器材| 成人嫩草影院| 99久久99久久| 欧美性xxx| 欧美成人网在线| 人成免费电影一二三区在线观看| 欧洲精品中文字幕| 国产成人无码aa精品一区| 99r国产精品| 中文字幕中文在线| 亚洲另类黄色| 椎名由奈jux491在线播放| 成人资源在线播放| 国产精品福利网站| а√天堂8资源中文在线| 夜夜嗨av色一区二区不卡| 亚洲精品一级片| 欧美午夜精品一区二区蜜桃 | 欧美日韩在线另类| 色婷婷粉嫩av| 久久久久亚洲综合| 国产人妻精品午夜福利免费| 美女脱光内衣内裤视频久久网站| 成人性生活视频免费看| 欧美在线色图| 久久久久久国产精品免费免费| www.成人| 国产精品草莓在线免费观看 | 国产高清视频在线观看| 精品国产免费视频| 国产乱淫片视频| 在线一区二区观看| 国产性xxxx高清| 亚洲最新视频在线观看| 影音先锋男人资源在线观看| 久久久久国产精品人| 在线观看成人动漫| 国产一区二区三区av电影| 手机在线免费观看毛片| 蜜桃av一区| 精品成在人线av无码免费看| 亚洲第一天堂| 亚洲日本无吗高清不卡| 欧美猛男做受videos| 国产综合欧美在线看| 日韩精品一区二区三区中文字幕 | 免费在线激情视频| 在线精品亚洲| av片在线免费| 韩日在线一区| 777av视频| 在线欧美一区| 精品一二三四五区| 欧美日本二区| 免费日韩在线观看| 欧美黄色一级视频| 麻豆一区二区三区在线观看| 五月天久久777| 成人手机视频在线| 91精品国产自产在线观看永久∴| 亚洲精品高清视频| 日韩在线看片| 在线不卡视频一区二区| 国产精品久久久久久麻豆一区软件| 涩涩日韩在线| 日韩大片在线| 一级做a爰片久久| 欧美国产一级| 日本在线视频www色| 欧美1级日本1级| www.日本三级| 亚洲欧洲视频| www黄色在线| 麻豆国产精品一区二区三区 | 欧美成人xxx| 精品国产凹凸成av人导航| www.蜜臀av| 亚洲成人免费网站| 四虎永久在线精品免费网址| 亚洲精品www久久久| 青青草在线免费视频| 中文字幕亚洲一区二区三区| 老司机精品视频在线观看6| 欧美成aaa人片免费看| 欧美人与动牲性行为| 欧美亚洲第一页| 国产精品蜜月aⅴ在线| 亚洲一区二区自拍| 欧美美女啪啪| 亚洲不卡一卡2卡三卡4卡5卡精品| 免费看成人吃奶视频在线| 一区二区三区欧美成人| 欧美日韩亚洲一区| www.亚洲天堂网| 韩国成人福利片在线播放| 日韩少妇一区二区| 国产欧美精品一区二区色综合朱莉 | 一级黄色小视频| 精品少妇一区二区三区在线播放| 亚洲 小说区 图片区 都市| 色777狠狠综合秋免鲁丝| 51xtv成人影院| 全亚洲最色的网站在线观看| 日本久久久久| 久久综合九色欧美狠狠| 欧美成人精品一区二区三区在线看| www.国产亚洲| 丝袜美腿高跟呻吟高潮一区| 色欲无码人妻久久精品| 久久久久久久电影| 久久久久成人片免费观看蜜芽| 欧美性猛交xxxx富婆| av男人天堂av| 亚洲人成在线播放| 日本aa在线| 国产美女直播视频一区| 猫咪成人在线观看| 中文字幕一区二区三区四区五区人 | 中文字幕视频精品一区二区三区| 日韩精品最新在线观看| 一区在线视频| www.午夜av| 久久精品一区八戒影视| 欧美成人aaaaⅴ片在线看| 欧美撒尿777hd撒尿| 香港一级纯黄大片| 久久国产加勒比精品无码| 日韩高清不卡| 久久涩涩网站| 欧美日一区二区三区在线观看国产免| 天天影视综合色| 丁香婷婷综合激情五月色| 精品少妇一区二区三区密爱| 色婷婷精品久久二区二区蜜臀av | 久久夜色精品国产亚洲aⅴ| 桃子视频成人app| 国产精品一区二区免费| 91成人观看| 国产免费又粗又猛又爽| 久久蜜桃av一区二区天堂| 国产稀缺真实呦乱在线| 91麻豆精品国产自产在线观看一区| 久草在线网址| 欧洲中文字幕国产精品| 加勒比色老久久爱综合网| 日韩精品久久一区二区| 精品一区二区三区久久| 亚洲AV成人无码网站天堂久久| 色成年激情久久综合| 天堂在线资源库| 久久久视频免费观看| 一区二区网站| 久久亚洲a v| 福利一区二区在线观看| 国产成人一区二区在线| 在线a免费看| 国产精品视频久久| 欧美视频网址| 一级特黄性色生活片| 日本一区二区不卡视频| 尤物视频免费观看| 伊人伊成久久人综合网站| 欧美xxxx做受欧美护士| 欧美日韩国产精品一区二区| 久久av最新网址| 免费黄在线观看| 欧美在线观看你懂的| 国产午夜在线观看| 国产精品亚洲аv天堂网| 日韩中文欧美| 亚洲天堂网站在线| 亚洲午夜久久久久久久久电影网 | 91麻豆国产精品久久| 免费黄色网址在线| 亚洲人成在线观看网站高清| 韩国成人在线| 久久av喷吹av高潮av| 国产精品综合一区二区三区| 久久综合色综合| 亚洲高清av在线| 欧美舌奴丨vk视频| 中文字幕中文字幕在线中心一区| 国产乱人伦偷精品视频不卡| 国产精品a成v人在线播放| 日韩经典第一页| www.一区| av久久久久久| 久久中文字幕电影| 一区二区视频网站| 美女av一区二区| 青青一区二区| 激情五月俺来也| 亚洲影视资源网| 国产资源在线观看| 亚洲精品免费网站| 亚洲一区二区三区免费在线观看 | 日韩精品诱惑一区?区三区| 制服下的诱惑暮生| 国内久久婷婷综合| 99久热re在线精品996热视频| 久久美女视频| 男人网站在线观看| 在线观看欧美日本| 综合久久2o19| 欧洲精品久久| 成人综合在线网站| 国产乡下妇女三片| 欧美精品久久久久久久久| 欧美老女人另类| 在线观看免费视频黄| 欧美日韩在线播放一区| jizz一区二区三区| 一区二区在线观看网站| aaa欧美日韩| 精品人妻av一区二区三区| 国产成一区二区| 日韩一级免费|