Tải bản đầy đủ (.doc) (201 trang)

18 xay dung ung dung web an toan

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.47 MB, 201 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ

TS. NGUYỄN TUẤN ANH, KS. HỒNG THANH NAM

GIÁO TRÌNH

XÂY DỰNG ỨNG DỤNG WEB AN TOÀN

HÀ NỘI, 2013


BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ

TS. NGUYỄN TUẤN ANH, KS. HỒNG THANH NAM

GIÁO TRÌNH

XÂY DỰNG ỨNG DỤNG WEB AN TOÀN

HÀ NỘI, 2013


MỤC LỤC
Mục lục..................................................................................................................ii
Danh mục từ viết tắt............................................................................................v
Lời nói đầu...........................................................................................................vi
Chương 1. Giới thiệu chung về xây dựng ứng dụng web an toàn...................1
1.1. Ứng dụng web................................................................................................1
1.2. Giao thức HTTP.............................................................................................4


1.2.1. Truy vấn HTTP...................................................................................5
1.2.2. Phản hồi HTTP....................................................................................6
1.2.3. Phương thức HTTP.............................................................................7
1.2.4. Cookie và Session...............................................................................8
1.2.5. HTTPS...............................................................................................11
1.3. Ngôn ngữ HTML và các thành phần của trang web....................................11
1.4. Ngơn ngữ lập trình web...............................................................................13
1.5. Hiểm họa an tồn ứng dụng web.................................................................16
1.5.1. Nhóm hiểm họa xác thực..................................................................16
1.5.2. Nhóm hiểm họa trao quyền...............................................................17
1.5.3. Nhóm hiểm họa tấn cơng lên máy khách..........................................19
1.5.4. Nhóm hiểm họa thực thi câu lệnh.....................................................20
1.5.5. Nhóm hiểm họa làm lộ thơng tin.......................................................21
1.5.6. Nhóm hiểm họa tấn cơng logic.........................................................22
1.6. Quy trình xây dựng ứng dụng web an tồn..................................................23
1.7. Câu hỏi ôn tập..............................................................................................25
Chương 2. Các tấn công ứng dụng web thường gặp và cách phịng tránh...26
2.1. Tấn cơng XSS..............................................................................................26
2.1.1. Ví dụ về XSS.....................................................................................26
2.1.2. Phân loại XSS...................................................................................29
2.1.3. Khả năng của XSS.............................................................................33
2.1.4. Phịng chống XSS.............................................................................35
2.2. Tấn cơng CSRF............................................................................................39
2.2.1. Ví dụ về CSRF..................................................................................40
2.2.2. Phịng chống CSRF...........................................................................42
2.2.3. Tự bảo vệ mình trước CSRF.............................................................48
ii


2.3. Tấn cơng SQL Injection...............................................................................49

2.3.1. Ví dụ về SQL Injection.....................................................................49
2.3.2. Xác định phiên bản DBMS được dùng trên website.........................52
2.3.3. Kỹ thuật khai thác dữ liệu thơng qua tốn tử UNION......................56
2.3.4. Kỹ thuật khai thác thông qua các câu lệnh điều kiện........................63
2.3.5. Kỹ thuật khai thác dữ liệu với Blind SQL Injection.........................66
2.3.6. Kỹ thuật vượt qua các bộ lọc tham số đầu vào.................................66
2.3.7. Một tấn công SQL Injection trên thực tế...........................................69
2.3.8. Phòng chống SQL Injection ở mức xây dựng ứng dụng...................75
2.3.9. Phòng chống SQL Injection ở mức nền tảng hệ thống.....................79
2.4. Tấn công từ chối dịch vụ..............................................................................79
2.4.1. Khái niệm và dạng thức tấn công từ chối dịch vụ.............................79
2.4.2. Các dạng tấn công từ chối dịch vụ....................................................80
2.4.3. Tấn công từ chối dịch vụ phân tán....................................................86
2.4.4. Phịng chống tấn cơng từ chối dịch vụ..............................................90
2.5. Một số tấn công khác...................................................................................90
2.5.1. Tấn công Path Traversal....................................................................90
2.5.2. Tấn công Content Spoofing..............................................................91
2.6. Câu hỏi ôn tập..............................................................................................93
Chương 3. Xây dựng ứng dụng web an toàn...................................................94
3.1. Quản lý tài khoản người dùng......................................................................94
3.1.1. Quy định về thông tin định danh và xác thực...................................94
3.1.2. Quản lý mật khẩu..............................................................................96
3.1.3. Cơ chế phục hồi mật khẩu...............................................................100
3.2. Xác thực và phân quyền người dùng.........................................................102
3.2.1. Xác thực người dùng.......................................................................103
3.2.2. Chống tấn cơng dị mật khẩu...........................................................105
3.2.3. Phân quyền người dùng...................................................................107
3.3. Quản lý trạng thái phiên làm việc..............................................................110
3.3.1. Vấn đề ghi nhớ trạng thái................................................................110
3.3.2. Quản lý trạng thái phía client sử dụng cookie.................................112

3.3.3. Quản lý trạng thái phía server sử dụng session...............................117
3.4. Mã hóa dữ liệu nhạy cảm...........................................................................122
iii


3.4.1. Bảo vệ dữ liệu bằng giao thức HTTPS............................................123
3.4.2. Khả năng mật mã của các ngơn ngữ lập trình web.........................126
3.4.3. Bảo vệ mật khẩu của người dùng trên server..................................129
3.4.4. Bảo vệ các dữ liệu khác trên server.................................................131
3.5. Lọc dữ liệu người dùng..............................................................................133
3.5.1. Xác định các nguồn nhập dữ liệu....................................................134
3.5.2. Chiến lược phòng thủ khi xây dựng ứng dụng web........................137
3.5.3. Kỹ thuật lọc dữ liệu người dùng.....................................................141
3.5.4. Công cụ lọc dữ liệu người dùng......................................................143
3.5.5. Hạn chế tối đa tác động của dữ liệu người dùng.............................146
3.6. Bảo vệ cơ sở dữ liệu...................................................................................148
3.6.1. Lựa chọn vị trí an tồn cho DBMS.................................................148
3.6.2. Hạn chế bề mặt tấn công.................................................................150
3.6.3. Cấp phép truy cập dữ liệu với đặc quyền tối thiểu..........................150
3.6.4. Cập nhật DBMS..............................................................................150
3.6.5. Phòng chống tấn công SQL Injection..............................................150
3.7. Nội dung thực hành....................................................................................151
3.8. Câu hỏi ôn tập............................................................................................151
Chương 4. Triển khai và vận hành an toàn ứng dụng web..........................152
4.1. Những yếu tố đảm bảo an toàn ứng dụng web..........................................152
4.2. Đánh giá an toàn ứng dụng web.................................................................154
4.3. Cấu hình an tồn cho máy chủ web...........................................................156
4.3.1. Cấu hình an tồn cho IIS.................................................................156
4.3.2. Cấu hình an tồn cho Apache..........................................................160
4.4. Bảo vệ máy chủ web..................................................................................167

