Tài liệu Vấn đề bảo mật trong ứng dụng Ajax - Pdf 10

Vấn đề bảo mật trong ứng dụng Ajax
AJAX là gì?
AJAX, viết tắt từ Asynchronous JavaScript and XML (JavaScript và XML không đồng bộ), là bộ
công cụ cho phép tăng tốc độ ứng dụng web bằng cách cắt nhỏ dữ liệu và chỉ hiển thị những gì
cần thiết, thay vì tải đi tải lại toàn bộ trang web. AJAX không phải một công nghệ đơn lẻ mà là
sự kết hợp một nhóm công nghệ với nhau. Trong đó, HTML và CSS đóng vai hiển thị dữ liệu,
mô hình DOM trình bày thông tin động, đối tượng XMLHttpRequest trao đổi dữ liệu không
đồng bộ với máy chủ web, còn XML là định dạng chủ yếu cho dữ liệu truyền. Đây đều là công
nghệ sẵn có nhưng Javacript đã lắp ráp chúng lại để thực hiện nhanh hơn, tốt hơn các yêu cầu
của người sử dụng
AJAX được cải tiến như thế nào so với các ứng dụng Web truyền thống?
Đối với ứng dụng Web truyền thống, hoạt động của người sử dụng trên trang web sẽ tạo ra một
yêu cầu HTTP tới máy chủ. Máy chủ thực hiện một số khâu xử lý như lấy lại dữ liệu, tính toán,
kiểm tra sự hợp lệ của thông tin, sửa đổi bộ nhớ, sau đó gửi lại một trang HTML hoàn chỉnh tới
máy khách. Về mặt kỹ thuật, phương pháp này cũng khá bất tiện và mất thời gian, bởi khi máy
chủ đang thực hiện nhiệm vụ của nó thì người dùng chỉ có một việc là chờ đợi.
Để khắc phục hạn chế trên, các chuyên gia phát triển giới thiệu hình thức trung gian - cơ chế xử
lý AJAX (AJAX Engine) - giữa máy khách và máy chủ. Điều này giống như việc tăng thêm một
lớp giữa cho ứng dụng để giảm quá trình đi lại của thông tin và giảm thời gian phản ứng. Mọi
thao tác của người sử dụng sẽ gửi lệnh JavaScript tới bộ xử lý AJAX, thay vì tạo ra một yêu cầu
HTTP (HTTP request) và truy vấn tới máy chủ. Thay vì tải lại (refresh) toàn bộ một trang, nó chỉ
nạp những thông tin được thay đổi, còn giữ nguyên các phần khác.
Những vấn đề bảo mật gì tồn tại trong ứng dụng AJAX?
Trong khi AJAX có thể tăng khả năng sử dụng ứng dụng Web với các ưu điểm của mình, nó
cũng đồng thời tạo ra nhiều vấn đề về bảo mật ở cả hai phía máy khách (client) và máy chủ
(server):
• Tạo nên một diện tấn công lớn hơn trước với nhiều dữ liệu vào (input) cần bảo vệ
• Phơi bày những chức năng ở bên trong của ứng dụng Web
• Cho phép các kịch bản (script) phía máy khách truy xuất đến tài nguyên của bên thứ ba.
Điều này rất nguy hiểm nếu như không xây dựng một cơ chế bảo mật tốt.
Tăng khả năng bị tấn công

