Bảy bước thiết kế trang web ấn tượng và hiệu quả

Bảy bước thiết kế trang web ấn tượng và hiệu quả

Mặc dù việc thiết kế trang web đòi hỏi phải có nhiều khả năng về mỹ thuật, tuy nhiên vẫn có thể

đưa ra một quá trình thiết kế để có thể giúp bạn tăng khả năng tạo ra các trang web hiệu quả và ấn

tượng. Có thể nhiều người sẽ cho rằng việc đưa ra các bước trong quá trình thiết kế sẽ làm mất đi

quá trình sáng tạo, điều này có lẽ đúng đối với những nhà thiết kế giỏi, những người có quá trình

thiết kế và sáng tạo của riêng họ. Nhưng với những người không được đào tạo bài bản và thực hành

nhiều thì việc nghiên cứu xem người khác thiết kế và ứng dụng các bước đó như thế nào có thể sẽ

giúp ích rất nhiều cho họ.

Bước 1 : Phân tích người dùng và tự đánh giá chính mình

Nếu bạn không biết người dùng dự định là ai, thì tất cả việc thiết kế, cho dù có được thực hiện kĩ

lưỡng đến đâu cũng chỉ dẫn đến thất bại. Bạn cần phải biết các thông tin về người dùng như trình

độ, sở thích, các lĩnh vực quan tâm, cấu hình trang thiết bị, phần mềm, để tránh đưa ra một trang

web vô tích sự.

Bạn cũng cần phải phân tích các mối quan tâm và khả năng của chính bạn. Bạn có khả năng thiết kế

các trang web có hiệu quả và ấn tượng không? Bạn có đủ trình độ chuyên môn để tạo ra được các

trang có lượng thông tin phong phú dựa trên các tài nguyên sẵn có không?

