真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SQL中Injection的作用是什么

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

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作與策劃設(shè)計,榆次網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:榆次等地區(qū)。榆次做網(wǎng)站價格咨詢:028-86922220

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 語句就變?yōu)榱?/p>

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,這樣就是的查詢語句變?yōu)?/p>

$result = D('User')->where([
    'username' => ['neq', 111],
    'password' => $_POST['password'],
]);

那么 $result 的結(jié)果將永遠為 true

防范方法

  • 對傳入的參數(shù)進行數(shù)據(jù)類型判斷和數(shù)據(jù)類型轉(zhuǎn)換

  • 對引號進行轉(zhuǎn)義,PHP 可以使用 addslashes,MySQL_real_escape_string 等函數(shù)

  • 預(yù)處理語句,最有效防范 SQL Injection

  • 代碼審計

預(yù)處理語句是如何防止 SQL Injection 的

預(yù)處理語句是由數(shù)據(jù)庫實現(xiàn)的,比如 MySQL 就有實現(xiàn)預(yù)處理語句。首先講下預(yù)處理的基本流程

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

  • 客戶端發(fā)送數(shù)據(jù),去替換 SQL Template 中的占位符(?)

  • MySQL 執(zhí)行語句,返回結(jié)果

  • 刪除預(yù)處理語句(可選)

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

$stmt = $pdo->prepare("select * from users where username = '?' and password = '?'");

$stmt->execute("123' or 1=1;#", 'test');

以上就是SQL中 Injection的作用是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站欄目:SQL中Injection的作用是什么
文章路徑:http://weahome.cn/article/jhosoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部