久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL中 Injection的作用是什么

154次閱讀
沒有評論

共計 1473 個字符,預計需要花費 4 分鐘才能閱讀完成。

本篇文章給大家分享的是有關 SQL 中 Injection 的作用是什么,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

SQL Injection,SQL 注入,其實就是利用代碼漏洞改變 SQL 的語意,從而形成惡意 SQL 語句

$username = $_POST[ username 
$password = $_POST[ password 
$query =  select * from users where username =  {$username}  and password =  {$password} 
//  判斷是否登錄成功
if (DB::select($query)) {
 return true;
return false;

咋一看這段偽代碼沒啥問題,就是判斷賬號密碼是否正確,正確就返回 true,允許登錄。但是如果傳入的 username 為 123 or 1=1;#\,那么 SQL 語句就變為了

select * from users where username =  123  or 1=1;
# and password =  {$password}

這條惡意的 SQL 語句無論何時都會返回 true,因為 1=1

通過 ORM 注入

我們前面講過 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

代碼審計

預處理語句是如何防止 SQL Injection 的

預處理語句是由數據庫實現的,比如 MySQL 就有實現預處理語句。首先講下預處理的基本流程

MySQL 接收到 預處理 SQL Template,立刻著手進行解析(詞法和語法)

客戶端發送數據,去替換 SQL Template 中的占位符(?)

MySQL 執行語句,返回結果

刪除預處理語句(可選)

那么預處理語句是如何防范 SQL 注入的呢?首先所謂的 SQL Injection 就是強行去改變 SQL 語意。而在步驟一中已經處理完成語句,將 SQL 的語意固定下來,步驟二的替換占位符并不會改變 SQL 語意。下面是 PHP PDO 的例子

$stmt = $pdo- prepare( select * from users where username =  ?  and password =  ? 
$stmt- execute(123  or 1=1;# ,  test

以上就是 SQL 中 Injection 的作用是什么,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計1473字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乐业县| 定兴县| 定边县| 北宁市| 镇远县| 余江县| 时尚| 玉龙| 五原县| 屏边| 台北市| 剑川县| 泾川县| 皮山县| 牙克石市| 沅江市| 上犹县| 灵寿县| 曲靖市| 英吉沙县| 河池市| 全椒县| 武功县| 墨脱县| 长阳| 六枝特区| 玉林市| 瑞安市| 海伦市| 荥经县| 三门峡市| 泉州市| 重庆市| 梁平县| 海林市| 莆田市| 金堂县| 乐至县| 顺平县| 高雄市| 河南省|