Tải bản đầy đủ (.docx) (36 trang)

Tấn công SQL Injection

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 (658.05 KB, 36 trang )

MỤC LỤC


LỜI MỞ ĐẦU
Trong thời đại ngày này nay internet đã rất trở nên quen thuộc và là một công cụ hữu ích
để một đất nước giới thiệu hình ảnh hay đơn giản chỉ là một trang web cá nhân của một ai
đó giới thiệu về mình. Tất cả đã kéo theo sự phát triển không ngừng của các ứng dụng
web. Và dần dần khái niệm ứng dụng web đã trở nên phổ biến .Khi mà trên internet ,ứng
dụng web đã trở lên phổ biến ,ứng dụng một cách rộng rãi thì các cuộc tấn cơng ứng
dụng web cũng phát triển hết sức phức tạp. Điều này đã đặt ra vấn đề cấp thiết cần làm
như thế nào để bào đảm an tồn thơng tin cho ứng dụng web, thơng tin của người sử
dụng. Các khái niệm chuyên môn về ứng dụng web và tấn công ứng dụng web cũng dần
trở nên phổ biến hơn trong các tài liệu chuyên ngành . Các cơng cụ hỗ trợ người lập
trình web, người quản trị mạng cũng xuất hiện giúp tìm kiếm lỗ hổng của ứng dụng web
nhưng nó khơng theo kịp sự phát triển nhanh đến mức chóng mặt theo xu hướng nhanh
hơn đẹp hơn của các ứng dụng web, và tất nhiên nó khơng thể ngăn chặn hồn tồn các
cuộc tấn công ứng dụng web, khi mà các cuộc tấn công ngày càng đa dạng khai thác triệt
để những lỗi của ứng dụng web, của người quản trị, hay người lập trình ứng dụng web.
Thống kê cho thấy 75% cuộc tấn cơng internet là tấn cơng ứng dụng web,nó gây ra
những thiệt hại vơ cùng to lớn, vì vậy việc tìm hiểu về tấn công ứng dụng web là rất cần
thiết nhằm có cách phịng chống tấn cơng và bảo mật ứng dụng web hiệu quả trở thành
một yêu cầu cấp thiết…
Do đây là một xu thế tất yếu của thời, nên việc tìm hiểu và nghiên cứu về ứng dụng web
sẽ giúp ích rất nhiều cho các nhà lập trình web mới, hay các quản trị viên mới cịn ít kinh
nghiệm trong việc quản trị hệ thống mạng của mình, phòng tránh , hay khắc phục những
lỗi của ứng dụng web. Bài tập lớn này được thực hiện nhằm mục đích giới thiệu rõ hơn
về ứng dụng web nhằm tránh những nhầm lẫn và đồng thời tìm hiểu về những tấn cơng
ứng dụng web phổ dụng nhằm có cách phịng chống ,bảo mật cho ứng dụng web hợp lý.

CHƯƠNG 1. TỔNG QUAN VỀ BẢO MẬT VÀ ỨNG DỤNG WEB
1.1 TỔNG QUAN VỀ WEB




1.1.1 Khái niệm về ứng dụng web (website widget hay web application)
Ứng dụng Web là một ứng dụng chủ, khách sử dụng giao thức HTTP để tương tác với
người dùng hay hệ thống khác. Mang tính kỹ thuật nhiều hơn có thể giải thích các ứng
dụng Web truy vấn máy chủ chứa nội dung (chủ yếu trên cơ sở dữ liệu lưu trữ nội dung)
và tạo tài liệu Web động để phục vụ yêu cầu của máy khách (chính là người dùng
website). Tài liệu được tạo trong kiểu định dạng tiêu chuẩn hỗ trợ trên tất cả mọi trình
duyệt (như HTML, XHTML). JavaScript là một dạng script client-side cho phép yếu tố
động có ở trên từng trang (như thay đổi ảnh mỗi lần người dùng di chuột tới). Trình duyệt
Web chính là chìa khóa. Nó dịch và chạy tất cả script, lệnh… khi hiển thị trang web và
nội dung được yêu cầu.
Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính cho phép người
dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng Internet trên trình duyệt Web
u thích của họ. Dữ liệu sẽ được gửi tới người dùng trong trình duyệt theo kiểu thông tin
động (trong một định dạng cụ thể, như với HTML thì dùng CSS) từ ứng dụng Web qua
một Web Server.
Để hiểu hết được ý nghĩa của khái niệm này chúng ta cùng đi sâu vào tìm hiểu tiếp mơ
hình cấu trúc chức năng và nhiệm vụ của ứng dụng web.
1.2 Cấu trúc, chức năng, giao diện & nguyên tắc hoạt động cơ bản của ứng dụng web
1.2.1 Cấu trúc cơ bản của một ứng dụng

Mơ hình của một ứng dụng web đơn giản chính là mơ hìnhMVC (Model - View Controller).
Tầng Model: chứa các code connect tới database,truy vấn và thêm xóa sửa dữ liệu.
Tầng View: chứa các code tạo giao diện tương tác với người dùng, dữ liệu được vẽ ra nhu
thế nào
Tầng Controller: chứa các code điều khiển dòng dữ liệu (flow control), gắn kết tầng
Mode và tầng View lại với nhau.
Ứng dụng được chia thành các layer như thế sẽ tăng tính reuse và dễ dàng mở rộng.
Chẳng hạn nếu chúng ta muốn ứng dụng có thể truy xuất trên di dộng, chúng ta chỉ cần

tạo một tầng view mới riêng cho di động, tầng model và controller không thay dổi. Hay
nếu chúng ta muốn thay đổi database, việc đó cũng dễ dàng hơn, chỉ cần ta tạo tầng
model mới, phần view và controller không bị ảnh hưởng.
Mơ hình thể hiện quan hệ của ba lớp trong ứng dụng web:


Hình 1: Mơ hình 3 tầng của một ứng dụng web
Cịn đây là mơ hình của một dịch vụ ứng dụng web:

Hình 2. Mơ hình dịch vụ ứng dụng web đơn giản

1.2.2

Giao diện của một ứng dụng web

Giao diện web đặt ra rất ít giới hạn khả năng người dùng. Thông qua Java, JavaScript,
DHTML, Flash và những công nghệ khác, những phương pháp chỉ ứng dụng mới có như
vẽ trên màn hình, chơi nhạc, và dùng được bàn phím và chuột tất cả đều có thể thực hiện
được. Những kỹ thuật thông thường như kéo thả cũng được hỗ trợ bởi những công nghệ
trên.
1.2.3

Chức năng cơ bản của các ứng dụng web

Ứ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..