Với AJAX, XSS có thể tạo nên các yêu cầu nguy hiểm đối với người dùng mà không cần tải lại
trang Web. Những Script độc hại có thể bí mật đọc nội dung của trang Web mà người dùng đang
xem. Sử dụng AJAX, một tấn công XSS có thể gửi nhiều yêu cầu cho những trang đặc biệt bên
cạnh những trang mà người dùng đang xem.
Với ứng dụng Web truyền thống, việc tiêm và phát tán XSS được thực hiện bởi một kẻ tấn công
thường là trên một phần duy nhất của Website. Với ứng dụng AJAX, XSS có thể được phát tán
như một virus. XSS có thể sử dụng yêu cầu AJAX để tự tiêm bản thân nó vào trong trang và dễ
dàng tiêm lại vào các máy (host) khác với nhiều XSS hơn vì không cần phải tải lại. XSS có thể
gửi nhiều yêu cầu sử dụng những phương thức HTTP phức tạp để truyền đến người dùng một
cách vô hình.
Vào tháng 10 năm 2005, một thành viên của mạng xã hội MySpace.com đã tạo một hồ sơ
(profile) cá nhân có chứa một loại sâu tự động phát tán, sâu Samy, đánh dấu trường hợp tấn công
đầu tiên lợi dụng XSS trong AJAX. Khi profile được xem bởi người khác, đoạn mã tự động thêm
người này vào danh sách “bạn bè” của Samy đồng thời được sao chép đến profile của nạn nhân.
Tháng 6 năm 2006, sâu Yamanner ảnh hưởng đến người dùng dịch vụ web mail của Yahoo (một
dịch vụ webmail được dùng rất phổ biến). Sâu này sử dụng XSS và AJAX, khi một email bị
nhiễm độc được mở, đoạn mã viết bằng JavaScript sẽ được thực hiện và gửi một bản sao của
chính nó đến tất cả các địa chỉ trong sổ địa chỉ của nạn nhân.
Cầu nối AJAX (AJAX Bridging)
Vì mục đích bảo mật, ứng dụng AJAX chỉ có thể kết nối ngược lại với website kết nối đến nó. Ví
dụ, JavaScript với AJAX được tải về từ yahoo.com không thể tạo kết nối đến google.com. Để
cho phép AJAX liên hệ với site của bên thứ ba, một dịch vụ cầu nối AJAX được thiết lập. Trong
một cầu, một host cung cấp một dịch vụ web đóng vai trò như một trung gian (proxy) để chuyển
tiếp lưu lượng giữa JavaScript đang chạy trên máy khách và site của bên thứ ba. Một cầu có thể
được xem như là một kết nối “Dịch vụ web đến dịch vụ web”. Rất nhiều kiểu khung web như là
Microsoft Atlas, cung cấp hỗ trợ cho cầu AJAX. Các giải pháp khác như PHP hay chương trình
CGI cũng cung cấp cầu AJAX.
Một cầu AJAX có thể kết nối bất cứ dịch vụ web nào trên bất cứ host nào sử dụng giao thức như
là SOAP (Simple Object Access Protocol) hay REST (Representational State
Transfer). Cầu cũng có thể kết nối đến các đối tượng khác như RSS, HTML, Flash.

