Thứ Tư, 7 tháng 10, 2015

[HS-S1] P1 Giới thiệu XSS là gì


Hello :D bài này lâu quá rồi giờ mới có thời gian ngồi viết nhể. Hehe. Hôm nay chúng ta sẽ cùng thảo luận về XSS là gì, phương pháp rất thông dụng trong tấn công website nhé.
Đó chính là XSS. XSS là viết tắt của: Cross Site Scripting. Lẽ ra nếu viết tắt thì nó phải là CSS :( nhưng để phân biệt với CSS ngôn ngữ lập trình giao diện người dùng web nên người ta đã viết nó thành XSS.

Vậy XSS được bắt nguồn như thế nào và dùng để làm gì ?

Đầu tiên thì để tạo hứng khởi cho các bạn :D mình xin tiết lộ đó là, ngay cả Facebook, năm 2013 vừa rồi cũng có phát hiện vài lỗi XSS cực kì nghiêm trọng, mà từ đó hacker có thể dễ dàng chiếm được quyền Facebook của bạn trái phép.
XSS là phương pháp mà hacker khai thác lỗi của ứng dụng, từ đó nhập vào ứng dụng dữ liệu có chứa script độc để lợi dụng hoặc chiếm quyền trái phép của website.
Những lỗi như thế này có thể gặp ở bất cứ đâu do sơ hở của lập trình viên, như wordpress, joomla, vbb.... Tuy nhiên các bạn lưu ý rằng, thường thì bản thân những mà nguồn lớn như trên rất ít khi có bug, hoặc nếu có thì thường sẽ được phát hiện và cấp bản vá rất nhanh. Nên chủ yếu lỗi sẽ xảy ra từ các sản phẩm của bên thứ 3 như Plugins, themes....
Ví dụ về XSS. Giả sử mình lập trinh 1 ứng dụng web bình thường, trong đó có phần comment, mình lập trình cho người dùng nhập dữ liệu vào ô comment, sau đó sẽ hiển thị ở bài viết :D Wow, mọi thứ sẽ ổn khi mà người dùng nhập những đoạn text bình thường. Nhưng nếu có 1 hacker tinh quái nào đấy nhập dữ liệu như thế này:
Thì khi đó bạn vào bài viết, sẽ hiện lên 1 thông báo của javascript là "XSS ! DETECTED". Đó là ví dụ đơn giản cho việc hacker có thể nhúng javascript vào website :( Mà javascript thì có thể làm được rất nhiều việc. Tồi tệ hơn là có thể đánh cắp cookie để login trái phép (Nếu ứng dụng bảo mật ko kĩ), hoặc có thể mượn quyền của bạn để tác động tới website (Nếu như bạn là admin thì hacker có thể mượn quyền bạn để hành động như admin)....
Ngoài ra điều này có thể xảy ra ở bất cứ đâu mà người dùng có thể nhập dữ liệu vào, thậm chí là những thành phần nhạy cảm như cookie, tùy thuộc vào ứng dụng web.
Những điều này mình sẽ hướng dẫn cụ thể hơn 1 chút ở bài tiếp theo đó là Sử dụng và phòng thủ XSS. Các bạn đón đọc nha :D
Bài viết được chia sẻ tại website: DuyK.Net . Vui lòng tôn trọng tác giả cũng như tôn trọng chính bạn bằng cách không gỡ bỏ dòng chữ này khi chia sẻ lại bài viết.

CSRF là gì và Cách phòng thủ

CSRF là gì và Cách phòng thủ

CSRF là viết tắt của Cross Site Request Forgery. Nôm na hiểu ra tiếng việt thì có nghĩa là: Mượn quyền trái phép. Đây là 1 lỗi rất thường gặp, khá nguy hiểm :D và rất nhiều coder chưa có kinh nghiệm hầu như ko để ý tới vấn đề này
Độ khó: Trung bình.
Yêu cầu: Kiến thức lập trình và kiến thức về dịch vụ web  cơ bản

Hello, hôm nay là 30/4 :D có dịp rảnh rỗi tý, nhân tiện cũng viết bài mới :( lâu lắm rồi ko xuất hiện.
OK. Giờ vào vấn đề nhé :D mình sẽ nói 1 cách đơn giản và dễ hiểu bằng ví dụ như sau:
Giả sử: Ứng dụng web của bạn, nếu đăng nhập dưới quyền Admin thì sẽ có thể xóa bài viết bằng cách truy cập: http://domain.com/admin.php?xoa_bai_viet=1234
Ok, từ việc này ta sẽ đặt ra vấn đề. Sẽ ra sao, nếu bạn đang đăng nhập dưới quyền admin, mà Hacker gửi cho bạn 1 link rút gọn để dẫn tới link trên (Giả sử bit.ly/link-rut-gon chẳng hạn). Và bạn click vào mà ko biết đó là gì, sau đó vô tình chính bạn đã xóa bài viết 1234 mà ko hề có chủ ý :D
Hoặc ngay cả method http POST cũng có thể bị giả lập 1 cách dễ dàng = javascript.
Ok, từ trên, chúng ta có thể suy nghĩ rộng ra 1 vài trường hợp khác như ăn trộm tài khoản chẳng hạn. Giả sử ứng dụng web cung cấp phương thức để thay đổi email chẳng hạn. Hacker cũng có thể hướng người dùng truy cập vào địa chỉ nào đó mà ở bên trong có thực thi mã độc 1 cách bí mật mà người dùng ko biết để mượn quyền user của người dùng thực hiện hành vi trên ứng dụng web bị hack.
Ngay cả trang mạng xã hội Facebook nổi tiếng cũng đã từng mắc phải lỗi bảo mật CSRF này :D
Vậy chúng ta phải làm thế nào để khắc phục ?
Hãy suy nghĩ về việc làm thế nào để xác minh rằng, người dùng đang thực hiện hành vi chính từ ứng dụng web của bạn và ko có sự giả mạo mượn quyền !
Yes ! Đó là tạo ra 1 mã TOKEN cho mỗi người truy cập vào web của bạn, và sử dụng nó để xác minh cho mỗi hành động người dùng. Token này bạn có thể tạo ngẫu nhiên, hoặc theo quy tắc... tùy theo thuật toán bạn muốn, nhưng nó cần được lưu và gắn vào mỗi hành động của người dùng.
Quay lại việc khắc phục ví dụ đầu tiên. Khi bạn thêm vào 1 tham số GET nữa để xác minh, giả sử gọi là TOKEN, và bạn kiểm tra TOKEN của GET có khớp với TOKEN mà bạn lưu trong ứng dụng cho người dùng này hay ko, trước khi thực hiện hành động xóa.
Khi đó giả sử TOKEN bạn tạo ra cho người dùng này là: TOKEN = ABCDEF1234321 thì link xóa bài hợp lệ lúc này là
http://domain.com/admin.php?xoa_bai_viet=1234&TOKEN=ABCDEF1234321
:D Lúc này hacker sẽ phải bó tay vì hắn hoàn toàn ko thể lấy được tham số TOKEN để mượn quyền trái phép được nữa :)
Đó là cách tốt nhất và phổ biến nhất để khắc phục vấn đề này