Tất cả dữ liệu như vậy cần phải được đóng gói, lưu trữ, xử lý và truyền vận theo một cách
nào đó, có thể sử dụng ngay hoặc vào một ngày nào đó sau này. Các ứng dụng Web, trong
lĩnh vực đăng ký, đệ trình, truy vấn, đăng nhập, bán hàng và hệ thống quản lý nội dung
chính là các website widget cho phép thực hiện tất cả công việc mong muốn.
Web chính là là yếu tố cơ bản giúp doanh nghiệp tăng cường hình ảnh trực tuyến của
mình trên thế giới mạng, tạo ra và duy trì nhiều mối quan hệ đem lại lợi nhuận lâu dài với
khách hàng tiềm năng và khách hàng hiện tại.
Website ngày nay khác xa so với kiểu đồ họa và văn bản tĩnh của thế kỷ mười chín hay
thời kỳ trước đó. Các trang Web hiện đại cho phép người dùng lấy xuống nội dung động
cá nhân hóa theo thiết lập và tham chiếu riêng. Hơn nữa chúng cũng có thể chạy các
script trên máy khách, có thể “thay đổi” trình duyệt Internet thành giao diện cho các ứng
dụng như thư điện tử, phần mềm ánh xạ tương tác (Yahoo Mail, Google Maps).
Quan trọng nhất là website hiện đại cho phép đóng gói, xử lý, lưu trữ và truyền tải dữ liệu
khách hàng nhạy cảm (như thông tin cá nhân, mã số thẻ tín dụng, thơng tin bảo mật xã
hội …) có thể dùng ngay hoặc dùng định kỳ về sau. Và, điều này được thực hiện qua các
ứng dụng Web. Đó có thể là thành phần webmail (thư điện tử), trang đăng nhập, chương
trình hỗ trợ và mẫu yêu cầu sản phẩm hay hoạt động mua bán, hệ thống quản lý nội dung,
phát triển website hiện đại, cung cấp cho các doanh nghiệp phương tiện cần thiết để liên
lạc với khách hàng tương lai và khách hàng hiện tại.

1.2.4

Nguyên tắc hoạt động của một ứng dụng web

Trong dạng tính tốn chủ-khách trước đây, mỗi ứng dụng có chương trình khách riêng
của nó sẽ phục vụ như giao diện người dùng và phải được cài đặt riêng rẽ trên mỗi máy
tính cá nhân của người dùng. Sự nâng cấp phần máy chủ của ứng dụng sẽ cần nâng cấp
tất cả máy khách đã được cài trên mỗi máy trạm người dùng, thêm vào đó là chi phí hỗ
trợ và giảm năng suất.

Ứng dụng web linh hoạt tạo ra một loạt các tài liệu Web ở định dạng chuẩn được hỗ trợ
bởi những trình duyệt phổ biến như HTML/XHTML. Ngơn ngữ kịch bản phía người
dùng ở dạng ngôn ngữ chuẩn như JavaScript thường được thêm vào để có thêm những
yếu tố động trong giao diện người dùng. Nói chung, mỗi trang Web đơn lẻ được gửi tới
người dùng như một tài liệu ổn định, nhưng thứ tự các trang có thể cung cấp cảm giác
trực quan, khi những gì người dùng nhập vào sẽ được trả về thông qua thành phần mẫu
Web được nhúng vào trong đánh dấu trang. Trong quá trình giao dịch đó, trình duyệt Web
sẽ thơng dịch và hiển thị trang, và hoạt động như một người dùng chung cho bất kỳ ứng
dụng Web nào.


Theo mơ hình MVC (Model - View - Controller) :

