我正在嘗試使用PHP和MySQL,但現在我發現了一個我想使用的PHP代碼,但它對於SQL注入而言很脆弱。有誰知道什麼是注入,什麼代碼可以修復它?這個PHP代碼究竟是什麼問題?
<?
// both the username and password must be specified
if(!isset($_GET["username"]) || !isset($_GET["password"])) {
print "NO username and/or password";
die;
}
$username = $_GET["username"];
$password = $_GET["password"];
// prepare database connection
mysql_connect("host", "user", "password");
mysql_select_db("dbase");
// validate the specified username
$res = mysql_query("SELECT id FROM users WHERE username = '$username'");
if(!$res || !($row = mysql_fetch_row($res))) {
print "Unknown username";
die;
}
// validate the password
$res = mysql_query("SELECT password FROM users WHERE id = ".$row[0]);
if(!$res || !($row = mysql_fetch_row($res))) {
print "Illegal userid record";
die;
}
if($password != $row[0]) {
print "Invalid password";
die;
}
// Access Granted
?>
的代碼的一個特殊代碼部分,但是,一個是沒有必要的,用戶名可以與/somecode.php?username=選擇」或‘1’=‘1 &密碼=東西,但’或者不能使用密碼,任何人都可以幫助我嗎?
問候
您是否查詢SQL注入? – ceejayoz 2012-03-13 18:26:40
(在xkcd.com/327/有一個很好的入門書籍) – rjz 2012-03-13 18:28:58
你爲什麼使用陳舊的'mysql_ *'函數。使用PDO! – webbiedave 2012-03-13 18:30:17