pdf 25 trang Người đăng haiha30 Lượt xem 717Lượt tải 0 Download
Bạn đang xem 20 trang mẫu của tài liệu "Bảy bước thiết kế trang web ấn tượng và hiệu quả", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
BẢY BƯỚC THIẾT KẾ TRANG WEB ẤN TƯỢNG VÀ HIỆU QUẢ 
Mặc dù việc thiết kế trang web đòi hỏi phải có nhiều khả năng về mỹ thuật, tuy nhiên vẫn có thể 
đưa ra một quá trình thiết kế để có thể giúp bạn tăng khả năng tạo ra các trang web hiệu quả và ấn 
tượng. Có thể nhiều người sẽ cho rằng việc đưa ra các bước trong quá trình thiết kế sẽ làm mất đi 
quá trình sáng tạo, điều này có lẽ đúng đối với những nhà thiết kế giỏi, những người có quá trình 
thiết kế và sáng tạo của riêng họ. Nhưng với những người không được đào tạo bài bản và thực hành 
nhiều thì việc nghiên cứu xem người khác thiết kế và ứng dụng các bước đó như thế nào có thể sẽ 
giúp ích rất nhiều cho họ. 
Bước 1 : Phân tích người dùng và tự đánh giá chính mình 
Nếu bạn không biết người dùng dự định là ai, thì tất cả việc thiết kế, cho dù có được thực hiện kĩ 
lưỡng đến đâu cũng chỉ dẫn đến thất bại. Bạn cần phải biết các thông tin về người dùng như trình 
độ, sở thích, các lĩnh vực quan tâm, cấu hình trang thiết bị, phần mềm,  để tránh đưa ra một trang 
web vô tích sự. 
Bạn cũng cần phải phân tích các mối quan tâm và khả năng của chính bạn. Bạn có khả năng thiết kế 
các trang web có hiệu quả và ấn tượng không? Bạn có đủ trình độ chuyên môn để tạo ra được các 
trang có lượng thông tin phong phú dựa trên các tài nguyên sẵn có không? 
Sau đây là một số kĩ thuật giúp cho bước này : 
1. Mô tả mục tiêu: Hãy xác định chính xác mục tiêu của trang này một cách ngắn gọn. Mục 
tiêu cần được mô tả một cách súc tích, rõ ràng, không quá rườm rà, chi tiết. 
2. Xác định vấn đề giải quyết: Từ mô tả mục tiêu ở bước trên, nêu ra các vấn đề cần giải quyết 
để đạt được mục tiêu, tóm tắt phương pháp giải quyết, ... 
3. Xác định người dùng: Liệt kê các đặc điểm của khách hàng như tuổi tác, nghề nghiệp, giới 
tính, thu nhập, trình độ, vùng cư trú, cấu hình trang thiết bị, phần mềm,  vào một danh 
sách để phân tích và xử lí sau này. 
4. Liệt kê các nguồn tài nguyên: Bạn có sẵn những gì để hoàn thành công việc cả về mặt trang 
thiết bị, công cụ phần mềm,  và cả về trình độ chuyên môn ? Bạn có thể làm được những 
gì, và bạn sẽ nhờ giúp đỡ những gì ? 
5. Xây dựng bảng tiến độ thực hiện: Xác định thời gian cần để hoàn thành sản phẩm với các tài 
nguyên sẵn có, thời gian cần để thực hiện từng bước của quá trình,  
Bước 2 : Thiết kế các chức năng và cấu trúc trang 
Có thể lúc này bạn rất muốn ngồi ngay vào máy và bắt tay vào việc xây dựng trang web nhưng 
đừng vội! Hãy dành thời gian cho việc thiết kế các chức năng và cấu trúc của các trang chính, vì 
PDF processed with CutePDF evaluation edition www.CutePDF.com
đây là bước quan trọng nhất trong quá trình thiết kế. Sau đây là một số hướng dẫn để thực hiện 
bước này : 
1. Chọn cách làm việc sao cho có thể phác thảo thiết kế một cách thoải mái: Bạn có thể dùng 
bút để vẽ sơ đồ trên giấy, hay có thể dùng các chương trình máy tính để phác thảo. Tuy 
nhiên việc sử dụng các chương trình máy tính có thể sẽ làm hạn chế năng suất làm việc vì 
các công cụ có sẵn thường bị giới hạn. 
2. Việc thiết kế nên đi từ trừu tượng đến cụ thể: Việc đưa ra các chi tiết ngay từ đầu có thể sẽ 
làm mất đi tổng quan của vấn đề. Phải xác định khung của chức năng trước rồi sau đó mới 
lựa chọn nội dung để điền vào. 
Bước 3 : Tìm cách trình bày ấn tượng và hiệu quả 
Ngay cả một cấu trúc tốt nhất cũng sẽ thất bại nếu việc trình bày thông tin không trực quan và ấn 
tượng. Một cách trình bày có ấn tượng và hiệu quả được đánh giá không chỉ bằng cách trông nó như 
thế nào mà còn xem nó đóng góp như thế nào vào quá trình đạt mục tiêu ban đầu. 
Sau đây là một số cách để tìm ra nguồn cung cấp cho các trình bày tốt: 
1. Đưa ra càng nhiều cách trình bày từ khả năng của chính bạn. Luôn quan sát và sưu tập các 
trình bày tốt đã đoạt giải, đã được nhiều người công nhận, hay các trình bày mà bạn thích, ... 
2. Luôn cập nhật các thay đổi về công nghệ web. Bạn nên luôn có các tài liệu mới nhất về 
HTML, cũng như các thông tin về các dạng tập tin và các thiết bị mới được hỗ trợ bởi các 
nhà sản xuất. 
3. Luôn ghi nhớ: Đối tượng đánh giá cách trình bày là người dùng chứ không phải bạn. 
4. Thử càng nhiều giải pháp càng tốt và hãy ghi nhận các nhận xét, phản hồi của những người 
cộng tác để hoàn chỉnh thiết kế. 
Bước 4 : Xây dựng nội dung 
Là một người thiết kế trang web, bạn có thể có hoặc không chịu trách nhiệm tạo nội dung (như văn 
bản, hình ảnh, âm thanh, video, ..). Vì việc tạo nội dung thường không thể đợi đến lúc thiết kế hình 
thành, bạn có thể tiến hành các bước sau để đảm bảo rằng nội dung và thiết kế của bạn là tương 
thích với nhau: 
1. Sửa đổi, hiệu chỉnh các nội dung đã có hoặc các nội dung mà bạn có quyền sửa. 
2. Xin hỗ trợ và cố vấn của những chuyên gia đối với các chủ đề ngoài lĩnh vực chuyên môn 
của bạn. 
3. Thiết lập đường dây liên lạc giữa bạn (người thiết kế) và những người tạo nội dung. Đưa ra 
các qui ước, các đặc tả cho nội dung như môi trường hỗ trợ, định dạng tập tin, cách nén, qui 
ước đặt tên tâp tin,  
4. Đảm bảo càng nhiều thông tin càng tốt. Cần phải có sự kết hợp chặt chẽ giữa văn bản và đồ 
họa, hình ảnh, âm thanh trong nội dung. 
5. Tạo một cấu trúc cây thư mục hợp lí cho nội dung và thường xuyên sao lưu để đảm bảo an 
toàn. 
 Bước 5 : Thiết kế và kiểm tra khung trang web 