Hình 3. Mô tả hoạt động của một ứng dụng web
Các bước hoạt động của một ứng dụng web đơn giản:
Bước 1: Browser tạo một HTTP Request gửi tới ứng dụng web.
Bước 2: Controller chính của Struts là class ActionServlet sẽ bắt request này, phân
tích URL của nó, và dựa vào file struts-config.xml để gửi request này tới Action
class tương ứng.
Bước 3: Action class là một class của Struts Framework. Ứng dụng của chúng ta
thường extends từ class này và viết code để sử lý những business tương ứng.
Chẳng hạn ta sẽ có một LoginAction để xử lý việc user login, logout.
Bước 4: Action class có thể truy xuất, cập nhật database nếu cần thiết.
Bước 5: Khi Action class thực hiện việc xử lý business xong, nó sẽ gửi yêu cầu
forward/redirect, cùng với dữ liệu (nếu có) về controller.
Bước 6: Controller chuyển control đến trang JSP tương ứng ở tầng view. Nếu
trang JSP này có sử dụng dữ liệu, controller sẽ cung cấp cho nó (đây chính là dữ
liệu mà action đã tạo ra và đua cho controller.
Bước 7: Sau khi trang JSP đã chuẩn bị xong, Controller tạo một HTTP Response
gửi về cho browser, để browser hiển thị ra màn hình.


1.2.5

Vấn đề bảo mật ứng dụng web


Khi mà ứng dụng web phát triển rất nhanh về mọi mặt, khả năng ứng dụng một cách rộng
rãi thì vấn đề bảo mật cho ứng dụng web cũng được chú trọng hơn. Mặc dù không thể
phủ nhận những cải tiến nâng cao đáng kể hiện nay, nhưng vấn đề về bảo mật trong ứng
dụng Web vẫn không ngừng tăng lên. Nguyên nhân có thể xuất phát từ các đoạn mã
không phù hợp. Nhiều điểm yếu nghiêm trọng hay các lỗ hổng cho phép hacker xâm
nhập thẳng và truy cập vào cơ sở dữ liệu tách lấy dữ liệu nhạy cảm. Nhiều cơ sở dữ liệu
chứa thông tin giá trị (như chi tiết cá nhân, thơng tin tài chính) khiến chúng trở thành đích
nhắm thường xuyên của hầu hết hacker. Mặc dù hoạt động tấn công phá hoại website
doanh nghiệp vẫn diễn ra thường xuyên, nhưng bây giờ tin tặc thích tăng cường khả năng
truy cập dữ liệu nhạy cảm nằm trên trình chủ chứa database hơn vì lợi nhuận khổng lồ từ
các vụ mua bán dữ liệu đem lại.

Hình 4: Mơ hình hoạt động của một ứng dụng web
Trong khung hoạt động mơ tả ở trên, bạn có thể thấy thật dễ dàng cho một hacker truy
cập nhanh chóng thông tin nằm trên cơ sở dữ liệu chỉ với một chút sáng tạo. Nếu may
mắn hơn chúng có thể gặp lỗ hổng xuất phát từ sự cẩu thả hay lỗi người dùng trên các
ứng dụng Web.
Như đã nói, website phụ thuộc vào cơ sở dữ liệu để phân phối thông tin được yêu cầu cho
người dùng. Nếu ứng dụng Web khơng an tồn (như có lỗ hổng, gặp phải một kiểu kỹ
thuật hacking nào đó), tồn bộ cơ sở dữ liệu chứa thông tin nhạy cảm sẽ gặp nguy hiểm
nghiệm trọng.
Một số hacker có thể chèn mã độc hại vào ứng dụng Web có lỗ hổng để lừa đảo người
dùng và dẫn họ tới website phishing. Kỹ thuật này được gọi là Cross-site Scripting, có thể
được dùng ngay cả khi bản thân Web Server và nơi chứa cơ sở dữ liệu khơng có lỗ hổng

nào.
Một cuộc nghiên cứu gần đây chỉ ra rằng 75% các cuộc tấn công mạng được thực hiện ở
mức ứng dụng Web.Website và các ứng dụng Web liên quan luôn phải sẵn sàng 24/7 để


cung cấp dịch vụ theo yêu cầu khách hàng, yêu cầu từ phía nhân viên, nhà cung cấp và
nhiều người liên quan khác.
ZF Tường lửa, SSL không thể bảo vệ ứng dụng Web trước mọi hoạt động hacking, đơn
giản vì truy cập vào website phải để ở chế độ public để bất kỳ ai cũng có thể ghé thăm
website được. Tất cả hệ thống cơ sở dữ liệu hiện đại (như Microsoft SQL Server, Oracle,
MySQL) đều có thể truy cập qua một số cổng cụ thể (như cổng 80, 443). Nếu muốn, một
người nào đó có thể kết nối trực tiếp tới cơ sở dữ liệu một cách hiệu quả khi vượt qua cơ
chế bảo mật của hệ điều hành. Các cổng này để mở nhằm cho phép liên lạc với hoạt động
giao thơng mạng hợp pháp, và do đó cũng hình thành nên lỗ hổng lớn nguy hiểm.
Các ứng dụng Web thường truy cập dữ liệu cuối như cơ sở dữ liệu khách hàng, điều khiển
dữ liệu có giá trị và do đó rất khó để có thể tuyệt đối an tồn. Lúc này truy cập dữ liệu
thường khơng kèm script cho phép đóng gói và truyền tải dữ liệu. Nếu một hacker nhận
ra điểm yếu trong một script, anh ta có thể dễ dàng mở lại lưu lượng sang khu vực khác
và chia lẻ bất hợp pháp chi tiết cá nhân người dùng, dù đôi khi không hề chủ tâm làm
điều đó
Hầu hết ứng dụng Web đều là tự tạo, do đó ít có được các kiểm tra trình độ hơn so với
phần mềm cùng loại. Do đó các ứng dụng tùy biến thường dễ bị tấn công hơn.
Có thể nói ứng dụng Web là một cổng vào (gateway) của cơ sở dữ liệu, nhất là các ứng
dụng tùy biến. Chúng không được phát triển với mức bảo mật tốt nhất vì khơng phải qua
các kiểm tra bảo mật thơng thường. Nói chung, bạn cần trả lời câu hỏi: “Phần nào trên
website chúng ta nghĩ là an toàn nhưng lại mở cửa cho các cuộc tấn công?” và “Dữ liệu
nào chúng ta đem vào một ứng dụng khiến nó thực hiện một số điều khơng nên làm?”.Đó
là cơng việc của phần mềm rà soát lỗ hổng Web.
Hiện nay , hacker có rất nhiều cách tấn cơng một ứng dụng web từ các kĩ thuật cơ bản
cho đến những kĩ thuật địi hỏi kĩ thuật và cơng nghệ cao cao. Các công cụ(tool) hỗ trợ ra

đời ngày càng nhiều , hỗ trợ rất nhiều cho người quản trị mạng , tìm ra những lỗ hổng để
có bản vá lỗi kịp thời nhưng đồng thời nó cũng là một con dao hai lưỡi. Hacker có thể
dùng những tool này để phát hiện những lỗ hổng của một ứng dụng web và từ đó sẽ có
cách tấn cơng tương ứng vào lỗ hổng này gây ra rất nhiều tổn thất.

1.3 Các khái niệm thuật ngữ liên quan
1.3.1 Các khái niệm chung về ứng dụng web

Web browser (trình duyệt web) là các ứng dụng phần mềm cho phép người dùng truy vấn
dữ liệu và tương tác với nội dung nằm trên trang Web bên trong website.
Trang Web là tĩnh; người dùng gửi yêu cầu một tài nguyên nào đó, và server sẽ trả về tài
ngun đó. Các trang Web khơng có gì hơn là một văn bản được định dạng và phân tán.


Đối với các trình duyệt, thì các trang Web tĩnh khơng phải là các vấn đề khó khăn, và
trang Web lúc đầu chỉ để thông tin về các sự kiện, địa chỉ, hay lịch làm việc qua Internet
mà thôi, chưa có sự tương tác qua các trang Web.
Web "ĐỘNG" là thuật ngữ được dùng để chỉ những website được hỗ trợ bởi một phần
mềm cơ sở web, nói đúng hơn là một chương trình chạy được với giao thức http. Thực
chất, website động có nghĩa là một website tĩnh được "ghép" với một phần mềm web (các
modules ứng dụng cho Web). Với chương trình phần mềm này, người chủ website thực
sự có quyền điều hành nó, chỉnh sửa và cập nhật thơng tin trên website của mình mà
khơng cần phải nhờ đến những người chuyên nghiệp.
Tên miền (Domain name) là định danh của website trên Internet. Tên miền thường gắn
kèm với tên công ty và thương hiệu của doanh nghiệp. Tên miền là duy nhất và được cấp
phát cho chủ thể nào đăng ký trước.
-Tên miền có hai loại:
+ Tên miền quốc tế dạng: www.tencongty.com (.net, .biz .org, .info...).
+ Tên miền quốc gia dạng: www.tencongty.com.vn (hoặc .net.vn, .biz.vn .org.vn,
.gov.vn...)

+ Web hosting là nơi khơng gian trên máy chủ có cài dịch vụ Internet như ftp,www, nơi
đó bạn có thể chứa nội dung trang web hay dữ liệu trên không gian đó. Lý do bạn phải
thuê Web Hosting để chứa nội dung trang web, dịch vụ mail, ftp, vì những máy tính đó
ln có một địa chỉ cố định khi kết nối vào Internet (đó là địa chỉ IP) , cịn như nếu bạn
truy cập vào internet như thông thường hiện nay thông qua các IPS (Internet Service
Provider - Nhà cung cấp dịch vụ Internet) thì địa chỉ IP trên máy bạn ln bị thay đổi, do
đó dữ liệu trên máy của bạn không thể truy cập được từ những máy khác trên Internet.
1.3.2

Thuật ngữ , khái niệm về các công cụ liên quan đến ứng dụng web

CGI: Giải pháp đầu tiên để làm các trang Web động là Common Gateway Interface
(CGI). CGI cho phép tạo các chương trình chạy khi người dùng gửi các yêu cầu. Giả sử
khi cần hiển thị các các mục để bán trên Web site – với một CGI script ta có thể truy nhập
cơ sở dữ liệu sản phẩm và hiển thị kết quả. Sử dụng các form HTML đơn giản và các
CGI script, có thể tạo các “cửa hàng” ảo cho phép bán sản phẩm cho khách hàng qua một
trình duyệt. CGI script có thể được viết bằng một số ngôn ngữ từ Perl cho đến Visual
Basic.
Applet:Tháng 5/1995, John Gage của hãng Sun và Andressen (nay thuộc Netscape
Communications Corporation) đã công bố một ngôn ngữ lập trình mới có tên Java.
Netscape Navigator đã hỗ trợ ngôn ngữ mới này, và một con đường mới cho các trang
Web động được mở ra, kỷ nguyên của applet bắt đầu.


Applet cho phép các nhà phát triển viết các ứng dụng nhỏ nhúng vào trang Web. Khi
người dùng sử dụng một trình duyệt hỗ trợ Java, họ có thể chạy các applet trong trình
duyệt trên nền máy ảo Java Virtual Machine (JVM). Dù rằng applet làm được nhiều điều
song nó cũng có một số nhược điểm: thường bị chặn bởi việc đọc và ghi các file hệ
thống, không thể tải các thư viện, hoặc đôi khi không thể thực thi trên phía client. Bù lại
những hạn chế trên, applet được chạy trên một mơ hình bảo mật kiểu sandbox bảo vệ

người dùng khỏi các đoạn mã nguy hiểm. Có những lúc applet được sử dụng rất nhiều,
nhưng nó cũng có những vấn đề nảy sinh: đó là sự phụ thuộc vào máy ảo Java JVM, các
applet chỉ thực thi khi có mơi trường thích hợp được cài đặt phía client, hơn nữa tốc độ
của các applet là tươngđối chậm vì thế applet không phải là giải pháp tối ưu cho Web
động.
JavaScript:Cùng thời gian này, Netscape đã tạo ra một ngôn ngữ kịch bản gọi là
JavaScript. JavaScript được thiết kế để việc phát triển dễ dàng hơn cho các nhà thiết kế
Web và các lập trình viên khơng thành thạo Java. (Microsoft cũng có một ngơn ngữ kịch
bản gọi là VBScript). JavaScript ngay lập tức trở thành một phương pháp hiệu quả để tạo
ra các trang Web động.
Việc người ta coi các trang như là một đối tượng đã làm nảy sinh một khái niệm mới gọi
là Document Object Model (DOM). Lúc đầu thì JavaScript và DOM có một sự kết hợp
chặt chẽ nhưng sau đó chúng được phân tách. DOM hoàn toàn là cách biểu diễn hướng
đối tượng của trang Web và nó có thể được sửa đổi với các ngôn ngữ kịch bản bất kỳ như
JavaScript hay VBScript.
Tổ chức World Wide Web Consortium (W3C) đã chuẩn hóa DOM, trong khi European
Computer Manufacturers Association (ECMA) phê duyệt JavaScript dưới dạng đặc tả
ECMAScript.
JSP/Servlet, ASP và PHP:Cùng với Java, Sun đồng thời đưa ra một công nghệ mới gọi là
servlet. Các đoạn mã Java sẽ khơng chạy phía client như với applet; chúng sẽ được chạy
trên một ứng dụng phía server. Servlet cũng đồng thời phục vụ các CGI script. Servlet là
một bước tiến lớn, nó đưa ra một thư viện hàm API trên Java và một thư viện hoàn chỉnh
để thao tác trên giao thức HTTP.
JavaServer Page (JSP) là một công nghệ lập trình Web của Sun, cùng với nó là một công
nghệ khác của Microsoft - Active Server Pages (ASP), JSP là cơng nghệ địi hỏi một trình
chủ hiểu được Java. Microsoft đã nghiên cứu các nhược điểm của servlet và tạo ra ASP
dễ dàng hơn để thiết kế các trang web động. Microsoft thêm các bộ công cụ rất mạnh và
sự tích hợp rất hồn hảo với các Web server. JSP và ASP có những nét tương đương vì
chúng đều được thiết kế để phân tách qua trình xử lí khỏi q trình biểu diễn. Có sự khác
biệt về kỹ thuật, song cả hai đều cho phép các nhà thiết kế Web tập trung vào cách bố trí

(layout) trong khi các nhà phát triển phần mềm thì tập trung vào các kỹ thuật lập trình
logic.


Flash:Năm 1996, FutureWave đã đưa ra sản phẩm FutureSplash Animator. Sau đó
FutureWave thuộc sở hữu của Macromedia, và cơng ty này đưa ra sản phẩm Flash. Flash
cho phép các nhà thiết kế tạo các ứng dụng hoạt họa và linh động. Flash khơng địi hỏi
các kỹ năng lập trình cao cấp và rất dễ học. Cũng giống như các nhiều giải pháp khác
Flash yêu cầu phần mềm phía client. Chẳng hạn như gói Shockwave Player plug-in có thể
được tích hợp trong một số hệ điều hành hay trình duyệt.
DHTML:Khi Microsoft và Netscape đưa ra các version 4 của các trình duyệt của họ, thì
các nhà phát triển Web có một lựa chọn mới: Dynamic HTML (DHTML). DHTML
không phải là một chuẩn của W3C; nó giống một bộ cơng cụ thương mại hơn. Trong thực
tế nó là một tập hợp gồm HTML, Cascading Style Sheets (CSS), JavaScript, và DOM.
Tập hợp các công nghệ trên cho phép các nhà pháp triển sửa đổi nội dung và cấu trúc của
một trang Web một cách nhanh chóng. Tuy nhiên, DHTML yêu cầu sự hỗ trợ từ các trình
duyệt. Mặc dù cả Internet Explorer và Netscape hỗ trợ DHTML, nhưng các thể hiện của
chúng là khác nhau, các nhà phát triển cần phải biết được loại trình duyệt nào mà phía
client dùng. DHTML thật sự là một bước tiến mới, nhưng nó vẫn cần một sự qui chuẩn
để phát triển. Hiện nay DHTML vẫn đang trên con đường phát triển mạnh.
XML:Kể từ khi ra đời vào giữa năm 1990, eXtensible Markup Language (XML) của
W3C dẫn xuất của SGML đã trở nên rất phổ biến. XML có mặt ở khắp nơi, Microsoft
Office 12 cũng sẽ hỗ trợ định dạng file XML.Ngày nay chúng ta có rất nhiều dạng dẫn
xuất của XML cho các ứng dụng Web (tất nhiên là có cả XHTML): XUL của Mozilla;
XAMJ, một sản phẩm mã nguồn mở trên nền Java; MXML từ Macromedia; và XAML
của Microsoft.
1.4 Các khái niệm và thuật ngữ liên quan đến tấn công và bảo mật ứng dụng web

1.4.1 Khái niệm hacker
Khái niệm hacker có từ những 50, 60 của thế kỉ trước , và cho đến nay trải qua một thời

gian phát triển khá dài hacker chia làm 4 loại:
- Hacker mũ trắng: là những chuyên gia lập trình chuyên tìm các lỗi của phần mềm với
mục đích sửa chữa, xây dựng hệ thống an tồn hơn.
- Hacker mũ đen: đối lập với hacker mũ trắng, là những hacker phá hoại và trục lợi cho
mình.
- Hacker mũ xanh/samurai: là những chuyên gia lập trình tài năng, được các hãng như
Microsoft mời về làm việc chuyên tìm lỗi cho phần mềm của họ.
- Hacker mũ xám hay mũ nâu: là những người đôi khi làm công việc của hacker mũ
trắng nhưng vẫn làm công việc của hacker mũ đen.


- Dù tự nhận mình là giới nào, họ vẫn đang làm công việc xâm nhập hệ thống thông qua
những lỗ hổng bảo mật. Vì vậy tơi sẽ sủ dụng thuật ngữ hacker để chỉ nhũng người tấn
công ứng dụng web.
1.4.2 Giao thức HTTP và HTTPS
HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu văn bản).
Nó là giao thức cơ bản mà World Wide Web sử dụng. HTTP xác định cách các thông
điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video,…) được định dạng và truyền tải
ra sao, và những hành động nào mà các Web server và các trình duyệt Web phải làm để
đáp ứng các lệnh. Khi gõ một địa chỉ Web URL vào trình duyệt Web, một lệnh HTTP sẽ
được gửi tới Web server để ra lệnh và hướng dẫn nó tìm đúng trang Web được u cầu và
kéo về mở trên trình duyệt Web.
Tóm lại, HTTP là giao thức truyền tải các file từ một Web server vào một trình duyệt
Web để người dùng có thể xem một trang Web đang hiện diện trên Internet. HTTP là một
giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet).
HTTP header là phần đầu (header) của thơng tin mà trình khách và trình chủ gữi cho
nhau. Những thơng tin của trình khách gữi cho trình chủ được gọi là HTTP requests (u
cầu) cịn trình chủ gữi cho trình là HTTP responses (trả lời). Thơng thường một HTTP
header gồm nhiều dòng, mỗi dòng dựa trên tham số và giá trị. Một số tham số có thể
dùng trong cả header yêu cầu và header trả lời, còn số khác chỉ được dùng riêng trong