4.4.1. Mơ hình bảo vệ máy chủ web.........................................................167
4.4.2. Cân bằng tải.....................................................................................171
4.4.3. Vượt qua lỗi.....................................................................................176
4.5. Nội dung thực hành....................................................................................177
4.6. Câu hỏi ôn tập............................................................................................177
Tài liệu tham khảo..............................................................................................178

iv


DANH MỤC TỪ VIẾT TẮT
ACL

Access Control List

ASP

Active Server Pages

CAPTCHA

Completely Automated Public Turing test to tell Computers and
Humans Apart

CSRF

Cross-Site Request Fogery

DBMS


Data Base Management System

DDoS

Distributed Denial of Service

DLL

Dynamic-link Library

DOM

Document Object Model

DoS

Denial of Service

IIS

Internet Information Service

IRC

Internet Relay Chat

OSI

Open System Interconnection


OTP

One Times Password

OWASP

Open Web Application Security Project

PHP

Personal Home Page (old), Hypertext Preprocessor (new)

PoD

Ping of Death

RFC

Request For Comment

SQL

Structed Query Language

URL

Uniform Resource Locator

WAMP


Windows, Apache, MySQL, PHP

XSRF

Cross-Site Request Fogery

XSS

Cross-Site Scripting

v


LỜI NĨI ĐẦU
Xu thế tin học hóa xã hội đã có từ nhiều thập kỉ qua, đến nay vẫn diễn ra
mạnh mẽ. Rất nhiều dịch vụ thương mại và hành chính đã được cung cấp trực
tuyến. Nhiều quốc gia trên thế giới, trong đó có Việt Nam, đã và đang nỗ lực
trong việc xây dựng chính phủ điện tử. Ngày nay, mạng Internet đã lan tỏa khắp
các ngõ ngách trên thế giới; các dịch vụ Internet cũng đã đi sâu vào đời sống xã
hội Việt Nam. Ngày nay, thông qua Internet, mà cụ thể là thông qua World Wide
Web, chúng ta có thể tiếp cận được các dịch vụ như thơng tin, giải trí, giao tiếp
với người thân, học tập, mua sắm, giao dịch ngân hàng... Sự tiện lợi của Internet
đã khiến nó trở thành một phần khơng thể thiếu đối với một bộ phận đông đảo
người dân. Tuy nhiên, trong mấy năm vừa qua, rất nhiều website trên Internet bị
tấn công, gây ra những thiệt hại nặng nề cho các cá nhân, tổ chức và chính phủ.
Điều này đã gióng lên hồi chng cảnh báo về nguy cơ mất an tồn khi tham gia
vào mạng máy tính tồn cầu này. Nhưng xu thế tin học hóa xã hội là khơng thể
cưỡng lại, việc càng ngày càng có nhiều dịch vụ được đưa lên Internet là điều tất
yếu vì những lợi ích to lớn mà nó mang lại. Vấn đề đặt ra là phải đảm bảo an
toàn cho cả người dùng và nhà cung cấp dịch vụ khi tham gia vào môi trường

trực tuyến.
Hầu hết các dịch vụ trực tuyến hiện nay đều được cung cấp bởi các ứng
dụng web, Học viện Kỹ thuật mật mã đã quyết định đưa học phần "Xây dựng
ứng dụng we an toàn" vào chương trình đào tạo Kĩ sư an tồn thơng tin. Học
phần này sẽ giúp sinh viên nắm bắt được các hiểm họa an toàn đối với ứng dụng
web, bản chất và cách thực hiện cũng như cách thức phòng tránh các tấn công
lên ứng dụng web, cách thức xây dựng một ứng dụng web an toàn với khả năng
chống lại các tấn công, và những vấn đề quan trọng trong triển khai và vận hành
để đảm bảo an toàn cho ứng dụng web. Để tiếp thu hiệu quả kiến thức của học
phần này, sinh viên cần có kiến thức căn bản về lập trình ứng dụng web, đặc biệt
là sử dụng ngơn ngữ PHP và ASP.NET.
Học phần này cịn mới ở Việt Nam, giáo trình lại được biên soạn trong
thời gian hạn chế nên khơng thể tránh khỏi những thiếu sót. Rất mong nhận
được ý kiến đóng góp của đồng nghiệp và tồn thể bạn đọc để chúng tơi có thể
hồn thiện giáo trình này.
CÁC TÁC GIẢ
vi


CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ
XÂY DỰNG ỨNG DỤNG WEB AN TOÀN
1.1. ỨNG DỤNG WEB
Tiền thân của mạng Internet ngày nay là mạng ARPANET được xây dựng
vào năm 1969 theo u cầu của bộ quốc phịng Mỹ. Ban đầu, nó được sử dụng
để liên kết 4 địa điểm là: Viện nghiên cứu Stanford, Đại học California ở Los
Angeles, Đại học Utah và Đại học California ở Santa Barbara. Và đó cũng
chính là mạng diện rộng (Wide Area Network - WAN) đầu tiên được xây dựng.
Khi đó, ARPANET được các nhà khoa học nghiên cứu xây dựng nhằm phục vụ
mục đích quân sự. Nhưng về sau, mạng liên lạc này nhanh chóng phát triển, nó
được sử dụng cho cả mục đích khoa học. Vào năm 1973, phạm vi kết nối của nó

đã vươn ra khỏi biên giới nước Mỹ, sang đến nước Anh và Na Uy. Vào cuối
những năm 70, nhiều giao thức truyền tin đã được xây dựng để sử dụng trong
mạng ARPNET, những giao thức này được chuẩn hóa vào những năm 19811982. Vào ngày 01/01/1983, hoạt động của mạng ARPANET được chuyển từ
giao thức NCP sang giao thức TCP/IP và giao thức TCP/IP đã được sử dụng từ
đó cho đến nay. Cũng chính trong năm 1983, người ta bắt đầu gọi ARPANET là
Internet.
Tuy nhiên, vào năm 1984, một đối thủ của ARPANET đã xuất hiện, đó là
mạng NFSNet được xây dựng bởi Quỹ khoa học quốc gia Mỹ (NSF - National
Science Foundation). Mạng này được cấu thành từ nhiều mạng nhỏ, kết nối các
trường đại học với nhau. Trong vịng năm có khoảng 10 nghìn máy tính đã kết
nối vào mạng này. Điều đó khiến cho NSFNet có băng thông lớn hơn hẳn so với
ARPANET, và tên gọi "Internet" dần được chuyển từ ARPANET sang cho

1


