----------------------------------------------------------------------------------------------------
比如以下一段登錄的代碼:
if($l = @mysql_connect('localhost', 'root', '123')) or die('數據庫連接失敗');
mysql_select_db('test');
mysql_set_charset('utf8');
$sql = 'select * from test where username = "$username" and password = "$password"';
$res = mysql_query($sql);
if(mysql_num_rows($res)){
header('Location:./home.php');
}else{
die('輸入有誤');
}
----------------------------@chenwei 黑眼詩人 <www.chenwei.ws>--------------------------
注意上面的sql語句,存在很大的安全隱患,如果使用以下萬能密碼和萬能用戶名,那麼可以輕松進入頁面:
1. $sql = 'select * from test where username = "***" and password = "***" or 1 = "1"';
很明顯,針對這條sql語句的萬能密碼是: ***" or 1 = "1
2. $sql = 'select * from test where username ="***" union select * from users/* and password = "***"';
正斜線* 表示後面的不執行,mysql支持union聯合查詢, 所以直接查詢出所有數據; 所以針對這條sql語句的萬能用戶名是:***" union select * from users/*
但是,此注入只針對代碼中的sql語句,如果$sql = "select * from test where username = $username and password = $password";
上面的注入至少已經不管用了,不過方法是一樣的;
在使用PDO之後,sql注入完全可以被避免,而且在這個快速開發的時代,框架橫行,已然不用過多考慮sql注入問題了。
----------------------------------------------------------------------------------------------------