từng loại.
GET /tintuc/homnay.asp HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/lienket.asp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Encoding: gzip, deflate
Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST), địa
chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP .
Tiếp theo là các tham số. Chẳng hạn như :



Accept Language: cho biết ngơn ngữ dùng trong trang web.
Host: cho biết địa chỉ của máy chủ.





Referer: Cho biết địa chỉ của trang web tham chiếu tới.
Header của HTTP request sẽ kết thúc bằng một dòng trống.

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html

Set-Cookie:
ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ;
path=/
Cache-control: private
<HTML>
<BODY>
...
Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng, mã trạng thái (200)
và trạng thái (OK) Tiếp theo là các tham số. Tiếp theo là một dòng trống để báo hiệu kết
thúc header, tiếp theo là phần thân của HTTP response.
HTTPS (Securety HTTP), là một sự kết hợp giữa giao thức HTTP và giao thức bảo mật
SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet. Các kết nối
HTTPS thường được sử dụng cho các giao dịch thanh toán trên World Wide Web và cho
các giao dịch nhạy cảm trong các hệ thống thông tin công ty, trong đó dữ liệu cần phải
được an tồn. HTTPS khơng nên nhầm lẫn với Secure HTTP (S-HTTP) quy định trong
RFC 2660.
Theo hai khái niệm ở trên, ta có thể thấy nếu trang Web có địa chỉ bắt đầu bằng “ http://
” thì có nghĩa rằng trang Web khơng an tồn. Nói cách khác, một người nào đó có thể
nghe lén những gì trao đổi với trang Web và có thể lấy những dữ kiện gửi đi từ máy của
bạn đến trang Web như tên tuổi, địa chỉ, số thẻ tín dụng,… Nhưng nếu địa chỉ của trang
Web bắt đầu bằng “https:// ” thì điều này có nghĩa là liên lạc an tồn với server của trang
Web và người ta khơng thể nghe lén và trộm những thông tin gửi đi.
1.4.3 Session
HTTP là giao thức hướng đối tượng phi trạng thái, nó khơng lưu trữ trạng thái làm việc
giữa trình chủ và trình khách . Điều này gây khó khăn cho việc quản lý một số ứng dụng


