我有一個簡單的網站,我使用PDO建立了與Mysql服務器的連接。爲什麼PDO在連接失敗時打印我的密碼?
$dbh = new PDO('mysql:host=localhost;dbname=DB;port=3306', 'USER',
'SECRET',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
我在我的網站上有一些流量,服務器連接數達到了限制,網站拋出這個錯誤,我的PLAIN密碼!
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08004] [1040] Too many connections' in /home/domain/html/index.php:xxx Stack trace: #0 /home/domain/html/index.php(64): PDO->__construct('mysql:host=loca...', 'USER', 'SECRET', Array) #1 {main} thrown in /home/domain/html/index.php on line 64
諷刺的是,我切換到PDO出於安全考慮,所以這真的讓我震驚,因爲這個確切的錯誤是你可以挑起用簡單的HTTP洪水大多數網站非常容易。
我現在已經將我的連接包裝在try/catch塊中,但我認爲這是災難性的!
我是新來的PDO,所以我的問題是:我必須做什麼才能認爲是安全的?如何以安全的方式建立連接?是否還有其他已知的安全漏洞,像我必須注意的那樣?
參見:http://stackoverflow.com/questions/5811834/why -would-this-be-poor-php-code/5811853#5811853對於使用動態表/數據庫/列名稱時,以及如何堵住那個洞。 – Johan
我完全同意關閉生產中的錯誤,嘗試/捕捉和類似的東西,但考慮如果你有一個程序員的離岸「團隊」,密碼不應該被「初級」程序員所知,這就如你所說一個「災難性」的安全漏洞。更何況,新手程序員根本不在乎關閉錯誤。有了這個說法,我很困惑這個決定揭露密碼錯誤。 – IMB
聖摩爾這是施克!哦,我的上帝!這絕對是無恥的!你需要更多的讚揚,只是爲了保持冷靜,不要進入CAPS RAGE。 – Sharky