80s toys - Atari. I still have
Create a site without programming
Phương pháp hỗ trợ giới hạn truy cập trang web!
1. Giới thiệu
Thông thường, trong các ứng dụng web, người thiết kế muốn giới hạn sự truy cập đến một số trang web
thông qua việc chứng thực người dùng (authentication) nhằm mục đích cho phép những người có quyền
thực sự mới được phép truy cập và thực hiện một số trang web nào đó. Ví dụ các trang web dùng cho việc
cập nhật CSDL từ xa chỉ cho phép người quản trị thực hiện hay trong các ứng dụng như diễn đàn thảo luận,
thông thường các trang gửi bài mới chỉ cho phép những người đã đăng kí thực hiện mà thôi, …
Để đạt được mục đích này, có hai cách tiếp cận:
- Dùng chức năng bảo mật của hệ thống: Cách này giới hạn quyền truy cập đến các trang web cần
bảo vệ bằng quyền trên hệ thống tập tin NTFS. Ví dụ, nếu muốn giới hạn quyền truy cập đến tập tin
admin.asp, ta xác lập quyền cho một người dùng nào đó được quyền đọc, thi hành mà thôi. Cách
này có hạn chế là người dùng trang web phải có tài khoản trên server. Điều này sẽ thực sự khó
khăn khi đa số các ứng dụng web thường được hosting tại các server của các ISP.
- Dùng các đoạn mã chương trình tự viết: Cách này sử dụng cookies (thông qua biến kiểu Session)
kết hợp với CSDL về người dùng để làm việc này! Cách làm này cho phép đáp ứng khá hoàn hảo
nhu cầu bảo mật các trang web và tương thích dễ dàng trong trường hợp hosting ở các server khác
nhau.
2. Bảo vệ bằng các đoạn mã chương trình tự viết
Ý tưởng chính của cách làm này là ta sẽ dùng một biến Session có kiểu là boolean kể lưu thông tin về người
dùng đã được chứng thực hay chưa. Giả sử ta đặt tên cho biến này là blLoginOK, giá trị True sẽ tương ứng
với người dùng đã được chứng thực và ngược lại.
Việc chứng thực người dùng sẽ được thông qua một trang đăng nhập (ví dụ là trang login.htm). Trang này
sẽ yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu. Sau đó một đoạn mã (trang login.asp)
sẽ được dùng để kiểm tra thông tin người dùng vừa nhập có trùng khớp với dữ liệu được lưu trữ trên CSDL
hay không. Nếu thông tin trùng khớp, giá trị của biến blLoginOK sẽ được chuyển thành True (lưu ý ta phải
thiết lập biến blLoginOK có giá trị mặc định là False).
Trong các trang cần hạn chế truy cập, ta chỉ cần kiểm tra giá trị của biến này là True hay False. Nếu giá trị là
True, người dùng sẽ được phép thực hiện tiếp các đoạn mã tiếp theo của trang, còn ngược lại, ta sẽ thông
báo yêu cầu người dùng chứng thực thông qua một trang đăng nhập trước khi tiếp tục.
Các bước thực hiện tuần tự như sau:
Bước 1: Tạo cơ sở dữ liệu chứa thông tin về người dùng
Giả sử ta dùng MS Access để tạo cơ sở dữ liệu có tên là DB_USERS.MDB, trong đó ta tạo một bảng dữ liệu
có tên là APP_USERS. Hai trường chính của bảng dữ liệu này là APP_USERNAME và APP_PASSWORD.
Nếu đặt APP_USERNAME như là khóa chính thì một người dùng sẽ được xác định bằng một tên đăng nhập
duy nhất. Tất nhiên, ta có thể tạo thêm các trường khác để quản lí như Họ Tên, Địa chỉ Email (có thể sẽ cần
để gửi email khi quên mật khẩu), Lần đăng nhập cuối cùng, Thời gian sử dụng hệ thống, … Sau khi tạo
xong, giả sử tập tin này được lưu tại thư mục APP_DB.
Bước 2: Tạo trang đăng nhập login.htm để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật
khẩu:
Login.htm
<FORM action=”login.asp” method=”POST”>
Username: <input type="text" name="fmUserName" size="20"><br>
Password: <input type="password" name="fmPassword" size="20"><br>
<input type="submit" value="Submit" name="btnSubmit">
<input type="reset" value="Reset" name="btnReset">
</FORM>
Bước 3: Tạo trang login.asp để kiểm tra thông tin người dùng vừa nhập có trùng khớp với thông tin có sẵn
trên CSDL hay không. Nếu trùng khớp, giá trị biến blLoginOK sẽ được chuyển thành True.
Login.asp
<%
On Error Resume Next
vUserName = Request.Form(“fmUserName”)
‘ Thay thế dấu nháy đơn ‘ thành hai dấu nháy đơn để tránh lỗi SQL injection
vUserName = Replace(vUserName, “’”, “’’”)
vPassword = Request.Form(“fmPassword”)
vPassword = Replace(vPassword, “’”, “’’”)
strDSN = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="
‘ đường dẫn tương đối đến tập tin CSDL
strDSN = strDSN & Server.MapPath("app_db/db_users.mdb")
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDSN
strSQL = “SELECT * FROM APP_USERS WHERE ”
strSQL = strSQL & “ APP_USERNAME = ” & “’” & vUserName & “’”
strSQL = strSQL & “ AND “ & “APP_PASSWORD = ” & “’” & vPassword & “’”
Set rs = Conn.Execute(strSQL)
if rs.eof then ‘ người dùng không hợp lệ
Response.Redirect(“login.htm”)
else
Session(“blLoginOK”) = True
end if
set rs = nothing
set Conn = nothing
%>
Bước 4: Trong các trang web ví dụ như Admin.asp mà ta chỉ muốn những người đã được chứng thực mới
được quyền sử dụng, đặt đoạn mã kiểm tra biến blLoginOK là True hay False ngay đầu trang:
Admin.asp
<%
if (Session(“blLoginOK”) <> True) then
Response.Redirect(“login.htm”)
end if
%>

3. Kết luận
Nhu cầu hạn chế người dùng truy cập đến một số trang web nào đó trong ứng dụng là một nhu cầu thường
xuyên khi xây dựng các ứng dụng. Bằng cách sử dụng biến Session và CSDL của người dùng cùng với các
trang login.htm, login.asp, ta có thể đạt được mục đích trên một cách dễ dàng.
Chúc các bạn thành công!
Nguồn: Sưu tầm