web bởi vì trình chủ khơng biết rằng trước đó trình khách đã ở trạng thái nào. Để giải
quyết vấn đề này , người ta đưa ra khái niệm SESSION(phiên làm việc) vào giao thức
HTTP.

SessionID là một chuỗi để chứng thực phiên làm việc . Một số trình chủ sẽ cấp
phát session cho người dùng khi họ xem trang web trên trình chủ.
-

Để duy trì phiên làm việc sessionID thường được lưu trữ vào :

+ Biến trên URL
+ Biến ẩn from
+ Cookie
-

Phiên làm việc chỉ tồn tại trong khoảng thời gian cho phép, thời gian này được quy
định tại trình chủ hoặc bởi ứng dụng thực thi.Trình chủ tự động giải phóng phiên
làm việc để khơi phục tài nghun hệ thống.

1.4.4 Cookie
Là một phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình duyệt người
dùng.
Các cookie được lưu trũ dưới dạng những file dữ liệu nhỏ dạng text , được ứng dụng tạo
ra để lưu trữ truy tìm nhận biết những người dùng đã ghé thăm trang web và những
vùng họ đã ngang qua trang. Những thơng tin nay có thể bao gơm thơng tin người dùng,
tài khoản, mật khẩu…cookie được trình duyệt của người dùng chấp nhận lưu trên đĩa
cứng của mình . Nhiều trình duyệt khơng tự động lưu trữ cookie mà cịn phụ thuộc vào
người dùng có chấp nhận lưu nó hay khơng.
Những lần truy cập sau vào trang web đó ứng ứng dụng có thể sử dụng lại những thơng
tin trong cookie(các thôgn tin tai khoản liên quan) mà người dùng không cần phải đăng
nhập hay cung cấp thêm thông tin gì cả.
Có nhiều cách phân loại cookie, phân loại theo đối tượng thiết lập của cookie.thì cookie
chia làm 2 loại: Cookie của bên thứ nhất là cookie được thiết lập bởi tên miền trang web
được liệt kê trong thanh địa chỉ. Cookie của bên thứ ba đến từ các nguồn tên miền khác

có các mục, chẳng hạn như quảng cáo hoặc hình ảnh, được nhúng vào trang.
1.4.5 Proxy
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặc biệt hoặc một
tập những nghi thức thực thi trên dual_homed host hoặc basion host. Những chương trình
client của người sử dụng sẽ qua trung gian proxy server thay thế cho server thật sự mà
người sử dụng cần giao tiếp.


Proxy server cần xác định những yêu cầu từ client và quyết định đáp ứng hay không đáp
ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật thay cho client và
tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như trả lời server đến client.
Vì vậy proxy server giống cầu nối trung gian giữa server và client.
1.4.6 Firewall
Một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng là bức tường lửa
- Firewall (hoạt động dựa trên gói IP do đó kiểm sốt việc truy nhập của máy người sử
dụng). Nó có vai trị như là lớp rào chắn bên ngồi một hệ thống mạng, vì chức năng
chính của firewall là kiểm sốt luồng thơng tin giữa các máy tính. Có thể xem firewall
như một bộ lọc thơng tin, nó xác định và cho phép một máy tính này có được truy xuất
đến một máy tính khác hay khơng, hay một mạng này có được truy xuất đến mạng kia
hay khơng.
Người ta thường dùng firewall vào mục đích:


Cho phép hoặc cấm những dịch vụ truy xuất ra ngồi.



Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập vào trong.




Kiểm sốt địa chỉ truy nhập, cấm địa chỉ truy nhập.

CHƯƠNG 2. CÁC HÌNH THỨC TẤN CƠNG VÀ GIẢI PHÁP BẢO MẬT WEBSITE
2.1 MỘT SỐ KỸ THUẬT TẤN CÔNG CỦA HACKER VÀO LỖ HỔNG TRÊN
TRANG WEB VÀ BIỆN PHÁP PHỊNG CHỐNG
2.1.1 Kiểm sốt truy cập ( Web Access Control )
Thâm nhập hệ thống qua cửa sau (Back door).
Trong quá trình thiết kế ứng dụng, những người phát triển ứng dụng có thể cài một “cửa
sau” (back door) để sau này có thể thâm nhập vào hệ thống một cách dễ dàng.
2.1.2 Ấn định phiên làm việc ( Session Fixation )
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi một
session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập vào hệ thống thành
công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở thành người dùng hợp lệ.
2.1.3 Đánh cắp phiên làm việc
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ sau khi nạn nhân đã
đăng nhập vào hệ thống bằng cách giải mã session ID của họ được lưu trữ trong cookie
hay tham số URL, biến ẩn của form.


2.1.4 Lợi dụng thiếu sót trong việc kiểm tra dữ liệu hợp lệ ( Input validation )
Hacker lợi dụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho hệ thống
phải thực thi đoạn lệnh đó hay bị phá vỡ hồn tồn.
2.1.5 Kiểm tra tính đúng đắn của dữ liệu bằng ngơn ngữ phía trình duyệt
Do ngơn ngữ phía trình duyệt ( JavaScript, VBScript..) đuợc thực thi trên trình duyệt nên
hacker có thể sửa đổi mã nguồn để có thể vơ hiệu hóa sự kiểm tra.
2.1.6 Tràn bộ đệm ( Buffer OverFlow )
Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu được cấpphát
khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay vào đó phải
thực thi một đoạn mã bất kì do hacker đưa vào hệ thống. Nghiêm trọng hơn nếu ứng dụng