Trong khi đang tiến hành xây dựng nội dung, đây là lúc kiểm tra các chức năng và cấu trúc được 
xây dựng trong bước 2 xem nó hoạt động như thế nào. Đây là bước mà bạn chuyển các mô tả về 
chức năng, về thiết kế ban đầu sang một thể hiện là các trang web cụ thể. Sau đây là một số hướng 
dẫn để thực hiện bước này : 
1. Liên lạc với người quản trị server để xem việc tổ chức các tập tin như thế nào và các đặc tả 
nào có sẵn. Cho người quản trị biết các loại tập tin nào mà bạn đang sử dụng chưa được hỗ 
trợ. 
2. Sử dụng các liên kết trong các trang tới các cấu trúc thư mục tương tự như cấu trúc thư mục 
trên server. 
3. Ghi nhận các ảnh thường được dùng trong việc truy xuất các trang thông thường để đưa vào 
cache. Bằng cách này bạn có thể tăng tốc độ truy xuất các trang. 
4. Thử nghiệm trên server để kiểm tra xem nó hoạt động đúng như thiết kế hay không. 
Bước 6 : Đưa nội dung vào 
Trong trường hợp tốt nhất, các khung dành cho văn bản và đồ họa sẽ được điền vào bằng nội dung 
thực sự của nó một cách dễ dàng và ăn khớp. Tuy nhiên điều này hiếm khi xảy ra vì một lẽ, hình 
ảnh và văn bản đưa vào có thể không vừa với khung thiết kế dành cho nó như dự định ban đầu. Cần 
phải thêm một số thao tác nữa mới có thể thực hiện xong chuyện này. 
Để việc đưa nội dung vào thật sự đơn giản, ăn khớp, cần phải giữ mối liên lạc tốt giữa các thành 
viên liên quan như người thiết kế, người minh họa, người viết nội dung, người biên tập, và người 
quản trị server,  Sau đây là một số hướng dẫn cho việc thực hiện tốt bước này : 
1. Trước tiên hãy cho các trang hoạt động cục bộ, riêng lẻ để dễ kiểm tra, hiệu chỉnh, đánh giá, 
... 
2. Làm việc theo module, nghĩa là cho nhóm các trang liên quan nhau hoạt động trôi chảy 
trước khi mở rộng ra. 
3. Đừng ngại thay đổi một quyết định thiết kế trước đó. Có thể bạn đã giả định sai, hoặc là 
công nghệ đã thay đổi vào lúc đưa nội dung vào,  
Bước 7 : Kiểm tra và đánh giá 
Các trang hiệu quả nhất là kết quả của việc thiết kế và đánh giá cẩn thận. Một web site trị giá nửa 
triệu đô la có thể có đến 70% tổng chi phí dành cho việc thiết kế và đánh giá. Sau đây là một số 
bước để thực hiện việc này: 
1. Kiểm tra hoạt động của các liên kết nội bộ và các nguồn tài nguyên. 
2. Kiểm tra độ chính xác của các liên kết ngoại. Không có gì tệ hơn là các liên kết với các 
trang bên ngoài không còn tồn tại nữa, hoặc là được chuyển đến nơi khác, hoặc là không còn 
phù hợp nữa. 
3. Thử các trang với nhiều trình duyệt khác nhau. Thực hiện điều này để kiểm tra tính tương 
thích của trang với các trình duyệt, xem thử thiết kế trang đã tận dụng hết các hỗ trợ của 
trình duyệt chưa,  
4. Thử các trang bằng nhiều cách kết nối khác nhau. Thử xem việc hiển thị các trang có ảnh 
hưởng như thế nào nếu kết nối bằng mạng cục bộ, đường kết nối tốc độ cao, đường điện 
thoại,  
5. Thử các trang ở tình trạng mức độ truy cập cao. Nếu server của bạn chạy tốt trong các giờ 
cao điểm thì những giờ khác có thể chấp nhận được. 
6. Thử các trang với nhiều dạng người dùng khác nhau. Nếu trang của bạn đề cập về các mối 
quan tâm chung thì hãy tranh thủ thử trang web với những đồng sự, bạn bè,  Hãy ghi chú 
và quan sát. Có thể bạn sẽ không cần thay đổi phiên bản của trang web nhưng bạn sẽ cần các 
thông tin vì trang liên tục được cập nhật hóa. 
Trên đây là các bước để giúp bạn có thể tạo các trang web tốt. Chúc các bạn thành công. 
Lê Đình Duy 
ldduy@fit.hcmuns.edu.vn 
 1
