SQL Injection,SQL 注入,其實就是利用代碼漏洞改變 SQL 的語意,從而形成惡意 SQL 語句
$username=$_POST['username'];$password=$_POST['password'];$query="select*fromuserswhereusername='{$username}'andpassword='{$password}'";//判斷是否登錄成功if(DB::select($query)){returntrue;}returnfalse;
咋一看這段偽代碼沒啥問題,就是判斷賬號密碼是否正確,正確就返回 true,允許登錄。但是如果傳入的 username 為 123' or 1=1;#\,那么 SQL 語句就變為了
select*fromuserswhereusername='123'or1=1;#andpassword='{$password}'";
這條惡意的 SQL 語句無論何時都會返回 true,因為 1=1
我們前面講過 SQL Injection 就是利用代碼漏洞改變 SQL 的語意,意味著 ORM 也是一個潛在的注入點。以 tp3.2 為例,有下面這段代碼
$result=D('User')->where(['username'=>$_POST['username'],'password'=>$_POST['password'],]);if($result){echo'登錄成功';}else{echo'登錄失敗';}
這段代碼咋看起來沒啥問題,但是如果 username 傳入的是 username[0]=neq&username[1]=1111,這樣就是的查詢語句變為
$result=D('User')->where(['username'=>['neq',111],'password'=>$_POST['password'],]);
那么 $result 的結果將永遠為 true
對傳入的參數進行數據類型判斷和數據類型轉換
對引號進行轉義,PHP 可以使用 addslashes,MySQL_real_escape_string 等函數
預處理語句,最有效防范 SQL Injection
代碼審計
預處理語句是由數據庫實現的,比如 MySQL 就有實現預處理語句。首先講下預處理的基本流程
MySQL 接收到 預處理 SQL Template,立刻著手進行解析(詞法和語法)
客戶端發送數據,去替換 SQL Template 中的占位符(?)
MySQL 執行語句,返回結果
刪除預處理語句(可選)
那么預處理語句是如何防范 SQL 注入的呢?首先所謂的 SQL Injection 就是強行去改變 SQL 語意。而在步驟一中已經處理完成語句,將 SQL 的語意固定下來,步驟二的替換占位符并不會改變 SQL 語意。下面是 PHP PDO 的例子
$stmt=$pdo->prepare("select*fromuserswhereusername='?'andpassword='?'");$stmt->execute("123'or1=1;#",'test');
以上就是SQL中 Injection的作用是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
定向增發股票價格怎么定的?按照規定,定向增發股票的發行價格一般是發行前某一階段的平均價的某一比例。一般情況下,定向增發股票的發行價格是不低于定價基準日前二十個交易日股票均價的90%。比如個股定向增發前二十個交易日的均價為100元,那么定增股票的發行價格應該是在90元到100元之間的。另外根據國家相關規定,定向增發發行價格根據發行對象不同定價也可以不同:控股股東、實際控制人、戰略投資者或認購者將成為...
(資料圖片)有關于星照不宣的意思指什么是成語嗎方面的知識,小編在此整里出來,給大家作為參考,下面就詳細的介紹一下關于星照不宣的意思指什么是成語嗎的相關內容。星照不宣不對,應改為心照不宣,心照不宣是成語。心照不宣是一個漢語成語,指彼此心里明白,而不公開說出來。也指互相之間明白或共同認可一件事物,做出相同的判斷。同時,對方心中所想所希望的予以回應,而無需對方提醒。成語用作謂語、定語、狀語。造句:1、你...
2022年4月20日消息,騰訊旗下休閑娛樂游戲《QQ堂》將正式停止中國大陸地區的運營。這款游戲將于今日11點關閉服務器,屆時玩家將不能正常登錄游戲。同時,游戲服務器的官網、論壇、專屬客服也均關閉?!禥Q堂》于2004年12月29日推出,是騰訊的大型游戲處女作,至今已運營逾17年,曾是很多人的童年。2021年12月,《QQ堂》因項目組戰略計劃,宣布停運。消息一出一度沖上熱搜,不少網友紛紛直呼,&ld...