được cấu hình để thực thi với quyền root trên hệ thống.
2.1.7 Mã hóa URL ( URL Encoding )
Lợi dụng chuẩn mã hóa những kí tựđặc biệt trên URL mà hacker sẽ mã hố tựđộng
những kí tự bất hợp lệ-những kí tự bị kiểm tra bằng ngôn ngữ kịch bản-để vượt qua vịng
kiểm sốt này.
2.1.8 Kí tự Meta ( Meta – characters sử dụng những ký tự đặc biệt )
Hacker có thể chèn thêm vào dữ liệu gửi những kí tự trong chuỗi câu lệnh như <script>
trong kĩ thuật XSS, ‘ -- trong SQL….để thực thi câu lệnh.
2.1.9 Vượt qua đường dẫn ( Path Traversal )
Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để trả kết quả về cho
trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì trên hệ thống.
2.1.10 Chèn mã lệnh thực thi trên trình duyệt nạn nhân ( Cross – Site Scripting)
Đây là kĩ thuật tấn công chủ yếu nhằm vào thơng tin trên máy tính của người dùng hơn là
vào hệ thống máy chủ. Bằng cách thêm một đoạn mã bất kì ( thường được lập trình bằng
ngơn ngữ kịch bản như JavaScript, VBScript…), hacker có thể thực hiện việc đánh cắp
thông tin quan trọng như cookie để từ đó trở thành người dùng hợp lệ của ứng dụng…dựa
trên những thông tin đánh cắp này. Cross- Site scripting cũng là một kiểu tấn công
“session hacking”.
2.1.11 Thêm câu lệnh hệ thống ( OS Command Injection )
Khả năng thực thi được những câu lệnh hệ thống hay những đoạn mã được thêm vào
trong những tham số mà không có sự kiểm tra chặt chẽ như tham số của form, cookies,
yêu cầu HTTP Header, và những dữ liệu nguy hiểm trong những tập tin được đưa lên
trình chủ. Thành cơng trong kĩ thuật này giúp hacker có thể thực thi được những câu lệnh
hệ thống với cùng quyền của trình chủ.


2.1.12 Kí tự rỗng ( Null Characters )
Lợi dụng chuỗi kí tự thường kết thúc bằng \0 mà hacker thường thêm vào để đánh lừa
ứng dụng vì với những ứng dụng sử dụng chương trình dịch như C++ thì C++cho rằng \0
là dấu kết thúc chuỗi.

2.1.13 Chèn câu truy vấn SQL ( SQL Injection )
Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề kiểm tragiá trị
nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn hay những giá trị không
hợp lệ để dễ dàng đăng nhập vào hệ thống.
2.1.14 Ngơn ngữ phía máy chủ ( Server side includes )
Là khả năng thêm vào những câu lệnh thuộc hệ thống như nhúng file (includefile), truy
xuất cơ sở dữ liệu (jdbc)…khiến cho hacker có cơ hội truy xuất đến file, cơ sở dữ liệu…
mà bình thường khơng thể xem được trên website.
2.1.15 Thao tác trên tham số truyền ( Parameter manipulation )
Những thơng tin trao đổi giữa trình chủ và trình duyệt được lưu trữ trong nhữngbiến như
biến trên URL, biến ẩn form, cookie…Bởi vì việc kiểm sốt biến chưa được quan tâm
đúng mức nên hacker có thể lợi dụng sửa đổi giá trị biến để đánh cắp phiên làm việc của
người dùng hay thay đổi giá trị một món hàng….
2.1.16 Từ chối dịch vụ ( DOS )
Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất định
khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ.
2.2 Các cách triển khai tấn công ứng dụng Web
2.2.1 Thao tác trên tham số
Thao tác trên tham số truyền là kĩ thuật thay đổi thông tin quan trọng trên cookie, URL
hay biến ẩn của form. Kĩ thuật Cross-Site Scripting, SessionID, SQL Injection,
BufferOverflow…cũng cần dùng đến các tham số này để hồn thiện các bước tấn cơng
của hacker. Có thể nói các tham số truyền là đầu mối cho mọi hoạt động của hacker trong
q trình tấn cơng ứng dụng. Vì thế đây là nội dung chương đầu tiên được đề cập trong
phần này , mục đích cũng là để hỗ trợ tốt hơn phần trình bày các phần kế tiếp.
2.2.2 Thao tác trên URL
- Khái niệm: Khi nhập một form HTML thì kết quả sẽ được gửi đi theo 2 cách: GET hay
POST. Nếu dung GET, thì tất cả các tên biến và giá trị của nó sẽ xuất hiện trong chuỗi
URL.
- Cách khắc phục: Ứng dụng sử dụng cơ chế bảng băm. Sau khi người dùng chứng thực
thành công với một username, ứng dụng sẽ sinh ra một khóa tương ứng. Khóa này sẽ

được lưu trên server cùng với biến username trong đối tượng bảng băm. Mỗi khi người
dùng kết nối tới ứng dụng, khóa và username này sẽ được gửi đi và so sánh với khóa và


username trong bảng băm. Nếu tương ứng với bảng ghi trong dữ liệu thì hợp lệ. Cịn nếu
khơng thì server biết rằng người dùng đã thay đổi.
2.3 Thao tác trên biến ẩn form
2.3.1 Khái niệm
Thơng tin có thể được chuyển đổi thông qua một biến ẩn của form, gọi là Hidden Form
Field. Biến ẩn form không hiển thị trên màn hình trình duyệt nhưng người dùng có thể
tìm thấy nội dung của nó trong “ view source ”, vì thế đây là một điểm yếu để hacker lợi
dụng bằng cách lưu nội dung trang web xuống trình duyệt, thay đổi nội dung trang và gửi
đến trình chủ.
2.3.2 Một số biện pháp khắc phục
Chỉ nên sử dụng biến ẩn của form để hiển thị dữ liệu trên trình duyệt, khơng được sử
dụng giá trị của biến để thao tác trong xử lí ứng dụng.
Dùng biến HTTP_REFERER để kiểm tra nguồn gốc của yêu cầu gửi đến, tuy nhiên
hacker có thể sử dụng Proxy để che dấu nguồn gốc thực của nó, vì vậy cũng khơng nên
q tin tưởng biến HTTP_REFERER để kiểm tra.
Ghép tên và giá trị của biến ẩn thành một chuỗi đơn. Sử dụng thuật toán mã hoá MD5
hoặc một kiểu hash một chiều khác để tổng hợp chuỗi đó và lưu nó vào một hidden field
gọi là “Chuỗi mẫu”.
Khi giá trị trong form được gửi đi, các thao tác như trên được thực hiện lại với cùng một
khoá mà ta định trước. Sau đó đem so sánh với“Chuỗi mẫu”, nếu chúng khơng khớp nhau
thì chứng tỏ giá trị trong biểu mẫu đã bị thay đổi.
Dùng một sessionID để tham chiếu đến thông tin được lưu trữ trên cơ sở dữ liệu.
2.4 Kỹ thuật tấn công SQL Injection
2.4.1 SQL Injection là gì?
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ỡ giữ liệu, web server 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à 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ó tồn quyền trên cơ sỡ dữ liệu
của ứng dụng, thậm chí là server mà nó ứ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.
2.4.2 Các dạng tấn cơng SQL Injection
Có bốn dạng thơng thường bao gồm : vượt qua kiểm tra lúc đăng nhập (authorization
bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụng các storedprocedures [2],[3]…
a) Dạng tấn công vượt qua kiểm tra đăng nhập
Với dạng tấn công này tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi
khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. Thông thường
để cho phép người dùng truy cập vào các trang web được bảo mật, hệ thống thường xây
dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật
khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật
khẩu có hợp lệ hay khơng để quyết định cho phép hay từ chối thực hiện tiếp. Ví dụ, trong
trường hợp sử dụng ASP, người ta có thể dùng 2 trang: 1 trang HTML để hiển thị Form
nhập liệu và 1 trang ASP để xử lý thơng tin nhập vào từ phía người dùng như sau:
– Trang nhập liệu: login.html

