ASP.NET Uthai ShiangJan Information and Communication Technology. Naresuan University
เนื้อหา ทบทวน HTML, ASP เบื้องต้น การสร้างฟอร์มสำหรับล็อกอินเพื่อเข้าใช้งานระบบ (Login.asp) ASP.NET
การล็อกอินเข้าใช้งานระบบ การเข้าใช้งานอินเทอร์เน็ต จำเป็นต้องมีการล็อกอิน เข้าใช้งานระบบเพื่อยืนยันตัวตนของผู้ใช้ การล็อกอินเข้าใช้งานระบบ ประกอบด้วย ชื่อผู้ใช้งานระบบ (User Name) รหัสผ่าน (Password) ระดับการใช้งาน (Priority) อื่นๆ
Login.asp กรอกข้อมูล User Name & Password (Login.asp) (checkLogin.asp) Database Login = OK No Yes แสดงเมนูหลักสำหรับใช้งานระบบ (mainmenu.asp)
ขั้นตอนการทำงาน ออกแบบ หน้า Login.asp เพื่อรับข้อมูล ส่งค่าที่ได้ไปให้กับหน้า checkLogin.asp หน้า checkLogin.asp รับค่า Username และ Password ที่ Login.asp ส่งมาให้ เขียนภาษา SQL เพื่อเรียกดู Username และ Password ข้างต้นจากตาราง Login ในฐานข้อมูล สร้างตัวแปร Recordset เพื่อทำการประมวลผล คำสั่ง SQL ข้างต้น ตรวจสอบว่า การ Login = OK? ทำการ Redirect ไปยังหน้าเว็บเพจที่เราต้องการ
การออกแบบ Login.asp สร้างเว็บเพจ เพื่อรับค่า User Name และ Password <html><body> <form action="checkLogin.asp" method="post"> ชื่อผู้ใช้:<input type="text" name="username"> <br> รหัสผ่าน:<input type="password" name="passwd"><br> <input type="submit" value="OK"> <input type="reset"> </form></body></html>
checkLogin.asp รับค่า User Name และ Password ที่ส่งมาจาก Login.asp เชื่อมต่อกับข้อมูลในฐานข้อมูล เรียกค้นข้อมูล User Name และ Password จากฐานข้อมูล เปรียบเทียบ และตรวจสอบความสามารถในการใช้งาน มีสิทธิเข้าใช้งาน => mainmenu.asp ไม่มีสิทธิเข้าใช้งาน => Login.asp
รับค่า Username และ Password ที่ส่งมาจาก Login.asp <% Dim Username, Password Username = Request.Form("username") Password = Request.Form("passwd") %>
สร้างฐานข้อมูลที่จัดเก็บข้อมูลล็อกอิน ตาราง Login ชื่อ Field (เขตข้อมูล) ชนิดข้อมูล UserName (PK) TEXT(10) Password
เชื่อมต่อกับข้อมูลในฐานข้อมูล <% Dim sProvider sProvider="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/Path of Database/myDB.mdb") %> บันทึก Code ข้างต้นไว้ในแฟ้มชื่อ Connect.asp เวลาใช้งานจริงให้อ้าง <!-- #include virtual="/Path of File/Connect.asp" --> หมายเหตุ: Path ของ Database และ include file ต้องอยู่ภายใต้ c:\Inetpub\wwwroot\folder ที่เราสร้างขึ้นเพื่อจัดเก็บ ดังนั้น Path of Database และ Path of File จะมีค่าเท่ากับ folder ที่เราสร้างขึ้นเพื่อจัดเก็บแฟ้มทั้ง 2 ข้างต้น
Path of File C:\ Inetpub wwwroot myFolder Connect.asp แทน Folder db Server.mappath("/myFolder/db/myDB.mdb") C:\ <!-- #include virtual="/myFolder/Connect.asp") --> Inetpub wwwroot myFolder Connect.asp แทน Folder db แทน File myDB.mdb
การเรียกค้นข้อมูล Username และ Password จากฐานข้อมูล การเรียกค้นหาข้อมูลจากฐานข้อมูล ต้องใช้ ภาษา SQL สมมติให้ Username='admin' และ Password='123' สามารถเขียน SQL ได้ดังนี้ SELECT Username, Password FROM Login WHERE Username='admin' AND Password='123'
การเรียกค้นข้อมูล Username และ Password จากฐานข้อมูล เราต้องแปลงภาษา SQL ให้อยู่ในรูปคำสั่งที่ ASP เข้าใจ โดยที่จะมีการต่อ String ของ Username และ Password ที่รับเข้ามา สามารถเขียน SQL ได้ดังนี้ Dim strSQL, Username, Password Username = Request.Form("username") ' รับค่า Username Password = Request.Form("passwd") ' รับค่า Password strSQL = SELECT Username, Password FROM Login WHERE Username='" & Username & "' AND Password='" & Password & "'"
การตรวจสอบว่า Username และ Password ถูกต้องหรือไม่? (Login = OK?) เราต้องเอา SQL ที่ได้ไปตรวจสอบกับตารางว่ามี Username และ Password นี้ในฐานข้อมูลหรือไม่? เปิดการเชื่อมต่อกับ Recordset โดยการใช้เมธอด Open ตรวจสอบดูว่ามีการ ส่ง Record กลับมาจากการ Open หรือไม่ โดยใช้คุณสมบัติ EOF (End Of File) ถ้า EOF = True แสดงว่า ไม่พบข้อมูล Username และ Password ที่ต้องการ เราก็ให้ระบบ Redirect ไปหน้า Login.asp ใหม่ ถ้า EOF = False แสดงว่า พบข้อมูล Username และ Password ที่ต้องการ เราก็ให้ระบบ Redirect ไปหน้า mainmenu.asp
เปิดการเชื่อมต่อกับตาราง Dim rs Set rs = Server.CreateObject("ADODB.RecordSet") rs.Open strSQL, sProvider, 1, 1 'เปิดการเชื่อมต่อ If rs.EOF Then ' กรณีไม่พบข้อมูล Response.Redirect("Login.asp") Else ' กรณีพบข้อมูล Response.Redirect("mainmenu.asp") End If rs.Close ' ปิดการเชื่อมต่อ Set rs = Nothing ' คืนพื้นที่ให้กับหน่วยความจำ
ขั้นตอนการทำงาน รับข้อมูลในหน้า Login.asp ส่งค่าที่ได้ไปให้กับหน้า checkLogin.asp หน้า checkLogin.asp รับค่า Username และ Password ที่ Login.asp ส่งมาให้ เขียนภาษา SQL เพื่อเรียกดู Username และ Password ข้างต้นจากตาราง Login ในฐานข้อมูล สร้างตัวแปร Recordset เพื่อทำการประมวลผล คำสั่ง SQL ข้างต้น ตรวจสอบว่า การ Login = OK? ทำการ Redirect ไปยังหน้าเว็บเพจที่เราต้องการ
<!--#include virtual="/4533xxxx/Connect.asp" --> <% Dim Username, Password Dim strSQL Dim rs Username = Request.Form("username") Password = Request.Form("passwd") strSQL = "SELECT * FROM LOGIN WHERE Username='" & Username & "' AND Password='" & Password & "'" Set rs = Server.CreateObject("ADODB.RecordSet") rs.Open strSQL, sProvider, 1, 1 ' เปิดการเชื่อมต่อ If rs.EOF Then ' ไม่พบข้อมูลผู้ใช้และรหัสผ่านที่ต้องการ Response.Redirect("Login.asp") Else ' พบข้อมูลผู้ใช้และรหัสผ่านถูกต้อง Response.Redirect("mainmenu.asp") End If rs.Close ' ปิดการเชื่อมต่อ Set rs = Nothing ' คืนหน่วยความจำ %>
การป้องกันไม่ให้ถูก Hack การใช้ตัวแปร Session การป้องกัน SQL Injection
การใช้ตัวแปร Session If rs.EOF Then ' กรณีไม่พบข้อมูล Response.Redirect("Login.asp") Else ‘ กรณีพบข้อมูล Session("CanProcess") = "True" Response.Redirect("mainmenu.asp") End If
Mainmenu.asp ทำการแก้ไข Mainmenu.asp โดยเพิ่ม CODE ในส่วนบนสุด <% If Session("CanProcess") <> "True" Then Response.Redirect("Login.asp") End If %>
การป้องกัน SQL Injection ทำการแก้ไข checkLogin.asp <% Dim Username, Password Username = Replace(Request.Form("username"), "'", "''") Password = Replace(Request.Form("passwd"), "'", "''") %>