程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP查詢登錄中的sql注入

PHP查詢登錄中的sql注入

編輯:關於PHP編程

----------------------------------------------------------------------------------------------------

比如以下一段登錄的代碼:

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注入問題了。

----------------------------------------------------------------------------------------------------

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved