人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

一文分析SQL參數(shù)化查詢?yōu)楹文芊乐筍QL注入-頭條焦點

來源:php中文網(wǎng) | 2023-03-17 16:09:28 |

本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識,其中主要跟大家聊一聊SQL參數(shù)化查詢?yōu)槭裁茨軌蚍乐筍QL注入,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。


(資料圖片)

SQL參數(shù)化查詢?yōu)槭裁茨軌蚍乐筍QL注入?

1、SQL 注入是什么

將 SQL 命令插入到表單提交或輸入域名或頁面請求的查詢字符串中,欺騙服務(wù)器執(zhí)行惡意的 SQL 命令。

-- 正常的查詢語句 select * from users where username = "a"; -- 惡意的查詢語句 select * from users where username = "a" or 1==1;

2、參數(shù)化查詢是什么

參數(shù)化查詢是指查詢數(shù)據(jù)庫時,在需要填入數(shù)據(jù)的地方,使用參數(shù)來給值。

set @id = 1;SELECT * from users WHERE id = @id ;

3、SQL 語句的執(zhí)行處理

SQL 語句按處理流程看有兩類:即時 SQL、預(yù)處理 SQL。

即時 SQL

即時 SQL 從 DB 接收到最終執(zhí)行完畢返回,大致的過程如下:

a. 詞法和語義解析  b. 優(yōu)化sql語句,制定執(zhí)行計劃  c. 執(zhí)行并返回結(jié)果

特點:一次編譯,單次運行。

預(yù)處理 SQL

程序中某條 sql 可能會被反復(fù)調(diào)用,或者每次執(zhí)行的時候只有個別的值不同。如果每次按即時 SQL 的流程來看,效率是比較低的。

這時候可以將 SQL 中的值用占位符代替,先生成 SQL 模板,然后再綁定參數(shù),之后重復(fù)執(zhí)行該語句的時候只需要替換參數(shù),而不用再去進(jìn)行詞法和語義分析??梢砸暈?SQL 語句模板化或參數(shù)化。

特點:一次編譯,多次運行,省去了多次解析等過程。(多次運行是指在同一會話中再次執(zhí)行相同的語句,也就不會被再次解析和編譯)

-- 語法  # 定義預(yù)處理語句  PREPARE stmt_name FROM preparable_stmt;  # 執(zhí)行預(yù)處理語句  EXECUTE stmt_name [USING @var_name [, @var_name] ...];  # 刪除(釋放)定義  {DROP | DEALLOCATE} PREPARE stmt_name;

4、預(yù)處理 SQL 是如何防止 SQL 注入的

待執(zhí)行的 SQL 被編譯后存放在緩存池中,DB 執(zhí)行 execute 的時候,并不會再去編譯一次,而是找到 SQL 模板,將參數(shù)傳遞給它然后執(zhí)行。所以類似于 or 1==1 的命令會當(dāng)成參數(shù)傳遞,而不會進(jìn)行語義解析執(zhí)行。

-- 預(yù)處理編譯 SQL ,會占用資源 PREPARE stmt1 from "SELECT COUNT(*) FROM users WHERE PASSWORD = ? AND user_name = ?"; set [@a](https://learnku.com/users/16347) = "name1 OR 1 = 1"; set @b = "pwd1"; EXECUTE stmt1 USING @b,[@a](https://learnku.com/users/16347); -- 使用 DEALLOCATE PREPARE 釋放資源 DEALLOCATE PREPARE stmt1;

推薦學(xué)習(xí):《MySQL視頻教程》

以上就是一文分析SQL參數(shù)化查詢?yōu)楹文芊乐筍QL注入的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: