首先,我們的登入網站需要Session判斷是否有登入,如果沒有就跳轉到login.php,
index.php 首頁寫法:
判斷Session, Cookie是否有登入,或是錯誤登入,如果沒有登入,就跳轉到login.php,如果是登入狀態就顯示內容
login.php 登入寫法:
放置form表單,並且action傳送到connect.php做登入判斷
判斷GET方法 名稱error 是0就顯示 "帳號密碼錯誤", 是1就顯示: 連線錯誤,資料庫未開!
connet.php 登入處理寫法:
接收login.php傳來的post方法,username, password一定都要有值,然後才可以連接Mysql資料庫,搜尋是否有username存在,如果存在,就搜尋該username的password(先加密MD5) 存不存在, 如果都存在,就建立session代表登入,
register.php 註冊處理寫法:
放置form表單,並且action傳送到 connect_join.php檔案
*在此不驗證危險字元
connect_join.php檔案:
接收register傳來的post方法,如果username, password都有值,就做新增的動作, 然後移動到login.php
logout.php檔案:
登出session後跳轉login.php
程式碼寫法:
login.php寫法:
connect.php寫法:
*首先在SQL中新增一個 test_now 的資料庫, 然後新增一個users的資料表(欄位數:2), 然後第一個欄位使用username當作名稱,第二個使用password當作名稱。
,username資料型態使用varchar 長度 32 相當於 varchar(32)
,password資料型態使用varchar 長度 64 相當於 varchar(64)
然後我們再新增那個欄位新增一個使用者,唯password這個欄位要使用函數的下拉選單,選擇MD5, 然後兩個欄位自訂填上, 在此填入 帳號admin, 密碼root
,然後您會看到他剛剛寫出一個sql的語法,顯然我們在之後會很輕鬆新增資料!
程式碼:
index.php寫法:
logout.php寫法:
register.php寫法:
connect_join.php寫法:
完成。
缺點:
*安全性差
*檔案多
*速度慢
*本範例只適用於快速建立概念,並非認真的進行最佳化和各方面顧慮的開發, 僅用於教學。
網站撰寫安全建議參考:
OWASP: https://www.owasp.org
漏洞修補: http://exp.tw/
teahour.fm: http://teahour.fm/2014/02/18/interview-with-allenown.html
接收login.php傳來的post方法,username, password一定都要有值,然後才可以連接Mysql資料庫,搜尋是否有username存在,如果存在,就搜尋該username的password(先加密MD5) 存不存在, 如果都存在,就建立session代表登入,
register.php 註冊處理寫法:
放置form表單,並且action傳送到 connect_join.php檔案
*在此不驗證危險字元
connect_join.php檔案:
接收register傳來的post方法,如果username, password都有值,就做新增的動作, 然後移動到login.php
logout.php檔案:
登出session後跳轉login.php
程式碼寫法:
login.php寫法:
<!DOCTYPE html> <html> <head> <title>Login</title> </head> <body style="font-family: '微軟正黑體'"> <?php if(isset($_GET["error"])){ if($_GET["error"] == 0) echo "<h2 style='color:red'>帳號或密碼錯誤</h2>"; if($_GET["error"] == 1) echo "<h2 style='color:purple'>登入失敗,#資料庫</h2>"; if($_GET["error"] == 2) echo "<h2 style='color:blue'>登入失敗,#不能為空</h2>"; }?> <form action="connect.php" method="post"> 帳號<input type="text" name="username"/><br/> 密碼<input type="password" name="password"/> <br /><input type="submit" value="登入" style="font-family: '微軟正黑體'"> </form> </body> </html>
connect.php寫法:
*首先在SQL中新增一個 test_now 的資料庫, 然後新增一個users的資料表(欄位數:2), 然後第一個欄位使用username當作名稱,第二個使用password當作名稱。
,username資料型態使用varchar 長度 32 相當於 varchar(32)
,password資料型態使用varchar 長度 64 相當於 varchar(64)
然後我們再新增那個欄位新增一個使用者,唯password這個欄位要使用函數的下拉選單,選擇MD5, 然後兩個欄位自訂填上, 在此填入 帳號admin, 密碼root
,然後您會看到他剛剛寫出一個sql的語法,顯然我們在之後會很輕鬆新增資料!
程式碼:
<?php if($_POST["username"] == null || $_POST["password"] == null) header("Location: login.php?error=2"); ?> <?php session_start(); ?> <meta charset="utf-8"> <?php $link = mysql_connect('localhost','admin','root'); //建立連線 if(!$link) die("抱歉伺服器已掛, 自己的網站自己救");//掛掉 else echo "Connect finish, now loading..."; mysql_set_charset('utf8',$link);//編碼設定 if(!@mysql_select_db('test_now')) header("Location: login.php?error=1"); // '@' 不顯示錯誤, 選擇不了db $usernames = $_POST["username"]; $userpassword = md5($_POST["password"]);//加密使用者的密碼 $sql = "select * from users where username = '$usernames'"; $result = mysql_query($sql); $row = @mysql_fetch_row($result); if($usernames != null && $userpassword != null && $row[0]==$usernames && $row[1] == $userpassword){ //查詢結果拿來判斷 $_SESSION["username"] = $usernames; //建立登入的session mysql_free_result($result); mysql_close($link); echo '<meta http-equiv=REFRESH CONTENT=1;url=index.php>'; }else{ mysql_free_result($result); mysql_close($link); header("Location: login.php?error=0"); } ?>
index.php寫法:
<?php session_start(); ?> <!DOCTYPE html> <html> <head> <title>index</title> </head> <body> <?php if(isset($_SESSION["username"]) != null){//檢查Session是否登入 ?> <p>恭喜你登入了, <a href="logout.php">登出</a></p> <?php }else{ header("Location: login.php"); } //跳轉登入 ?> </body> </html>
logout.php寫法:
<?php session_start(); unset($_SESSION["username"]); header("Location: login.php");?>
register.php寫法:
<!DOCTYPE html> <html> <head> <title>Register</title> </head> <body style="font-family:'微軟正黑體'"> <?php if(isset($_GET['error'])){ if($_GET['error'] == 0) echo "<h2 style='color:red'>帳號密碼不能為空!</h2>"; if($_GET['error'] == 1) echo "<h2 style='color:red'>伺服器掛掉!</h2>"; }?> <form action="connect_join.php" method="post"> 註冊帳號: <input type="text" name="username" /><br> 註冊密碼: <input type="password" name="password" /><br> <input type="submit" value="註冊" style="font-family:'微軟正黑體'"/> </form> </body> </html>
connect_join.php寫法:
<?php if(isset($_POST['username'])==null || isset($_POST['password']) == null){//判斷帳號密碼是否為空 header("Location: register.php?error=0"); }else{ $link = mysql_connect('localhost','admin','root');//建立連線 if(!$link){ die("伺服器已掛,自己的伺服器自己救!"); }else{ echo "Connect finish, now loading..."; } mysql_set_charset('utf8',$link);//編碼設定 if(!@mysql_select_db('test_now')) header("Location: register.php?error=1"); // '@' 不顯示錯誤, 選擇不了db $un = $_POST['username']; //設定帳號 $up = $_POST['password']; //設定密碼 $result = mysql_query("INSERT INTO users(username,password) VALUES('$un',MD5('$up'));",$link);//插入查詢資料:新增 if(!$result){ die("伺服器已掛,自己的伺服器自己救 #2"); exit; } mysql_close($link); header("Location: login.php"); } ?>Register這個區塊,在 mysql_query上,查詢語法已經在先前吐出來了,直接拿來用即可!
完成。
缺點:
*安全性差
*檔案多
*速度慢
*本範例只適用於快速建立概念,並非認真的進行最佳化和各方面顧慮的開發, 僅用於教學。
網站撰寫安全建議參考:
OWASP: https://www.owasp.org
漏洞修補: http://exp.tw/
teahour.fm: http://teahour.fm/2014/02/18/interview-with-allenown.html
沒有留言:
張貼留言