iT邦幫忙

0

關於php sql injection的問題

  • 分享至 

  • xImage

我看到很多網路上說login page很容易就會受到sql injection的攻擊。我在網路上的程式碼都是如下。

SELECT * FROM customers WHERE name = 'name' AND password = 'password'

但是如果我用php的if()語法會不會有攻擊的危險?

$password = $POST["password"]
$sql = "SELECT * FROM customers WHERE name = '$name'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    if($row["password"] == $password){
        echo "success"
    }else{
        echo "password incorrect"
    }
  }
} else {
  echo "error";
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0

首先,你誤會了所謂的注入攻擊了。
一般來說,比較簡單的說法是,永遠都不要直接使用可被輸入的值。如POST、GET等等。
至少其可被輸入的值,都需要經過一道手續後。才去給SQL語法使用。

常用的方式如拖位符處理。這點是為了不要讓單雙引號可以被影響到。

再來就是空白處理。
比較安全的方式就是將輸入進來的字串。先做常用字串檢查。

或是不要將SQL字串採用字串連接式的方式。
使用參數置入式的方式。

基本為何現在都會建議用PDO的處理。因為PDO本身就已經有字串參數代入式的做法。

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-10 08:48:23

但是如果我用php的if()語法會不會有攻擊的危險?

只要你「直接用使用者輸入的文字來成 SQL」
還是會有(被 SQL injection 攻擊的風險)

原因如這篇所述
如果懶得看英文
這篇是中文摘錄

由於參考資料日期久遠(13年前)
提醒你主要是看「觀念」而非「程式碼」

我要發表回答

立即登入回答