LẬP TRÌNH WEB ASP VỚI TIẾNG VIỆT UNICODE 
Lê Đình Duy 
Khoa CNTT - ĐHKHTN Tp. HCM 
ldduy@fit.hcmuns.edu.vn 
08.2002 
1. Một số khái niệm căn bản về biểu diễn kí tự bên trong máy tính 
1.1. Khái niệm về điểm mã, đơn vị mã, bảng mã 
Về mặt bản chất, máy tính chỉ làm việc với các con số, do đó để biểu diễn các kí tự trên máy tính cần phải 
có một qui ước nhất quán giữa các kí tự cần biểu diễn và các con số tương ứng mà máy tính xử lí. Qui ước 
này được thể hiện qua các bước sau: 
- Chọn tập các kí tự cần mã hóa (character set). 
- Gán cho mỗi kí tự cần mã hóa một giá trị nguyên không âm, gọi là điểm mã (code point). 
- Chuyển các điểm mã thành dãy các đơn vị mã (code units) để cho phục vụ cho việc lưu trữ và mã 
hóa. Một đơn vị mã là một đơn vị của bộ nhớ, có thể là 8, 16, hay 32 bit. Các điểm mã không nhất 
thiết phải có cùng số đơn vị mã. 
Tập hợp những điểm mã của một tập các kí tự được gọi là một trang mã (code page) hay còn gọi là bảng 
mã hay bộ mã. Như vậy khi nói về một bảng mã, chúng ta quan tâm đến hai điều chính, số lượng các kí tự 
được mã hóa, và cách mã hóa chúng thành các đơn vị mã. 
Lấy ví dụ bảng mã ASCII, tập kí tự cần mã hóa có 128 kí tự bao gồm các kí tự tiếng Anh, kí tự số, kí tự tiền 
tệ Anh, Mỹ và các kí tự điều khiển hệ thống ngoại vi. Các điểm mã có giá trị nằm trong khoảng từ 0-127. Mỗi 
điểm mã được mã hóa bằng đúng một đơn vị mã 8 bit, có nghĩa là đúng một byte. 
Việc quyết định chọn cách mã hóa như thế nào sẽ quyết định số lượng kí tự được mã hóa. Ví dụ, nếu chọn 
cách mã hóa các điểm mã bằng đúng một đơn vị mã 8-bit thì số lượng điểm mã của một bảng mã (tạm gọi 
là bảng mã 8 bit) chỉ có thể tối đa là 256. 
Do bảng mã ASCII không đủ để biểu diễn các kí tự của các ngôn ngữ khác, ví dụ như tiếng Việt, nên 
Microsoft đã nới rộng bảng mã ASCII bằng cách sử dụng 128 điểm mã có giá trị từ 128-255 để mã hóa cho 
các kí tự ngoài ASCII này. Tuy nhiên do chỉ có 128 điểm  ...  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. 
BẢO VỆ CƠ SỞ DỮ LIỆU ACCESS TRONG CÁC ỨNG DỤNG WEB 
Các ứng dụng web sử dụng CSDL Access thường hay đặt tập tin CSDL .mdb vào một thư mục có 
thể truy cập được từ web, ví dụ như: D:\inetpub\wwwroot\myDB.mdb. Điều nguy hiểm nhất theo 
cách làm thông thường này là nếu người dùng biết được hay đoán được đường dẫn đến tập tin .mdb, 
họ có thể tải tập tin CSDL đó về và toàn bộ thông tin lưu trữ trên CSDL bị đánh cắp. 
Để bảo vệ CSDL Access trong các ứng dụng web, nên kết hợp các phương án an toàn sau: 
Phương án 1: Đặt tập tin CSDL .mdb vào thư mục được không được quyền truy cập từ Web. 
Giả sử ta có website có thư mục webroot là D:\inetpub\wwwroot\. Thư mục chứa tập tin CSDL ví 
dụ là: D:\inetpub\wwwroot\Site1\data\myDB.mdb. Mặc định nếu người dùng đoán được đường dẫn 
này: http//www.yourserver.com/site1/data/myDB.mdb, họ có thể tải được tập tin CSDL này về bởi 
vì thông thường các tập tin trong thư mục này được thiết lập quyền Read. 
Để hạn chế không cho phép người dùng tải tập tin CSDL về, ta sẽ bỏ quyền Read được thiết lập 
trong thư mục này bằng cách dùng tiện ích Internet Service Manager. 
Thao tác này không ảnh hưởng gì đến việc các đoạn mã ASP truy cập đến CSDL do thiết lập này 
được đặt ở mức webserver chứ không phải ở mức hệ thống tập tin NTFS. Nghĩa là các đoạn mã 
ASP vẫn hoạt động bình thường như trước. Điểm khác duy nhất là người dùng không thể tải được 
tập tin CSDL dù biết đường dẫn đến nó mà thôi. 
Phương án 2: Đặt tập tin CSDL .mdb tại nơi mà chỉ truy cập được ở mức server-side 
Ý tưởng chính của phương án này là đặt tập tin CSDL trong một thư mục có cấp cao hơn thư mục 
webroot của webserver. Ví dụ, nếu thư mục D:\inetpub\wwwroot\ là webroot của webserver, ta có 
thể tạo một thư mục private đặt tại D:\inetpub\private và đặt tập tin CSDL vào đây. Bằng cách này, 
người dùng client không thể nào truy cập đến thư mục private này để tải CSDL về. Lúc này, đường 
dẫn đến tập tin CSDL trong chuỗi DSN sẽ được chỉnh lại như sau: 
- Nếu dùng đường dẫn tuyệt đối: sFileName = “D:\inetpub\private” 
- Nếu dùng đường dẫn tương đối: 
 sFileName = Server.MapPath(“/”) ‘ trả về giá trị D:\inetpub\wwwroot 
 sFileName = Replace(sFileName, “wwwroot”, “private”) 
 sFileName = sFileName & “myDB.mdb” 