Nếu quyết định phát triển ứng dụng Web, truyền thống hoặc AJAX, nên chú ý đến những khuyến
cáo sau:
• Loại input nào được cho phép bởi ứng dụng
• Đảm bảo rằng tất cả các input được kiểm tra trước khi thực hiện các tiến trình
• Sử dụng phương pháp “white list” hiệu quả hơn là “black list” trong kiểm tra. “white list”
bao gồm việc đồng ý cho các dữ liệu đã biết là tốt trong khi “black list” sử dụng một
danh sách dữ liệu không đươc phép.
• Bổ sung giao thức SSL cho ứng dụng Web
• Nếu là ứng dụng AJAX, giảm thiểu các chương trình logic bị phơi bày
Kết luận
Ứng dụng Web ngày nay chiếm một phần rất quan trọng trong việc trao đổi thông tin trên mạng.
Việc cải tiến các ứng dụng web truyền thống sang các ứng dụng AJAX làm cho nó nhanh hơn,
tiện dụng hơn, dễ dàng tương tác hơn cũng kéo theo hệ quả là tăng nguy cơ mất an ninh của ứng
dụng. Quá trình thực thi Script và thông tin trao đổi trên yêu cầu server/client tăng đem lại cơ hội
lớn hơn cho kẻ tấn công phá hoại hoặc ăn cắp dữ liệu. Một giải pháp tốt cho vấn đề này là sử
dụng các công cụ dò quét, rà soát lỗ hổng của ứng dụng web. Từ đó, khắc phục các điểm yếu an
ninh tồn tại trên ứng dụng.
Nguyễn Anh Đức
10 điều các chuyên gia CNTT cần biết về Ajax
Bất kỳ một công nghệ Web mới nào cũng sẽ đều ảnh hưởng tới một cơ sở hạ tầng của mạng theo nhiều
góc độ khác nhau từ những việc không quan trọng đến làm choáng váng cả thế giới. Ajax là một trong
các công nghệ mới đang được sử dụng nhiều trên các mạng ngày nay. Để giúp các bạn có thể tối thiểu
hóa những ngạc nhiên về mạng của mình, chúng tôi phác thảo ra 10 vấn đề cần biết về Ajax.
1) Ajax là một ý tưởng, không phải là cụm từ
Ajax tuy đã được giải thích rõ ràng là viết tắt của cụm từ Asynchronous JavaScript and XML nhưng tên
đầy đủ này vẫn không hoàn toàn thích hợp vì nó đơn giản hóa quá mức lịch sử của công nghệ cũng như
những tùy chọn bổ sung nằm trong chính bản thân nó. Chính xác hơn, Ajax bao gồm ý tưởng trong đó
các ứng dụng web có thể được xây dựng để chọn trong số vòng lặp “post-wait-repeat” được sử dụng
trong các ứng dụng Web trình chủ. Ajax cho phép các ứng dụng web chuyển một cách liên tục và mềm
dẻo hơn, nhưng việc update lại tăng lên. Nó cung cấp cho người dùng một phương pháp phong phú và

dụng văn bản thô hoặc các đoạn HTML. Vẫn còn một số thành phần khác sử dụng các định dạng dữ liệu
như vậy như ngôn ngữ markup YAML ít được biết đến.

Rõ ràng hoàn toàn có thể và hợp lý để sử dụng XML, nhưng Ajax vẫn không yêu cầu bắt buộc. Sử dụng
các định dạng nhị phân cho việc upload các file vẫn không được hỗ trợ bởi đối tượng XMLHttpRequest,
nhưng nên cần biết rằng Flash sử dụng một định dạng nhị phân được gọi là Action Message Format,
chính vì vậy các tính năng tương tự như vậy sẽ một sớm một chiều có trong các ứng dụng của Ajax. Bạn
nên biết định dạng nào đang được sử dụng trên mạng vì nó không phải lúc nào cũng là XML, và cũng
bảo đảm bạn có thể phân tích định dạng cho vấn đề hiệu suất và bảo mật.

4) Kế hoạch cho việc tăng các request HTTP
Vấn đề nổi cộm nhất đối với các quản trị mạng trong việc hỗ trợ các ứng dụng Ajax là mẫu lập trình kiến
trúc đã thay đổi vấn đề sử dụng mạng của các ứng dụng web từ việc như xử lý khối, sự phản ứng không
liên tục với hàng trăm KB đến sự thay đổi mang tính liên tục trong các đáp trả HTTP nhỏ hơn. Điều này
có nghĩa rằng Web và các máy chủ ứng dụng có thể bận rộn hơn trước rất nhiều. Những gì Ajax sẽ thực
hiện với mạng và máy chủ của bạn phụ thuộc vào cách ứng dụng được thiết kế như thế nào, hãy bảo
đảm cho các chuyên gia phát triển ứng dụng hiểu được sự ảnh hưởng của các ứng dụng của họ với
mạng như thế nào.