<form action=”ExecLogin.asp” method=”post”>
Username: <input type=”text” name=”txtUsername”>

Password: <input type=”password” name=”txtPassword”>

<input type=”submit”>
</form>
– Trang xử lý nhập liệu: execlogin.asp
<%
Dim p_strUsername, p_strPassword, objRS, strSQL
p_strUsername = Request.Form(“txtUsername”)
p_strPassword = Request.Form(“txtPassword”)
strSQL = “SELECT * FROM tblUsers “ & _ “WHERE Username=’”
& _strUsername & _
“‘ and Password=’” & p_strPassword & “‘“


Set objRS = Server.CreateObject(“ADODB.Recordset”)
objRS.Open strSQL, “DSN=...”
If (objRS.EOF) Then
Response.Write “Invalid login.”
Else
Response.Write “You are logged in as “ & objRS(“Username”)
End If
Set objRS = Nothing
%>
Chỗ sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng
được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép tin tặc có thể
điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuỗi trong ngoặc
sau vào trong cả 2 ô nhập liệu username/password của trang login.htm là:(‘OR=’). Lúc
này, câu truy vấn sẽ được gọi thực hiện là:
SELECT * FROM T_USERS WHERE USR_NAME =”OR”=” and USR_PASSWORD=

”OR”=”
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn mã tiếp
theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.
Kết hợp với kí tự đặc biệt của SQL :
• kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn
• kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dịng.
b) Dạng tấn cơng sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn cơng này, kẻ tấn cơng phải
có khả năng hiểu và lợi dụng các sơ hở trong các thơng báo lỗi từ hệ thống để dị tìm các
điểm yếu khởi đầu cho cuộc tấn công.
Direct Injection là những đối số được thêm vào trong câu lệnh mà không nằm giữa những
dấu nhấy đơn hay dấu ngoặc kép là trường hợp direct injection. Để vơ hiệu hố dấu nháy
và thay đổi câu lệnh mà vẫn giữ được cú pháp đúng, chuỗi mã chèn thêm vào phải có một
dấu nháy đơn trước chuỗi kí tự được chèn vào và ở cuối câu lệnh phải có một dấu nháy
đơn, chẳng hạn như sau:
StrSQL=“SELECT tkUsername FROM User WHERE tkUsername=’’ and ‘’=’’”


Nếu đã thực hiện như trên mà thông báo lỗi có liên quan đến dấu“(“thì trong chuỗi chèn
vào phải có “)”: .
c) Tấn công dựa vào lệnh Having
Having sử dụng cùng chung với mệnh đề GROUP BY là phương pháp hữu hiệu để nhận
thông tin bảng, trường…
d) Tấn công dựa vào câu lệnh kết hợp Union
Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí có thể
được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để có thể trả về nhiều dịng
thơng tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE bằng cách chèn thêm
UNION SELECT.
Ví dụ :
StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ &

tName & “’UNION SELECT tkPassword from User”
Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với tkPassword trong
bảng User.
e) Dạng tấn công dựa vào câu lệnh INSERT
Từ khố INSERT dùng để đưa thơng tin vào cơ sở dữ liệu. Thông thường câu lệnh
INSERT được dùng trong các trường hợp như: thơng tin đăng kí người sử dụng,
guestbook…v..v…
Thơng thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham
gia. Chức năng khơng thể thiếu là sau khi đăng kí thành cơng, người dùng có thể xem và
hiệu chỉnh thơng tin của mình. SQL injection có thể được dùng khi hệ thống khơng kiểm
tra tính hợp lệ cảu thơng tin nhập vào.
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName
VALUES(‘Value One’,’Value Two’,’Value Three’). Nếu đoạn mã xây dựng SQL có
dạng :
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _
& strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."


Set objRS = Nothing
%>
Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì chúng ta nhập vào trường thứ nhất ví dụ
như: ‘+(SELECT TOP 1 FieldName FROM TableName)+’. Lúc này câu truy vấn sẽ là:
INSERT INTO TableName VALUES(‘ ’+( SELECT TOP 1 FieldName FROM
TableName)+’ ’,’abc’,’def’). Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã
yêu cầu thực hiện thêm một câu lệnh nữa đó là: SELECT TOP 1 FieldName FROM
TableName.
f) Dạng tấn công sử dụng Stored-Procedures

Stored Procedure được sử dụng trong lập trình Web với mục đích giảm sự phức tạp trong
ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection. Tuy nhiên hacker vẫn có thể
lợi dụng những Stored Procedure để tấn cơng vào hệ thống.
Ví dụ : Stored procedure sp_login gồm hai tham số là username và password. Nếu nhập:
Username: nhimmap
Password: ‘;shutdown-Lệnh gọi stored procedure như sau:
exec sp_login ‘nhimmap’,‘’;shutdown--’
Lệnh shutdown thực hiện dừng SQL Server ngay lập tức.
g) Dạng tấn công sử dụng Blind SQL Injection
Một số ứng dụng Web đã được thiết kế xử lý lỗi khá tốt và về cơ bản kẻ tấn công không
thể thấy được các thông báo lỗi chứa các thông tin nhạy cảm. Do vậy việc tấn cơng bằng
cách sử dụng từ khố UNION hay tấn cơng dựa vào thông báo lỗi không thể thực hiện.
Trong trường hợp này thì kẻ tấn cơng sẽ sử dụng kỹ thuật Blind SQL Injection. Có hai
dạng Blind SQL Injection:
 Normal Blind: Không thấy phản hồi từ trang Web nhưng kẻ tấn cơng có thể

thấy được kết quả thơng qua mã trạng thái HTTP hoặc kết quả của câu truy vấn.
Cách tấn công Normal Blind thường được thực hiện bằng cách sử dụng câu điều
kiện If hoặc tấn công vào mệnh đề Where
 Totally Blind: Hồn tồn khơng thấy bất cứ phản hồi nào từ trang Web. Khi đó
kẻ tấn cơng sẽ sử dụng một số hàm hệ thống và phân tích sự trả lời từ trang Web
để tìm ra lỗ hổng.
Ví dụ: Kẻ tấn cơng có thể sử dụng câu truy vấn sau:
ProductID = 1;waitfor delay ‘0:0:10’—


Nếu thời gian phản hồi từ trang web trể hơn bình thường 10 giây thì có nghĩa rằng trang
web có lỗ hổng.
Mặc dù SQL là một chuẩn do ANSI và ISO đưa ra, tuy nhiên, có rất nhiều phiên bản khác
nhau của ngôn ngữ SQL. Và phần lớn các chương trình cơ sở dữ liệu cũng có những phần

mở rộng thêm vào riêng của họ, so với chuẩn SQL. Do đó, khi tấn cơng các cơ sở dữ liệu
khác nhau hoặc các website viết trên các ngơn ngữ lập trình khác nhau, thì có thể sẽ phải
sử dụng nhiều phương pháp tấn công khác nhau. Tuy nhiên, các câu lệnh cơ bản của các
chương trình cơ sở dữ liệu thì phần lớn đều phải theo chuẩn đã được đưa ra.Chính vì thế
các dạng tấn cơng nêu trên về cơ bản được các hacker sử dụng khá phổ biến và hiệu quả
đối với hầu hết các cơ sở dữ liệu .
2.4.3 Cách phịng tránh
Trong hầu hết trình duyệt, những kí tự nên được mã hóa trên địa chỉ URL trước khi sử
dụng.
Việc tấn công theo SQL Injection dựa vào những câu thơng báo lỗi do đó việc phịng
chống hay nhất là không cho hiển thị những thông điệp lỗi cho người dùng bằng cách
thay thế những lỗi thông báo bằng một trang do người phát triển thiết kế mỗi khi lỗi xảy
ra trên ứng dụng.
Kiểm tra kĩ dữ liệu nhập vào thay thế những kí tự như :
Đối với các giá trị numeric, hãy chuyển nó sang Interger trước khi thực hiện câu
truy vấn SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một Interger.
• Dùng thuật tốn mã hóa dữ liệu.
• Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình
viên phát triển ứng dụng web khi xữ lí các dữ liệu nhập vào để xây dựng câu lệnh
SQL. Tác hại từ lỗi SQL injection tùy thuộc vào môi trường và cách cấu hình hệ
thống. Nếu ứng dụng sử dụng quyền dbo(quyền của người sở hữu cơ sỡ dữ liệu owner) khi thao tác dữ liệu, nó có thể xóa tồn bộ các bảng dữ liệu, tạo các bảng
dữ liệu mới,…Nếu ứng dụng sử dụng quyền sa(quyền quản trị hệ thống), nó có thể
điều khiển toàn bộ hệ quản trị cơ sỡ dữ liệu và với quyền hạn rộng lớn như vậy nó
có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của
bạn. Để phòng tránh, ta có thể thực hiện ở hai mức:


a) Kiểm sốt chặt chẽ dữ liệu nhập vào
Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu truy vấn SQL bằng cách
kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request,

Request. QueryString, Request.Form, Request. Cookies, và Request.Server Variables).


Trong trường hợp dữ liệu nhập vào là chuỗi, như trong ví dụ 1, lỗi xuất phát từ việc có
dấu nháy đơn trong dữ liệu. Để tránh điều này, thay thế các dấu nháy đơn bằng hàm
Replace để thay thế bằng 2 dấu nháy đơn:
p_strUsername = Replace(Request.Form(“txtUsername”), “‘“, “‘’”)
p_strPassword = Replace(Request.Form(“txtPassword”), “‘“, “‘’”)
Trong trường hợp dữ liệu nhập vào là số, như trong ví dụ 2, lỗi xuất phát từ việc thay thế
một giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để
tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay khơng:
p_lngID = CLng(Request(“ID”))
Như vậy, nếu người dùng truyền vào một chuỗi, hàm này sẽ trả về lỗi ngay lập tức.
Ngoài ra để tránh các nguy cơ từ tấn công SQL Injection, nên chú ý loại bỏ bất kì thơng
tin kĩ thuật nào chứa trong thơng điệp chuyển tới cho người dùng khi ứng dụng có lỗi.
Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn cơng
biết được điểm yếu của hệ thống.
b) Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu
Cần có cơ chế kiểm sốt chặt chẽ và giới hạn quyền xữ lí dữ liệu đến tài khoản người
dùng mà ứng dụng web dang sử dụng. Các ứng dụng thông thường nên tránh dùng đến
các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít.
Ngồi ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thơng tin
kỹ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi.
Các thơng báo lỗi thơng thường tiết lệ các chi tiết kỉ thuật có thể cho phép kẻ tấn công
biết được điểm yếu của hệ thống.
Xác định các phương pháp kết nối server :
 Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang là










hoạt động.
Kiểm tra tất cả các tài khoản trong SQL server
Chỉ tạo tài khoản có quyền thấp cho các ứng dụng.
Loại bỏ những tài khoản không cần thiết.
Đảm bảo rằng tất cả các tài khoản co một mật khẩu hợp lệ.
Kiểm tra các đối tượng tồn tại
Nhiều extended stored procedure có thể được xóa bỏ một cách an tồn. Nếu điều
này được thực hiện, thì cũng xem xét việc loại bỏ luôn những tập tin. Dll chứa mã
của extended stored procedure.
Xóa bỏ tất cả dữ liệu mẫu như “northwind” và “pubs”


 Xóa các stored procedure khơng dùng như: master…xp_cmdsell, xp_startmail,

xp_makewebtask.
 Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào
 Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở dữ liệu

thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất đến những đối
tượng nó cần dùng.
c) Thiết lập các đối tượng giả làm mồi nhử
Chiến thuật này được đưa ra nhằm cảnh báo cho quản trị viên nguy cơ một cuộc
tấn công khi một ai đó cố tình tìm cách khai thác những dữ liệu nhạy cảm như
password. Phương pháp này nên phối hợp với việc đặt tên các đối tượng khó đốn. Để

thực hiện phương pháp này, ta sinh các bảng chứa các cột có tính nhạy cảm mà dễ đốn,
ví dụ như password, credit_no, nhưng dữ liệu trong các bảng này là dữ liệu giả, và
mỗi khi các thông tin này được truy cập, sẽ có một thơng báo gửi về cho quản trị viên.
2.5 Chèn mã lệnh thực thi trên trình duyệt Cross-Site Scripting
2.5.1 Tấn cơng Cross-Site Scripting
Cross-Site Scripting (XSS) là một trong những kỹ thuật tấn công phổ biến, nó cũng là
một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển Web và cả những
người sử dụng Web. Bất kì một Website nào cho phép người sử dụng đăng thơng tin mà
khơng có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.
Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết hạn chế của người dùng
cũng như biết đánh vào sự tò mò của họ dẫn đến người dùng bị mất thông tin một cách dễ
dàng. Hacker thực hiện tấn công XSS 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 hại cho
những người sử dụng khác.
Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích hoạt
những đoạn chương trình nguy hiểm được chèn vào, hầu hết được viết bằng các ClientSite Script như JavaScript, Jscript và cũng có thể là cả các thẻ HTML,… được thực thi
trên chính trình duyệt của nạn nhân.
Ví dụ 1: Hacker thường gắn thêm đoạn mã độc vào URL của Website và gởi đến nạn
nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính mã độc.
/>Lợi dụng cách truyền tham số trên URL mà hacker có thể dễ dàng thêm vào đoạn mã
đánh cắp cookie. Điều này xảy ra do ta không chú ý điều kiện lọc input từ URL của
Website.
Ví dụ 2: Trường hợp mở các bức thư mà không hề cảnh giác với XSS. Chỉ cần với một
đoạn mã HTML gửi trong thư thì đã hồn tồn bị mất cookie của mình:


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×