Lê Đình Duy – ldduy@fit.hcmuns.edu.vn 
BẢO VỆ ỨNG DỤNG WEB CHỐNG TẤN CÔNG KIỂU SQL INJECTION 
Lê Đình Duy 
Khoa CNTT – ĐHKHTN Tp.HCM 
ldduy@fit.hcmuns.edu.vn 
11.2002 
1. SQL Injection là gì? 
Việc thiết kế và đưa vào hoạt động một website luôn đòi hỏi các nhà phát triển phải quan tâm đến các vấn 
đề về an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc. Tuy nhiên, thông thường 
các nhà phát triển đa số tập trung vào các vấn đề an toàn trong việc chọn hệ điều hành, hệ quản trị CSDL, 
webserver sẽ chạy ứng dụng, ... Ví dụ, người ta thường quan tâm nhiều đến các lỗ hổng về an toàn trên IIS 
hơn là quan tâm đến các đoạn mã của ứng dụng có tiềm ẩn các lỗ hổng nghiêm trọng hay không. Một trong 
số các lỗ hổng này đó là SQL injection attack. 
SQL injection là một kĩ thuật cho phép những kẻ tấn công thi hành các câu lệnh truy vấn SQL bất hợp pháp 
(không được người phát triển lường trước) bằng cách lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập 
trong các ứng dụng web. Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các 
thao tác xóa, hiệu chỉnh,  do có toàn quyền trên cơ sở dữ liệu của ứng dụng. Lỗi này thường xảy ra trên 
các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị CSDL như SQL Server, Oracle, DB2, 
Sysbase. 
Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, 
hệ thống thường xây dựng trang đăng nhập để 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 khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ 
hay không để quyết định cho phép hay từ chối thực hiện tiếp. 
Trong trường hợp này, người ta có thể dùng 2 trang, một trang HTML để hiển thị form nhập liệu và một 
trang ASP dùng để xử lí thông tin nhập từ phía người dùng. Ví dụ: 
Login.htm 
 Username: 
 Password: 
ExecLogin.asp 
<% 
 Dim p_strUsername, p_strPassword, objRS, strSQL 
 p_strUsername = Request.Form("txtUsername") 
 p_strPassword = Request.Form("txtPassword") 
 strSQL = "SELECT * FROM tblUsers " & _ 
 "WHERE Username='" & p_strUsername & _ 
 "' and Password='" & p_strPassword & "'" 
 Set objRS = Server.CreateObject("ADODB.Recordset") 
 objRS.Open strSQL, "DSN=..." 
 If (objRS.EOF) Then 
 Response.Write "Invalid login." 
 Else 
 Response.Write "You are logged in as " & objRS("Username") 
 End If 
 Set objRS = Nothing 