5) Tối ưu hóa các yêu cầu Ajax một cách thận trọng
Các ứng dụng web nên gắn với trong việc phân phối mạng đó là gửi ít dữ liệu. Tuy vậy điều này không có
nghĩa rằng nguyên lý này cần phải tuân theo một cách rộng rãi bởi các chuyên gia phát triển phần mềm.
Một ưu điểm cho mạng, việc nén HTTP cho các đáp trả của Ajax có thể giảm được kích thước và được
hỗ trợ trong nhiều trình duyệt hiện đại. Tuy vậy vì overhead của file nén mang tính động nên tốc độ có thể
không được cải thiện nhiều nếu các đáp trả tương đối nhỏ. Điều này có nghĩa rằng các quản trị viên
mạng nên cho phép nén trên máy chủ Web, nhưng họ cần phải hiểu được rằng với các ứng dụng Ajax thì
hiệu suất của việc này không lớn bằng các ứng dụng web trước kia.

Để gửi dữ liệu ít đi, chúng ta thường sẽ sử dụng đến vấn đề caching. Tuy vậy hầu hết các bổ sung của
Ajax đều có thể là thù địch của caching với một giả định là các trình duyệt mà không liên quan đến các

lại không hiển nhiên như vậy. Người dùng thường bị báo sai về các lỗi vì vòng quay GIF động cung cấp
quá ít thông tin về trạng thái đúng của yêu cầu.

Các chuyên gia phát triển phần mềm là những người thiệt nhiều nhất vì nhiều thư viện không có hiệu quả
trong việc thừa nhận các timeouts đó xảy ra, những lần retry phải xuất hiện, máy chủ và các lỗi dữ liệu
ngày càng nhiều. Các chuẩn đoán JavaScript hiển thị việc truyền thông và các lỗi mã ít khi đúng trên phía
trình khách, chính vì vậy mà người dùng thường không hay biết. Do đó cần phải có nhiều kiểm tra mức
ứng dụng được yêu cầu cho các quản trị viên để hỗ trợ Ajax một cách hợp lý.

9) Những mối đe dọa về bảo mật cũ lại xuất hiện lần thứ hai
Nếu bạn lắng nghe các chuyên gia, thì Ajax có thể gây tăng thêm bề mặt tấn công nhưng quả thực nó
không kém an toàn hơn các môi trường phát triển ứng dụng web truyền thống nào vì các đầu vào HTTP
đến trình chủ tin cậy đều có cùng các header, chuỗi truy vấn và body văn bản. Tuy nhiên nếu mã trình
khách được tin tưởng hoàn toàn và nhập vào dữ liệu không được ngăn chặn trong nhóm phát triển web
thì Ajax có thể gây ra những vấn đề về bảo mật tương tự như các ứng dụng web truyền thống.

Cross-site scripting (XSS) không phải là lỗ hổng mới trong Ajax; nó là một lỗi chung, đặc biệt nếu một
ứng dụng nào đó cho phép dữ liệu trạng thái được điều chỉnh với JavaScript. Đầu vào HTML cần được
không cho phép trong hầu hết các trường hợp và HTTP Only Cookies nên được áp dụng ngay lập tức để
giảm việc tấn công cookie và các tấn công khác thông qua XSS.

Cũng vậy Cross Site Request Forgery cũng không phải là một lỗi mới của Ajax, nhưng nếu các chuyên
gia phát triển ứng dụng của bạn không kiểm tra HTTP Referer (sic) header và quản lý session đúng cách
bên trong các ứng dụng Ajax thì có thể để hổng vấn đề này.

Các Hacker, cũng giống như các chuyên gia phát triển phần mềm hiện đang rất quan tâm đến việc sử
dụng và lạm dụng JavaScript, điều đó càng làm tăng thêm các lỗ hổng tiềm tàng. Các chuyên gia về
mạng nên bảo đảm cho chuyên gia phần mềm biết được rằng mã trình khách có thể bị thay đổi, vì vậy
các dữ liệu đầu vào luôn cần được lọc và xem xét.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status