我看到很多網路上說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";
}
首先,你誤會了所謂的注入攻擊了。
一般來說,比較簡單的說法是,永遠都不要直接使用可被輸入的值。如POST、GET等等。
至少其可被輸入的值,都需要經過一道手續後。才去給SQL語法使用。
常用的方式如拖位符處理。這點是為了不要讓單雙引號可以被影響到。
再來就是空白處理。
比較安全的方式就是將輸入進來的字串。先做常用字串檢查。
或是不要將SQL字串採用字串連接式的方式。
使用參數置入式的方式。
基本為何現在都會建議用PDO的處理。因為PDO本身就已經有字串參數代入式的做法。