亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

如何在PHP中防止SQL注入

來源:不言 發(fā)布時間:2019-02-27 10:52:00 閱讀量:919

本篇文章將給大家介紹關(guān)于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驅(qū)動程序防止SQL注入的方法。下面我們來看具體的內(nèi)容。

php

簡單的SQL注入示例

例如,A有一個銀行網(wǎng)站。已為銀行客戶提供了一個網(wǎng)絡(luò)界面,以查看其帳號和余額。您的銀行網(wǎng)站使用http://example.com/get_account_details.php?account_id=102等網(wǎng)址從數(shù)據(jù)庫中提取詳細信息。

例如,get_account_details.php的代碼如下所示。

1

2

$accountId = $_GET['account_id'];

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = $accountId";

客戶accountId通過查詢字符串作為account_id傳遞。與上面的Url一樣,如果用戶的帳戶ID為102并且它在查詢字符串中傳遞。Php腳本將創(chuàng)建如下所示的查詢。

1

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 102";

accountId 102獲取accountNumber和余額詳細信息,并提供給客戶。

我們假設(shè)另一個場景,智能客戶已經(jīng)通過了account_id,就像0 OR 1=1查詢字符串一樣?,F(xiàn)在會發(fā)生什么?PHP腳本將創(chuàng)建如下所示的查詢并在數(shù)據(jù)庫上執(zhí)行。

1

$query = "SELECT accountNumber, balance FROM accounts WHERE accountId = 0 OR 1=1";

查看由腳本和數(shù)據(jù)庫返回的結(jié)果創(chuàng)建的查詢。您可以看到此查詢返回了所有帳號和可用余額。

這稱為SQL注入。這是一個簡單的方式,其實可以有很多方法來進行SQL注入。下面我們就來看一下如何使用PHP MySQLi驅(qū)動程序和PHP PDO驅(qū)動程序防止SQL注入。

使用PHP-MySQLi驅(qū)動程序

可以使用PHP-MySQLi驅(qū)動程序預(yù)處理語句來避免這些類型的SQL注入。

PHP防止SQL注入的代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$accountId = $_GET['account_id'];

  

if ($stmt = $mysqli->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = ?')) {

   

    $stmt->bind_param("s", $accountId);

  

    $stmt->execute();

  

 $result = $stmt->get_result();

  

 while ($row = $result->fetch_assoc()) {

 // do something here

 }

  

    $stmt->close();

}

使用PHP-PDO驅(qū)動程序

可以使用PHP-PDO驅(qū)動程序prepare語句來避免這些類型的SQL注入。

PHP解決上面的SQL注入問題的代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

$accountId = $_GET['account_id'];

  

if ($stmt = $pdo->prepare('SELECT accountNumber, balance FROM accounts WHERE accountId = :accountId')) {

   

    $stmt->execute(array('name' => $name));

  

 foreach ($stmt as $row) {

 // do something here

 }

  

    $stmt->close();

}


標(biāo)簽: PHP
分享:
評論:
你還沒有登錄,請先