看板 PHP 關於我們 聯絡資訊
請各位多指教囉! <?php $db = new PDO("mysql:host=localhost;dbname=web", "username", "password"); if (isset($_POST['username']) && isset($_POST['password'])) { $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT `id`, `password` FROM `users` " . "WHERE `username` = :username LIMIT 1"; $login = $db->prepare($sql); $login->bindParam(":username", $username); $login->execute(); $user = $login->fetch(); if ($user && $user['password'] == $password) { $_SESSION['login'] = true; $_SESSION['uid'] = $user['id']; header("location: /"); } else { header("location: /login.php"); } } else { $html = '<!DOCTYPE html> <form action="login.php" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" value="登入" /> </form>'; header("Content-Type: text/html;charset=utf-8"); header("Content-Length: " . strlen($html)); echo($html); } ?> -- ` ◥◣◢◣◢◣ ◢▏。 ○ ο ° ██◤ █◤◥◤█ o ° ◤ ◥ █ █ ˍ ◤◤ ◢◤ ◢◤██◣ ◢ ◢◤ ◤ingsay ◢███ ζ ) ) mt.rmstudio.tw mt@moztw.org ◤◤ wnqui -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.67.27
gname:沒習慣用PDO,看到 $_POST 直接拿來用會抖一下...XD 07/14 22:52
yukang:db存明碼更抖~ 07/14 23:01
a60301:哎呦,這只是個PDO的應用範例咩~(搖尾# 07/15 00:43
johnny1972:其實有bindParam還好,不過password用明碼存? 07/15 08:04
johnny1972:而且怎麼不是丟進sql去比對而直接比,這樣一樣有問題 07/15 08:04
tkdmaf:不管是pdo、原生mysql、mysqli或是active record...... 07/15 09:49
tkdmaf:第一件事,都是先過濾掉所有造成sql injection的原因。 07/15 09:50
carlcarl:五樓指的問題是?? 07/15 20:45
bibo9901:問題就在於用明碼存 07/15 21:26
carlcarl:五樓的說法感覺除了密碼沒做hash 還有其它問題@@ 07/15 21:33
see7di:你寫的這個有漏洞,POST的值沒有經過任何處理,有注入漏洞 07/15 21:37
chaoms:樓上,bindParam就處理了喔~ 07/15 21:47
johnny1972:bindParam 只能防first order sql injection喔 07/15 22:19
xxxzzz:可以請樓上和五樓舉個例子,破這個範例嗎? 謝謝~ 07/15 22:31
xxxzzz:或是其他人有破解例子,也可分享嗎,我對這蠻好奇,謝謝~ 07/15 22:39
chaoms::)樓上可否以上述SQL語法舉例? 07/15 22:39
dlikeayu:應該說是比對機制不好吧 直接codition 密碼就好,不用拿 07/16 02:40
dlikeayu:出來 07/16 02:40
dlikeayu:比對user跟passwd之後拿id或其它detail出來,passwd比較 07/16 02:42
dlikeayu:少人會特別抽出來比對 07/16 02:43
gname:抽出來比對是屬於第二層防護,作用在於怕今天有什麼bug時至少 07/16 11:34
gname:不會出現被 injection 的情況...是屬於較為安全(龜毛)的做法 07/16 11:35
carlcarl:同意樓上 07/16 21:29
bency:使用者註冊的時候username不小心打成 bency' or username='a 07/18 17:44
bency:在你其他會撈username資料的地方就會出問題了 07/18 17:45
a60301:不會啊,bindParam處理過了。 07/18 18:06