Home | 簡體中文 | 繁體中文 | 雜文 | 打賞(Donations) | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 知乎專欄 | Search | Email

25.3. 資料庫開發規範

25.3.1. 使用pdo_mysql替代mysql

禁止通過字元串連結拼接sql語句,極容易出現注入漏洞

錯誤的寫法:

$sql = "select * from table where id='".$id."'"; 
$sql = "INSERT INTO fruit(name, colour) VALUES ('".$name."', '".$colour."')"; 
			

$sql = "select * from table where id=".$id; 這種寫法如果id沒有做檢查可以100%注入成功

正確的寫法

$sql = "select * from table where id=?"; 
$sql = "INSERT INTO fruit(name, colour) VALUES (?, ?)"; 	
			

使用“?”優勢不便於我們排查調試有可能你傳入的數字不對稱,我們建議使用bindParam() 和 bindValue()

$sql = "select * from table where id = :id"; 
$sql = "INSERT INTO fruit(name, colour) VALUES (:name, :colour)"; 				
			

25.3.2. 查詢規範

禁止使用 * 例如:

select * from member;
			

查詢記錄是否存在

select count(id) from member where username = :username
			

25.3.3. 結果集使用注意事項

錯誤的使用使方式

print($row[0]);
print($row[1]); 
			

這種方式,有可能當資料庫結構改變,增加欄位,欄位順序發生變化,輸出數據都會出錯