NSFNet. Đến năm 1990 thì ARPANET hồn tồn ngừng hoạt động, nhường chỗ
cho NSFNet, tức Internet1.
World Wide Web (gọi tắt là web) chính thức xuất hiện trên Internet vào
năm 1991. Có thể nói đây là một cuộc cách mạng trên Internet vì nhờ đó mà
người ta có thể truy cập, trao đổi thông tin một cách dễ dàng. Mặc dù ra đời khá
muộn so với Internet, nhưng chính nhờ web mà Internet đã trở nên phổ biến như
ngày nay. Nhiệm vụ ban đầu của web là cung cấp thông tin, dữ liệu một cách
nhanh chóng, thuận tiện từ người có đến người cần. Cùng với sự phát triển của
khoa học công nghệ, bên cạnh việc cung cấp thông tin, dữ liệu, ngày nay web
còn cung cấp dịch vụ (dịch vụ tin học văn phòng trực tuyến, dịch vụ thư điện
tử,...) và cịn có thể đóng vai trị là mơi trường thực hiện các giao dịch thương
mại.
Nói đến web, khơng thể khơng nói đến các khái niệm: webpage, website,
web application, web server, web client và web browser.


Hình Giới thiệu chung về xây dựng ứng dụng web an toàn.1. Các thực thể trên World Wide
Web

Web server (máy chủ web) thường được dùng với hai nghĩa. Nghĩa thứ
nhất là chỉ máy tính (hoặc cụm máy tính) vật lý 2 mà trên đó website hoạt động.
1

Ở đây, tên gọi Internet phải viết hoa. Nếu viết thường (internet) thì nó có nghĩa là một liên mạng, tức
là chỉ một mạng bất kì được cấu thành từ nhiều mạng nhỏ, mà không nhất thiết chỉ mạng tồn cầu Internet.
2
Ngày nay, với sự phát triển của cơng nghệ ảo hóa thì yếu tố "vật lý" là khơng nhất thiết, thay vào đó
máy chủ web có thể là một (một số) trong nhiều máy tính ảo cùng hoạt động trên một máy tính vật lý.

2


Nghĩa thứ hai là để chỉ phần mềm (ví dụ như Apache, IIS) chạy trên máy chủ
web vật lý, tương tác trực tiếp với web client, đóng vai trị trung gian giữa web
client và website.
Web client (máy khách web) cũng có thể được dùng với hai nghĩa. Nghĩa
thứ nhất là chỉ máy tính vật lý mà từ đó người dùng truy cập tới các website.
Nghĩa thứ hai là chỉ phần mềm chạy trên máy khách web vật lý, thay mặt người
dùng gửi các truy vấn tới web server và hiển thị kết quả mà web server trả về.
Thông thường, web client là các web browser (trình duyệt web) như Firefox,
Chrome, IE, Opera... nhưng cũng có những web client khơng phải là web
browser, được xây dựng với những mục đích đặc biệt, ví dụ để tải website về
máy mà khơng hiển thị chúng, ví dụ như TeleportPro, Httrack.
Webpage là tồn bộ nội dung hiển thị trên trình duyệt web khi duyệt một
địa chỉ nhất định. Nội dung của webpage thường được xác định bởi URL mà

người dùng yêu cầu. Tuy nhiên, điều này chỉ mang tính tương đối. Ngày nay,
một phần lớn các website được xây dựng bằng công nghệ web động (dynamic
web). Khi đó, trong những điều kiện khác nhau, một URL sẽ ứng với những nội
dung khác nhau. Điều kiện ở đây có thể là: thời điểm duyệt web, tài khoản được
sử dụng để duyệt web, các thao tác mà người dùng đã thực hiện trong quá trình
duyệt web...
Website là tập hợp các webpage có chung tên miền cơ sở. Ví dụ, các
webpage sau đây đều thuộc cùng một website:
/> /> /> />Các webpage này có chung tên miền cơ sở là example.com. Một website
có thể chỉ gồm một webpage, nhưng cũng có thể gồm hàng trăm triệu webpage.
Về nội dung, một website có thể chứa nhiều thơng tin dành cho nhiều người cho
nhiều mục đích và nhu cầu khác nhau. Tuy nhiên một webpage chỉ phục vụ cho
một mục đích và/hoặc một nhu cầu cụ thể. Số lượng website trên Internet đến
cuối năm 2012 được ước tính vào khoảng 600 triệu; con số tương ứng tại năm
2010 là 255 triệu.

3


Một website có thể được xây dựng bằng ngơn ngữ HTML thuần túy (xem
mục 1.3); website có thể được xây dựng bằng những công cụ khác nhau, từ đơn
giản như Notepad đến đồ sộ như Macromedia Dreamweaver nhưng kết quả cuối
cùng là những file HTML. Trong trường hợp này, web server khơng phải thực
hiện bất kì xử lý nào, ngoại trừ việc cung cấp cho web client một cách nguyên
vẹn những file được yêu cầu. Điều đó cũng có nghĩa là trong trường hợp này,
website không thể tiếp nhận, xử lý dữ liệu từ phía người dùng; nội dung của các
webpage là khơng thay đổi. Nhưng một website cũng có thể được xây dựng
bằng ngơn ngữ lập trình. Trong trường hợp này, website chính là một ứng dụng
web. Ứng dụng web là ứng dụng chạy trên máy chủ web, đáp ứng các truy vấn
HTTP gửi tới máy chủ web. Ứng dụng web có ba đặc điểm. Trước hết, đó phải