%> 
Thoạt nhìn, đoạn mã trong trang ExecLogin.asp dường như không chứa bất cứ một lỗ hổng về an toàn nào. 
Người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này 
thực sự không an toàn và là tiền đề cho một SQL injection attack. Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu 
nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh truy vấn SQL. Chính điều này cho phép 
những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện. 
Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang Login.htm: 
‘ or ‘’ = ‘ . Lúc này, câu truy vấn sẽ được gọi thực hiện là: 
SELECT * FROM tblUsers WHERE Username='' or ''='' and Password = '' or ''='' 
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của tblUsers và đoạn mã tiếp theo xử lí người 
dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ. 
Một ví dụ khác của SQL injection attack nữa là khi các trang web sử dụng dữ liệu nhập vào theo dạng 
querystring (bằng cách gõ cặp tham số và giá trị trực tiếp trên thanh địa chỉ hoặc dùng form với thuộc tính 
ACTION là GET). Ví dụ sau minh họa một trang ASP nhận dữ liệu cho biến ID thông qua querystring và phát 
sinh nội dung của trang đó dựa trên ID: 
<% 
 Dim p_lngID, objRS, strSQL 
 p_lngID = Request("ID") 
 strSQL = "SELECT * FROM tblArticles WHERE ID=" & p_lngID 
 Set objRS = Server.CreateObject("ADODB.Recordset") 
 objRS.Open strSQL, "DSN=..." 
 If (Not objRS.EOF) Then Response.Write objRS("ArticleContent") 
 Set objRS = Nothing 
%> 
Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của article có ID trùng với ID được 
chuyển đến cho nó dưới dạng querystring. Ví dụ, trang này có thể được gọi như sau: 
 để hiển thị nội dung của article có ID là 1055. 
Giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một SQL injection attack. Kẻ tấn công có 
thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, để thực hiện một lệnh SQL bất hợp pháp, 
ví dụ như: 0 or 1=1 (nghĩa là,  or 1=1). 
Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh: 
SELECT * FROM tblArticles WHERE ID=0 or 1=1 
Tất nhiên ví dụ này dường như không có gì nguy hiểm, nhưng hãy thử tưởng tượng kẻ tấn công có thể xóa 
toàn bộ CSDL bằng cách chèn vào các đoạn lệnh nguy hiểm như lệnh DELETE. Tất cả chỉ là đơn giản thay 
đổi chuỗi gán dữ liệu cho ID, ví dụ như: 
 DELETE FROM tblArticles. 
2. Các tác hại và cách phòng tránh 
Tác hại từ SQL Injection attack tùy thuộc vào môi trường và cách cấu hình hệ thống. Nếu ứng dụng sử dụng 
quyền dbo (quyền của người sở hữu CSDL - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ 
liệu, tạo các bảng dữ liệu mới,  Nếu ứng dụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều 
khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người 
dùng bất hợp pháp để điều khiển hệ thống của bạn. 
Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu truy vấn SQL là bằng cách kiểm soát chặt 
chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request, Request.QueryString, 
Request.Form, Request.Cookies, and Request.ServerVariables). 
- Trong trường hợp dữ liệu nhập vào là chuỗi, như trong ví dụ 1, lỗi xuất phát từ việc có dấu nháy 
đơn trong dữ liệu. Để tránh điều này, thay thế các dấu nháy đơn bằng hàm Replace để thay thế 
bằng 2 dấu nháy đơn: 
p_strUsername = Replace(Request.Form("txtUsername"), "'", "''") 
p_strPassword = Replace(Request.Form("txtPassword"), "'", "''") 
- Trong trường hợp dữ liệu nhập vào là số, như trong ví dụ 2, lỗi xuất phát từ việc thay thế một giá trị 
được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn 
giản hãy kiểm tra dữ liệu có đúng kiểu hay không: 
p_lngID = CLng(Request("ID")) 
Như vậy, nếu người dùng truyền vào một chuỗi, hàm này sẽ trả về lỗi ngay lập tức. 
Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa 
trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ 
các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống. 
Cuối cùng, để giới hạn mức độ của SQL Injection attack, nên kiểm soát chặt chẽ và giới hạn quyền xử lí dữ 
liệu đến tài khoản người dùng mà ứng dụng web đang sử dụng. Các ứng dụng thông thường nên tránh 
dùng đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít. 
Các tài liệu tham khảo 
SQL Injection FAQ:  
Advanced SQL Injection :  
Preventing SQL Injection:  
Biên dịch từ:  

Tài liệu đính kèm:

  • pdfthiet ke web.pdf