12/08/2018, 16:24

Security với single-page web app.

Ngày nay, xu thế xây dựng website theo dạng kiểu single-page web app ngày càng phổ biến. Đi kèm với nó là việc xây dựng một cơ chế bảo vệ thích hợp cho ứng dụng, ít nhất là để có khả năng tránh được các loại hình tấn công phổ biến hiên nay. Bài viết sẽ được dành để liệt kê một vài phương thức tấn ...

Ngày nay, xu thế xây dựng website theo dạng kiểu single-page web app ngày càng phổ biến. Đi kèm với nó là việc xây dựng một cơ chế bảo vệ thích hợp cho ứng dụng, ít nhất là để có khả năng tránh được các loại hình tấn công phổ biến hiên nay.

Bài viết sẽ được dành để liệt kê một vài phương thức tấn công web phổ biến thường gặp, cách đối phó ; đồng thời đưa ra giới thiệu và so sánh 2 cơ chế authentication phổ biến hiện nay - token authentication vs session authentication

Cross Site scripting (XSS) attack

XSS attack là một trong những kĩ thuật tấn công phổ biến nhất, cũng như nguy hiểm nhất hiện nay. Phương thức tấn công này dựa vào lỗi bảo mật khi xây dựng ứng dụng của bên phát triển, cho phép người tấn công chèn các đoạn script vào trong mã nguồn của ứng dụng web.

XSS attack xảy ra khi web app cho phép các đoạn code javascript ngoài được gắn vào (inject) và thực thi một cách tùy tiện. Lỗi này thường dễ thấy nhất trên là trên các form trong app. Đoạn gif dưới đây sẽ demo hành vi của loại tấn công này.

Bên tấn công chỉ cần đưa một đoạn script vào, với một trang web không được xử lý tốt (không được xây dựng để chống lại được tấn công XSS), đoạn code sẽ được đưa thẳng cho web app và được thực thi - với ví dụ demo là đưa ra alert. Vấn đề ở đây đó là bất cứ thứ gì được nhập vào các form field của app cũng sẽ được chấp nhận, xử lý và gửi lên lên server, từ đó có khả năng cho phép hacker thực hiện các hành vi trái phép.

Khắc phục

Ngắn gọn: Giải pháp đơn giản nhất để ngăn ngừa tấn công XSS là lọc tất cả các thông tin được nhận từ phía người dùng, chỉ chấp nhận những dữ liệu hợp lệ. (ví dụ: lọc bỏ các đoạn thông tin chứa thẻ <script>, lọc các kí tự đặc biệt ...)

HIện nay , hầu hết (nếu như không nói là tất cả) các framework xây dựng web đều tích hợp các cơ chế để ngăn ngừa tấn công XSS, hoặc cũng đã có rất nhiều các thư viện được thiết kế để ngăn ngừa XSS attack được chia sẻ và sử dụng rộng rãi. Lời khuyên ở đây là ta (nhất là với các LTV mới, còn ít kinh nghiệm) luôn nên lựa chọn và sử dụng một bộ thư viện nào đó , tốt nhất là 1 library open-source , đáng tin cậy và đã được sử dụng rộng rãi. Việc tự tay thiết kế và xây dựng lại từ đầu giải pháp bảo vệ cho trang web cũng là không cần thiết, chỉ nên thực hiện khi ứng dụng đòi hỏi 1 quy trình đặc biệt nào đó; bên cạnh đó, ta còn có thể bỏ sót một lỗ hổng nào đó hoặc thậm chí còn gây ra một lỗ hổng khác khi tự xây dựng một library bằng tay.

Man-in-the-Middle attack

Thuật ngữ MITM ở đây được dùng để nói đến trường hợp khi người dùng tin rằng mình đang kết nối ( cũng như đang giao tiếp ) trực tiếp với ứng dụng mà mình mong muốn, nhưng trên thực tế, có một "trung gian" khác đứng giữa người dùng và server. Trung gian đó sẽ chặn lấy các thông tin của người dùng rồi truyền lại cho server mà người dùng nhầm tưởng. Người dùng, khi này, sẽ thật sự nghĩ rằng mình đang trực tiếp thực hiện trên ứng dụng mong muốn - mà không biết rằng - trong lúc đó, luôn luôn có một bên thứ 3 can thiệp vào luồng thông tin, lưu trữ lại hết hành vi người dùng và thậm chí chỉnh sửa, thay đổi response trả về của yêu cầu. Trong thực tế, case này xảy ra khi ta sử dụng các kết nối mạng không an toàn - ví dụ như các điểm công cộng ( quán cà phê, khách sạn ...) - khi này, các thông tin mà đáng lẽ phải được bảo mật (ví dụ như session id ...) nếu như được truyền thông qua các giao thức an toàn (ví dụ như https ...), lại hoàn toàn không được bảo vệ, bị truyền đi mà không cần che giấu trên network, và có thể bị bất cứ ai nắm lấy. Lúc này, bên tấn công sẽ chiếm lấy các thông tin định danh nhạy cảm (session id) để từ đó giả mạo danh tính của người dùng đối với một ứng dụng mà người dùng đã xác thực từ trước đó.

Khắc phục

Luôn luôn sử dụng các kết nối an toàn - HTTPS, TLS - mọi lúc có thể. Hạn chế sử dụng mạng công cộng (quán cafe, nhà nghỉ ...) - những nơi không đảm bảo an toàn - đặc biệt là thực hiện các thao tác như giao dịch ngân hàng.

Cross Site request forgery (CSRF)

Xảy ra khi một web site, email, chương trình ... độc hại điều khiển được browser của người dùng, giả mạo người dùng và thực hiện các hành vi mà người dùng không biết trên một trang web mà họ đã thực hiện việc chứng thực trước đó.

Ví dụ:

  • Ta vào trang web https://vietcombank.com , thực hiện các thao tác giao dịch bình thường.

  • Ta nhận được tin nhắn của bạn gái , trong đó chứa một đường link để xem bức ảnh chụp chung ...

    • http://farm5.staticflickr.com/4455/37799506582_c08baa5e46_o.jpg
  • Click vào , thay vì hiện ra ảnh bạn gái, đường link đó điều hướng người dùng về lại trang web của ngân hàng và thực hiện rút sạch tiền của bạn             </div>
            
            <div class=

0