là một ứng dụng – một chương trình có thể thực thi được. Ứng dụng đó có thể
được viết bằng ngơn ngữ lập trình thơng thường (C/C++, C#, Java, Delphi…)
hay ngơn ngữ kịch bản (PHP, ASP…). Thứ hai, nó phải thực thi trên máy chủ
web. Và thứ ba, nó phải tiếp nhận, xử lý và đáp ứng các truy vấn HTTP gửi tới
máy chủ web. Tương tự như một ứng dụng thơng thường, một ứng dụng web có
thể gồm một hoặc nhiều "chương trình" (mỗi chương trình là một file có thể
thực thi được) có quan hệ tương hỗ vơi nhau.
1.2. GIAO THỨC HTTP
Giao thức cơ bản và chính yếu để web client (thường là trình duyệt) và
web server giao tiếp với nhau là HTTP. HTTP là viết tắt của HyperText Transfer
Protocol, tức Giao thức truyền tải siêu văn bản. Nó là một giao thức tầng ứng
dụng trong bộ giao thức TCP/IP, được mô tả chi tiết trong các RFC 1945 1, RFC
26162 và một số RFC khác. HTTP là một giao thức đơn giản, ban đầu được phát
triển để truyền tải những văn bản tĩnh. Về sau, nó được mở rộng để hỗ trợ những
ứng dụng phức tạp hơn.
HTTP hoạt động theo mơ hình dựa trên thơng điệp (message-based
model), theo đó máy khách gửi tới máy chủ một thơng điệp truy vấn (request
message) và máy chủ gửi lại cho máy khách một thông điệp phản hồi (response
message). HTTP là giao thức không trạng thái (stateless), tức là trong giao thức
1
2

/> />
4


này khơng có cơ chế ghi nhớ kết quả của các truy vấn trước, khi thực hiện các
truy vấn sau.
1.2.1. Truy vấn HTTP
Mọi thông điệp HTTP (cả truy vấn và phản hồi) đều chứa một hoặc nhiều

tiêu đề (header). Mỗi tiêu đề được ghi trên một dòng. Sau tiêu đề là phần thân
(body) của thơng điệp. Phần thân có thể có hoặc khơng. Nếu có thì nó được phân
cách với phần tiêu đề bởi một dòng trống. Một truy vấn HTTP điển hình có dạng
như sau:
Ví dụ 1.1. Truy vấn HTTP điển hình

GET /auth/488/YourDetails.ashx?uid=129&group=admin HTTP/1.1
Accept: application/x-ms-application, image/jpeg,
application/xaml+xml, image/gif, image/pjpeg, application/xms-xbap, application/x-shockwave-flash, */*
Referer: />Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;
WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR
3.5.30729; .NET CLR 3.0.30729; .NET4.0C; InfoPath.3; .NET4.0E;
FDM; .NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: mdsec.net
Connection: Keep-Alive
Cookie: SessionId=5B70C71F3FD4968935CDB6682E545476

Dòng đầu tiên (tiêu đề thứ nhất) là bắt buộc. Tiêu đề này có ba phần, được
phân tách bởi dấu cách. Phần thứ nhất cho biết phương thức truy vấn. Trong ví
dụ trên, phương thức được sử dụng là GET. Đó cũng là phương thức thơng dụng
nhất, và ý nghĩa của nó là để yêu cầu tài nguyên từ web server. Phương thức
GET khơng địi hỏi truy vấn phải có phần thân, tức là truy vấn chỉ bao gồm các
tiêu đề. Các phương thức HTTP sẽ được trình bày trong mục 1.2.3. Phần thứ hai
(/auth/488/YourDetails.ashx?uid=129&group=admin) là URL được yêu cầu.
Thông thường, URL này gồm đường dẫn tới một tài nguyên
(/auth/488/YourDetails.ashx)

một

chuỗi
các
tham
số
(?
uid=129&group=admin) mà web client gửi tới web server. Chuỗi tham số bắt
đầu bằng dấu chấm hỏi (?) và các tham số được phân cách bởi dấu và (&). Mỗi
tham số gồm tên của tham số và giá trị tương ứng của nó được phân tách bởi dấu
bằng (=). Trong ví dụ trên, tham số uid có giá trị '129', cịn tham số group
có giá trị là 'admin'. Phần thứ ba cho biết phiên bản của giao thức HTTP mà
5


web client sử dụng. Hiện nay có hai phiên bản được dùng phổ biến trên Internet
là 1.0 và 1.1, trong đó hầu hết trình duyệt web theo mặc định đều sử dụng phiên
bản 1.1. Ở nước ta, theo thông tư số 01/2011/TT-BTTTT của Bộ trưởng Bộ
Thông tin và Truyền thông về việc Công bố Danh mục tiêu chuẩn kỹ thuật về
ứng dụng công nghệ thông tin trong cơ quan nhà nước thì các hệ thống cơng
nghệ thơng tin trong cơ quan nhà nước bắt buộc phải hỗ trợ HTTP v1.1 khi thực
hiện truyền siêu văn bản. Giữa các phiên bản 1.0 và 1.1 có một số điểm khác
biệt, nhưng xét từ quan điểm bảo vệ ứng dụng web thì điểm khác biệt duy nhất
đáng quan tâm là trong phiên bản 1.1 truy vấn HTTP phải có một tiêu đề bắt
buộc nữa là Host.
Ngồi ra, có thể điểm qua một số tiêu đề đáng quan tâm trong ví dụ trên
đây như sau.
Tiêu đề Referer cho biết điểm xuất phát của truy vấn. Ví dụ, nếu người
dùng đang xem một webpage và nhấn chuột lên một đường liên kết trên
webpage đó thì sẽ có một truy vấn HTTP được phát sinh và dòng tiêu đề
Referer sẽ chứa URL của webpage mà người dùng đang xem. Trong ví dụ
trên, URL này là />Tiêu đề Cookie được dùng để đệ trình các tham số mà giá trị của chúng

được web server gửi cho web client trước đó. Vấn đề này sẽ được xem xét cụ
thể ở mục 1.2.4.
1.2.2. Phản hồi HTTP
Phản hồi HTTP là một thông điệp mà web server trả lời cho một truy vấn
từ web client. Nó cũng bao gồm các dịng tiêu đề và phần thân. Phần thân dược
phân tách với phần tiêu đề bởi một dòng trống. Một phản hồi HTTP điển hình có
dạng như sau:
Ví dụ 1.2. Phản hồi HTTP điển hình

HTTP/1.1 200 OK
Date: Tue, 19 Apr 2011 09:23:32 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc
X-AspNet-Version: 2.0.50727
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT

6


Content-Type: text/html; charset=utf-8
Content-Length: 1067
“ xmlns=” />><head><title>Your details</title>
...

Dòng đầu tiên của mọi phản hồi HTTP bao gồm ba phần được phân tách
bởi dấu cách. Phần thứ nhất cho biết phiên bản của giao thức HTTP được sử

dụng. Phiên bản này tất nhiên không được mới hơn phiên bản mà web client yêu
cầu trong truy vấn. Phần thứ hai là mã kết quả truy vấn. Giá trị thường gặp nhất
của mã này là 200, tức là truy vấn thành công và nội dung của phản hồi này là
câu trả lời cho truy vấn. Phần thứ ba là chuỗi kí tự mơ tả trạng thái của phản
hồi, thường là lời giải thích cho mã kết quả truy vấn. Hiện nay, mọi trình duyệt
đều bỏ qua phần thứ ba này, do đó nó có thể nhận giá trị bất kì.
Hầu hết mọi phản hồi HTTP đều có phần thân. Nội dung của tiêu đề
Content-Type cho biết định dạng dữ liệu của phần thân. Trong ví dụ trên,
nội dung của phần thân là một trang HTML sử dụng bộ mã UTF8. Tiêu đề
Content-Lenght cho biết độ dài (tính bằng byte) của thân phản hồi.
Tiêu đề Set-Cookie dùng để thiết lập giá trị cookie mới cho web
client. Giá trị này sẽ được web client gửi lại cho web server trong truy vấn kế
tiếp.
1.2.3. Phương thức HTTP
Giao thức HTTP quy định nhiều phương thức truy vấn khác nhau. Trong
đó hai phương thức được dùng phổ biến nhất là GET và POST.
Phương thức GET được sử dụng để yêu cầu tài nguyên. Các tham số nếu
có được ghi trong URL truy vấn. Điều này khiến ta có thể đánh dấu (bookmark)
URL của một tài nguyên động để gọi lại về sau. Các URL có thể được đánh dấu
(bookmark) để dùng lại, có thể được lưu trong lịch sử duyệt web, lưu lại trong
nhật ký của web server, có thể được gửi tới các web server bên ngồi thơng qua
tiêu đề Referer (xem Ví dụ 1.1.) nếu một webpage chứa đường liên kết tới
trang khác. Chính vì thế, khơng được dùng phương thức GET khi cần truyền dữ
liệu nhạy cảm tới web server. Thay vào đó, cần dùng phương thức POST.

7


Theo thiết kế, phương thức POST được sử dụng để thực hiện các hành
động. Các tham số có thể được truyền qua URL và cả qua thân truy vấn. Các

tham số được truyền trong thân truy vấn sẽ không bị lưu lại trong các kí hiệu
đánh dấu (bookmark), trong lịch sử duyệt web và không bị thể hiện trong tiêu đề
Referer. Như thế, phương thức POST cần được dùng thay cho GET khi cần
gửi những thông tin nhạy cảm đến web server.
Bên cạnh hai phương thức thông dụng là GET và POST thì giao thức
HTTP cịn định nghĩa các phương thức khác như HEAD, TRACE, OPTIONS và
PUT.
1.2.4. Cookie và Session
1.2.4.1.Cookie
Cookie là một phần thiết yếu của giao thức HTTP và được sử dụng bởi đa
phần ứng dụng web. Và cũng chính cookie là đối tượng thường bị lợi dụng để
khai thác các điểm yếu bảo mật. Cookie là cơ chế để web server gửi các dữ liệu
khác nhau tới web client; web client phải lưu trữ những giá trị này và sau đó tự
động đệ trình trở lại web server mỗi khi thực hiện truy vấn. Trên trình duyệt của
người dùng, giá trị cookie được thiết lập riêng cho từng domain (hoặc
subdomain), và khi thực hiện truy vấn tới một domain (subdomain) nào đó, trình
duyệt chỉ đệ trình giá trị cookie ứng với domain (subdomain) đó.
Web server thiết lập giá trị cookie thông qua tiêu đề Set-Cookie trong
phản hồi HTTP. Cookie bao gồm một hoặc nhiều cặp name=value, nhưng mỗi
cặp như thế có thể được thay bởi một chuỗi kí tự bất kì khơng có dấu cách. Các
cặp name=value khác nhau có thể được thiết lập trong các tiêu đề SetCookie khác nhau, hoặc trong cùng một tiêu đề. Nếu thiết lập nhiều cặp trong
cùng một tiêu đề Set-Cookie thì các cặp được phân tách bởi dấu chấm phẩy.
Set-Cookie: cf=somestring
Set-Cookie: btzh=89Tvp99;path=/forum

Cịn web client đệ trình cookie thơng qua tiêu đề Cookie. Tất cả các cặp
name=value của cookie được đệ trình trong cùng một tiêu đề và được phân
tách bằng dấu chấm phẩy:
Cookie: cf=somestring;btzh=89Tvp99;path=/forum


8


Ngoài các cặp name=value sẽ được web client lưu trữ và đệ trình trở lại
web server thì trong tiêu đề Set-Cookie có thể có những thuộc tính dùng để
quy định việc sử dụng cookie trên web client.
 Thuộc tính expires quy định thời hạn có hiệu lực của cookie. Trình
duyệt sẽ lưu trữ cookie và sử dụng nó cho đến ngày được quy định
trong thuộc tính này. Nếu thuộc tính expires khơng được thiết lập thì
cookie chỉ có giá trị trong một phiên làm việc.
 Thuộc tính domain cho biết domain mà cookie này có hiệu lực.
Domain này phải trùng với chính domain đã gửi cookie hoặc là domain
cấp trên của nó.
 Thuộc tính path chỉ ra đường dẫn URL mà cookie có hiệu lực.
 Nếu thuộc tính secure được bật thì cookie chỉ được gửi đi trong các
truy vấn HTTPS.
 Nếu thuộc tính HttpOnly được bật thì khơng thể truy xuất trực tiếp
đến cookie bằng các đoạn mã JavaScript.
Như vậy, cookie có thể được sử dụng để tổ chức phiên làm việc cho người
dùng web. Tuy nhiên, khi đó giữa web server và web client có thể phải truyền
qua lại liên tục một lượng lớn các tham số, trong đó có thể chứa những thơng tin
nhạy cảm. Điều bất tiện này có thể được giải quyết nhờ vào sử dụng session
(phiên làm việc).
1.2.4.2.Session
Trên thực tế, session (phiên làm việc) khơng phải là một thành phần của
giao thức HTTP. Nói cách khác, giao thức HTTP chỉ quy định về cookie mà
khơng quy định về session. Thay vào đó, các ngơn ngữ lập trình web (PHP, JSP,
ASP...) sử dụng cookie để hỗ trợ tính năng quản lý session. Mặt khác, session
vẫn có thể được hỗ trợ ngay cả khi khơng sử dụng cookie hoặc khi tính năng
cookie bị người dùng vơ hiệu hóa.

Session là cách đơn giản để lưu trữ một biến và khiến biến đó có thể được
sử dụng khi người dùng duyệt từ webpage này sang webpage khác. Đối với các
biến thơng thường (khai báo trong mã chương trình của ứng dụng web), khi ứng
dụng được thực thi, các biến đó sẽ được cấp phát bộ nhớ; và sau khi ứng dụng
kết thúc thì vùng nhớ sẽ được thu hồi.
9


Ví dụ 1.3. Sử dụng biến thơng thường

//File name: hello.php
$name = $_REQUEST ['name'];
?>
<html>
<body>
Hello, <?php echo $name; ?>!
</body>
</html>

Trong ví dụ trên đây, mỗi khi file hello.php được thực thi, biến
$name sẽ được cấp phát mới bộ nhớ, được gán giá trị là giá trị của tham số
name mà người dùng gửi đến server; khi file hello.php thực thi xong thì
biến $name được giải phóng, tức vùng nhớ đã cấp cho nó trước đó bị thu hồi.
Nói cách khác, giá trị của biến $name trong các lần gọi file hello.php khác
nhau là hoàn toàn độc lập với nhau; đồng thời giá trị đó chỉ được sử dụng trong
file hello.php mà khơng thể sử dụng trong bất kì file nào khác.
Session sẽ khác, nó có thể được tạo ra, tồn tại trên server, được sử dụng
xuyên suốt từ truy vấn này sang truy vấn khác, chỉ mất đi khi có yêu cầu xóa nó
hoặc hết thời hạn có hiệu lực, hoặc khi đóng trình duyệt. Session khơng phải là

một biến mà là một tập hợp có thể mở rộng các biến được lưu trong một file với
tên ngẫu nhiên, khó đốn trên máy chủ. Mỗi session được xác định bởi một định
danh, gọi là session ID – cũng là một giá trị khó đốn. Chính giá trị của session
ID được truyền qua lại giữa web server và web client để duy trì phiên làm việc.
Giá trị session ID thường được truyền dưới dạng cookie và theo mặc định không
được web client ghi nhớ, vì thế, khi đóng web client (trình duyệt) thì giá trị này
trên máy người dùng sẽ mất, người dùng không thể tiếp tục phiên làm việc cũ.
Trong trường hợp trình duyệt khơng hỗ trợ cookie hoặc tính năng cookie bị vơ
hiệu hóa thì session ID có thể được truyền đi dưới dạng tham số của URL.
Ứng dụng điển hình của session là để duy trì trạng thái đăng nhập của
người dùng. HTTP là giao thức khơng có trạng thái. Do đó, nếu khơng có một
cơ chế đặc biệt để duy trì trạng thái đăng nhập thì người dùng sẽ phải thực hiện
xác thực mỗi khi thực hiện một truy vấn HTTP. Session chính là giải pháp hiệu
quả để giải quyết vấn đề này, dù rằng vấn đề cũng có thể được giải quyết bằng
cách sử dụng cookie.
Việc quản lý phiên làm việc sẽ được trình bày cụ thể ở mục 3.3, trang 113.
10


1.2.5. HTTPS
Khi sử dụng giao thức HTTP, dữ liệu được truyền đi dưới dạng rõ (khơng
được mã hóa), do vậy có thể bị chặn bắt và đọc bởi kẻ tấn công trên đường
truyền. Để khắc phục vấn đề này, người ta xây dựng giao thức HTTPS. Đó cũng
là một giao thức ở tầng ứng dụng, nhưng được xây dựng bên trên giao thức giao
vận an toàn TLS/SSL (Transport Layer Security/Secure Socket Layer) thay vì
TCP. Khi sử dụng giao thức HTTPS các truy vấn HTTP và phản hồi HTTP hồn
tồn khơng có gì thay đổi; chỉ có một sự thay đổi ở tầng bên dưới, đó là dữ liệu
được truyền tải bằng giao thức SSL.
1.3. NGÔN NGỮ HTML VÀ CÁC THÀNH PHẦN CỦA TRANG WEB
Ngôn ngữ đánh dấu siêu văn bản (HTML – HyperText Markup Language)

là ngôn ngữ được sử dụng để quy định cách hiển thị nội dung của một webpage.
HTML được phát triển và chuẩn hóa bởi (W3C – World Wide Web Consortium).
Dưới đây là một ví dụ nhỏ về mã của một webpage. Đoạn mã này được lưu
trong file index.html.
Ví dụ 1.4. Mã của một trang HTML đơn giản

<!-- FileName: index.html -->
<html>
<head>

<title>Một trang HTML</title>
</head>
<body>

Tiêu đề được căn giữa


Đây là một đường siêu liên kết (hyperlink):


11


</html>

Như có thể thấy, về bản chất, index.html là một file văn bản thuần túy
nhưng được soạn theo quy cách của ngôn ngữ HTML. Đặc trưng dễ thấy là
trong file này có sử dụng các thẻ (HTML tags). Thẻ HTML thường đi theo cặp,
gồm thẻ mở và thẻ đóng. Ví dụ, để xác định tiêu đề của webpage, người ta dùng
cặp thẻ gồm thẻ mở <title> và thẻ đóng </title> để xác định phần thân
của webpage, người ta dùng thẻ mở <body> và thẻ đóng </body>. Mỗi
thẻ/cặp thẻ HTML lại có các thuộc tính khác nhau. Việc xem xét các thẻ HTML,
cũng như các phần mở rộng trong DHTML (Dynamic HTML) khơng nằm trong
phạm vi xem xét của giáo trình này; sinh viên có thể tìm hiểu trong các tài liệu
khác, bao gồm tài liệu trên website />Mặc dù nội dung của file index.html chỉ là văn bản thuần túy, nhưng
khi được thể hiện bởi trình duyệt kết quả thu được hồn tồn khác (Hình Giới
thiệu chung về xây dựng ứng dụng web an tồn.2).

Hình Giới thiệu chung về xây dựng ứng dụng web an toàn.2. Thể hiện của trang HTML bởi
trình duyệt

Và điểm quan trọng đáng lưu ý ở đây là: để có được thể hiện như trên
Hình Giới thiệu chung về xây dựng ứng dụng web an toàn.2, trình duyệt phải

12


thực hiện không phải một mà là hai truy vấn tới web server. Bằng cơng cụ HTTP
Debugger có thể dễ dàng quan sát thấy, khi người dùng duyệt file

thì trình duyệt sẽ thực hiện hai truy vấn (Hình
Giới thiệu chung về xây dựng ứng dụng web an toàn.3). Truy vấn thứ nhất là để
tải về nội dung của chính file index.html. Sau khi tải và phân tích nội dung
của file index.html, trình duyệt sẽ nhận thấy trong file này có thẻ <img>
tham chiếu đến một file hình ảnh Khi đó, trình
duyệt sẽ tự động tải file hình này này về để hoàn thiện nội dung của webpage
như trên Hình Giới thiệu chung về xây dựng ứng dụng web an tồn.2.

Hình Giới thiệu chung về xây dựng ứng dụng web an toàn.3. Các truy vấn tới web server khi
duyệt file index.html

Như vậy, để hiển thị đầy đủ nội dung của một webpage, trình duyệt trước
hết sẽ tải về một đoạn mã HTML (theo yêu cầu của người dùng). Sau đó, căn cứ
vào nội dung của đoạn mã HTML này, trình duyệt sẽ tự động (khơng chờ u
cầu của người dùng) tải về các thành phần cần thiết khác. Ngoài thành phần hình
ảnh như trong Ví dụ 1.4., một webpage có thể chứa nhiều thành phần khác như:
mã kịch bản JavaScript (*.js), bảng định kiểu phân cấp (*.css), flash video
nhúng (*.swf)... và nhiều thành phần khác.
1.4. NGƠN NGỮ LẬP TRÌNH WEB
Kỹ thuật đầu tiên được sử dụng để xây dựng ứng dụng web là CGI
(Common Gateway Interface). Các chương trình CGI cung cấp một sự liên hệ
đơn giản để tạo các ứng dụng web cho phép tiếp nhận các dữ liệu nhập vào, các
yêu cầu truy vấn cơ sở dữ liệu từ phía người dùng và trả một vài kết quả về cho
trình duyệt. Các chương trình CGI có thể được viết bằng bất cứ ngơn ngữ lập
trình nào có standard input và standard output (C/C++, Perl, Shell script, Dos
shell…). Máy chủ web sử dụng CGI như là một cổng truy cập chặn giữa yêu cầu
của người dùng và dữ liệu được yêu cầu. Nó sẽ được nạp vào bộ nhớ như một
chương trình bình thường. Thơng thường các máy chủ web sẽ chuyển các yêu

13



cầu và triệu gọi chương trình CGI. Sau khi chương trình kết thúc, máy chủ web
sẽ đọc dữ liệu trả về từ chương trình và gửi nó đến trình duyệt web.
Nhược điểm lớn nhất của kỹ thuật CGI là nó hoạt động kém hiệu quả.
Mỗi khi máy chủ web nhận một yêu cầu, một tiến trình mới lại được tạo ra. Mỗi
tiến trình lại chứa trong nó các đoạn mã lệnh, dữ liệu… và không được chia sẻ
lẫn nhau, do đó gây ra lãng phí bộ nhớ. Để khắc phục nhược điểm này,
Microsoft và Netscape đã hợp tác và đưa ra một cải tiến đáng kể là chuyển
chúng về dạng các file thư viện liên kết động (DLL – Dynamic-link Library),
cho phép chia sẻ mã lệnh giữa các tiến trình. Đây chính là các kỹ thuật ISAPI và
NSAPI.
Tuy nhiên các kỹ thuật dựa trên DLL lại có nhược điểm của chúng:
 Các thư viện cần được đặt trong các tiến trình bảo vệ, tức là cần phải
hết sức cẩn thận với việc sử dụng các biến chung hoặc các biến tĩnh khi
lập trình DLL;
 Nếu chương trình triệu gọi gây ra lỗi truy cập, nó có thể dẫn đến tình
trạng máy chủ bị treo;
 Và cuối cùng, khi đã được dịch ra các file DLL, công việc gỡ lỗi cũng
như bảo trì mã lệnh trở nên vất vả hơn bao giờ hết.
Kỹ thuật lập trình web mới nhất của Microsoft là kết hợp HTML, các
đoạn Script, các thành phần xử lý phía server trong cùng một file. Kỹ thuật được
gọi là ASP (Active Server Pages), với phiên bản mới nhất hiện nay là ASP.NET 1.
Ngơn ngữ lập trình được sử dụng là VBScript, Jscript và C#. ASP được triệu gọi
bởi một thư viện liên kết động gắn với máy chủ web của Microsoft (IIS –
Internet Information Service). Về bản chất, có thể coi ASP như là một ngơn ngữ
thơng dịch. Một trang ASP có thể sử dụng HTML, JScript và VBScript; trong
ASP.NET có thể sử dụng C#. Qua các đoạn mã nhúng này, ASP có thể truy cập
đến các thành phần phía server. Các thành phần này có thể được viết trên bất kỳ
1


Ý kiến khác cho rằng ASP.NET không phải là một ngơn ngữ lập trình mà là một nền tảng phát triển
ứng dụng (Framework), bởi vì mã của ứng dụng web có thể được viết bằng C# hoặc Visual Basic .NET. Ngồi
ra, ASP.NET khơng phải là phiên bản kế tiếp của ASP mà là một công nghệ xây dựng ứng dụng web hoàn toàn
mới, bởi ứng dụng web ASP chỉ gồm những đoạn mã kịch bản (script), trong khi ASP.NET hỗ trợ các ngơn ngữ
lập trình đầy đủ tính năng (full-feature programming language) là C# và Visual Basic .NET. Tuy nhiên, trong
giáo trình này, để đơn giản, ta chấp nhận quan điểm coi ASP.NET như một ngôn ngữ lập trình, bởi điều này
khơng ảnh hưởng đến nội dung giáo trình.

14


ngôn ngữ nào hỗ trợ các thành phần COM của Microsoft. Và đây chính là sức
mạnh của ASP: nó có thể làm được bất kỳ cái gì mà máy chủ có thể làm được
với các thành phần COM. Sau khi được thi hành, ASP sẽ sản sinh ra một trang
Web có khn dạng HTML và trả nó về cho Web server.
Nhược điểm lớn nhất của ASP (và ASP.NET) là nó chỉ có thể hoạt động
trên máy chủ web của Microsoft. Các nhà phát triển đang nghiên cứu các giải
pháp để cho phép thực thi các ứng dụng web viết bằng ASP và ASP.NET trên
môi trường Unix/Linux, nhưng kết quả chưa thực sự khả quan, và cách làm này
hiếm được sử dụng trong thực tế.
Một ngơn ngữ lập trình nữa phải kể đến là Java Server Pages hay JSP.
Giống như ASP, trang JSP cho phép chứa HTML, các đoạn mã Java và các thành
phần Java Bean và chúng sẽ thực hiện các công việc để sản sinh ra một webpage
để gửi về trình duyệt web. Việc giao tiếp với trình duyệt web được thực hiện
thông qua các đối tượng của các lớp HttpServletRequest và
HttpServletResponse. Ứng dụng web viết bằng JSP sẽ được biên dịch thành
bytecode trước khi thực thi. Nhược điểm chính của JSP là phải đi kèm với máy
ảo Java, vốn khơng được đánh giá cao về mặt tốc độ.
Ví dụ 1.5. Một đoạn mã viết bằng JSP


<html>
<body bgcolor="white">

Request Information


<font size="4">
JSP Request Method: <%= request.getMethod() %>


Request URI: <%= request.getRequestURI() %>


Request Protocol: <%= request.getProtocol() %>


Servlet path: <%= request.getServletPath() %>


Path info: <%= request.getPathInfo() %>


Path translated: <%= request.getPathTranslated() %>


</body>
</html>

Ngôn ngữ lập trình web phổ biến hàng đầu hiện nay là PHP (Hypertext
Preprocessor). Vào khoảng năm 1994, Rasmus Lerdorf đưa một số đoạn Perl
script vào các webpage để theo dõi xem ai đang đọc tài liệu của mình. Dần dần,
15


người ta bắt đầu thích các đoạn script này và sau đó đã xuất bản một gói cơng cụ
có tên là "Personal Home Pages" (nghĩa đầu tiên của PHP). Từ đó đến nay, PHP
đã phát triển nhanh chóng. Đội ngũ các nhà phát triển (Rasmus Lerdorf, Andi
Gutmans, Zeev Suraski, Stig Bakken, Shane Caraveo và Jim Winstead) đã cải

tiến và mở rộng bộ máy nhúng và bổ sung thêm một số hàm API đơn giản cho
phép các lập trình viên khác tự do bổ sung nhiều tính năng vào ngơn ngữ bằng
cách viết các module cho nó. Cấu trúc của ngơn ngữ đã được tinh chế, được kết
cấu thân thiện hơn đối với những người đến từ các ngôn ngữ hướng đối tượng
hay các ngôn ngữ hướng thủ tục. Nếu đã biết một vài ngơn ngữ lập trình khác thì
việc tìm hiểu PHP sẽ rất đơn giản.
Hiện nay, PHP được hỗ trợ trên khoảng 2,1 triệu máy chủ web và được sử
dụng trong hơn 244 triệu website. PHP là ngôn ngữ thông dịch, mã nguồn mở và
đa nền tảng (hỗ trợ hầu hết các hệ điều hành, bao gồm Winows và Unix/Linux)
và được đánh giá là ngơn ngữ lập trình hồn hảo cho việc lập trình web chuyên
nghiệp [31].
1.5. HIỂM HỌA AN TỒN ỨNG DỤNG WEB
Để đảm bảo tính thống nhất về mặt thuật ngữ cho các chuyên gia trong
lĩnh vực an tồn thơng tin, cho các nhà phát triển ứng dụng web, WASC (Web
Application Security Consortium) đã xây dựng dự án phân loại và mơ tả các
hiểm họa an tồn ứng dụng web. Theo kết quả năm 2010 [32, 118], tất cả các
hiểm họa an toàn ứng dụng web được chia thành 6 nhóm:
1. Authentication (xác thực)
2. Authorization (trao quyền)
3. Client-side Attacks (tấn công lên máy khách)
4. Command Execution (thực thi câu lệnh)
5. Information Disclosure (làm lộ thông tin)
6. Logical Attacks (tấn cơng logic)
1.5.1. Nhóm hiểm họa xác thực
Đó là những tấn công lên các phương pháp xác thực mà ứng dụng web sử
dụng để xác thực người dùng, dịch vụ hay ứng dụng khác. Như đã biết, việc xác
thực được thực hiện bằng cách sử dụng ít nhất một trong ba cơ chế (nhân tố):
"cái gì đó mà chỉ người dùng có" (thẻ từ, smartcard, token,...), "cái gì đó mà chỉ
16



người dùng biết" (mã PIN, mật khẩu...), "cái gì đó là đặc trưng duy nhất của
người dùng" (vân tay, giọng nói, võng mạc...). Trong trường hợp ứng dụng web,
việc xác thực người dùng thường được thực hiện bằng mật khẩu. Khi đó, có
những hiểm họa an tồn như sau:
Hiểm họa dị mật khẩu (Brute Force): là khi chính sách về thiết lập, quản
lý, sử dụng mật khẩu không đủ mạnh khiến kẻ tấn cơng có thể bằng phương
pháp nào đó (bao gồm phương pháp vét cạn) dò ra mật khẩu người dùng.
Hiểm họa sử dụng lược đồ xác thực không đủ mạnh (Insufficient
Authentication): là khi kẻ tấn cơng có thể vượt qua được cơ chế xác thực mà
khơng cần có thông tin xác thực.
Hiểm họa khôi phục mật khẩu không an tồn (Weak Password Recovery
Validation): là khi có lỗ hổng trong cơ chế khôi phục mật khẩu, khiến kẻ tấn
công có thể lấy được hoặc thay đổi mật khẩu của người dùng. Đa phần các
website cho phép thực hiện khôi phục mật khẩu khi người dùng trả lời đúng một
câu hỏi riêng tư nào đó như tên con vật ni đầu tiên, tên ngôi trường đầu tiên...
mà những thông tin này thì lại khơng hồn tồn riêng tư trong hiện trạng phát
triển mạng xã hội như ngày nay. Tức là kẻ tấn cơng có nhiều khả năng thành
cơng trong việc đoán ra câu trả lời cho những câu hỏi như thế.
1.5.2. Nhóm hiểm họa trao quyền
Đó là những tấn cơng lên các phương pháp được web server sử dụng để
xác định xem người dùng có được trao quyền thực hiện một hành động nào đó
hay khơng. Nhiều website phân chia người dùng thành các nhóm khác nhau, và
người dùng thuộc các nhóm khác nhau được trao những quyền khác nhau. Ví dụ,
trên diễn đàn (forum), người dùng được chia thành các nhóm như moderators,
users... Trong đó người dùng thuộc nhóm users chỉ được phép sửa/xóa bài viết
của mình, cịn người dùng thuộc nhóm moderators thì được phép sửa/xóa bài
viết của bất kì ai trong chuyên mục mà mình phụ trách.
Trên thực tế, người ta đã tìm ra những kỹ thuật leo thang đặc quyền cho
phép kẻ tấn công thực hiện những hành động mà về nguyên tắc là anh ta khơng

có quyền thực hiện. Các hiểm họa an tồn thơng tin liên quan đến cơ chế trao
quyền gồm:

17


Hiểm họa bị đoán biết định danh phiên làm việc (Credential/Session
Prediction): Mỗi phiên làm việc (session) được đặc trưng bởi một định danh
(session ID). Nếu có thể đốn được session ID của người dùng nào đó thì có thể
sử dụng ID đó với để làm việc với server trong giới hạn quyền của nạn nhân.

Hình Giới thiệu chung về xây dựng ứng dụng web an tồn.4. Ví dụ về định danh dễ bị đốn
biết

Trên Hình Giới thiệu chung về xây dựng ứng dụng web an toàn.4 là
trường hợp mà session ID liên quan chặt chẽ với định danh người dùng
(username hay user ID) [57]. Nếu xác định được mối quan hệ này, kẻ tấn cơng
có thể đốn ra session ID của người dùng bất kì và sử dụng quyền của người
dùng đó để thực hiện các hành động trên server.
Hiểm họa sử dụng cơ chế phân quyền khơng an tồn (Insufficient
Authorization): đó là khi có những lỗ hổng trong cơ chế phân quyền trên
website, khiến người dùng có thể thực hiện những hành động mà về ngun tắc
là khơng có quyền thực hiện (mà không cần leo thang đặc quyền).
Hiểm họa khơng giới hạn thời gian có hiệu lực của phiên làm việc
(Insufficient Session Expiration): nếu webserver không xác định thời hạn có
hiệu lực hoặc xác định thời hạn có hiệu lực của phiên làm việc quá dài, thông tin
về phiên làm việc (session ID) có thể bị đánh cắp và được sử dụng một cách trái
phép.
Hiểm họa gán ghép định danh phiên làm việc (Session Fixation): Nếu kẻ
tấn công bằng cách nào đó khiến nạn nhân sử dụng một session ID nhất định thì

sau khi nạn nhân đăng nhập xong, kẻ tấn cơng có thể sử dụng session ID đó để
làm việc với web server với tồn bộ quyền hạn của nạn nhân.

18


×