inflearn logo

Học viết mã an toàn cho Spring Boot và Express qua các sự cố tấn công mạng thực tế

Đây là khóa học thực hành giúp bạn trở thành nhà phát triển có thể trụ vững trong thời đại tin tặc sử dụng AI để tự động hóa các cuộc tấn công. Bạn sẽ trực tiếp tìm và vá từng lỗ hổng trong mã nguồn của một cửa hàng trực tuyến mã nguồn mở. Khóa học gồm 102 bài, bao quát toàn bộ OWASP Top 10:2025 cùng 20 rủi ro ngoài danh sách, đồng thời cung cấp mã nguồn hoàn chỉnh đã vá cả 37 lỗ hổng, các thành phần phòng thủ, quy tắc phát hiện và tài liệu ứng phó sự cố.

1 học viên đang tham gia khóa học này

Độ khó Cơ bản

Thời gian Không giới hạn

MySQL
MySQL
Express
Express
Docker
Docker
Spring Boot
Spring Boot
Redis
Redis
MySQL
MySQL
Express
Express
Docker
Docker
Spring Boot
Spring Boot
Redis
Redis

Bạn sẽ nhận được điều này sau khi học.

  • Con mắt phát hiện 10 hạng mục của OWASP Top 10:2025 và 20 rủi ro ngoài danh sách trong mã dịch vụ của tôi

  • Mã nguồn cuối cùng của cửa hàng trực tuyến đã khắc phục cả 37 lỗ hổng (dùng làm mã chuẩn cho dịch vụ của tôi)

  • Thói quen tái hiện cuộc tấn công để xác nhận [red], khắc phục, rồi chứng minh đã chặn được bằng [green] và vượt qua các bài kiểm thử.

  • Khả năng tự triển khai kiểm tra quyền sở hữu, xác thực đầu vào, giới hạn tốc độ, xoay vòng khóa và kho lưu trữ bí mật trong Spring Boot.

  • Thiết kế cơ chế phát hiện sớm rò rỉ dữ liệu bằng nhật ký dấu hiệu tấn công và quy tắc cảnh báo Grafana

  • Cơ sở để soạn đề xuất thay đổi kiến trúc, bao gồm phân tách mạng, proxy egress, kho lưu trữ bí mật và sao lưu bất biến.

  • Con mắt phát hiện lỗ hổng trong mã nguồn của người khác, được rèn luyện qua việc tìm và sửa các lỗi thực tế trong những dự án mã nguồn mở nổi tiếng (Spring Boot mall · Express EverShop)

  • Cách trong vòng 30 phút xác định “nếu là dịch vụ của chúng ta thì sẽ chặn ở đâu” khi xem một sự cố trên bản tin

  • Cách nhận biết và chặn trước các kiểu tấn công tự động (dò mật khẩu, bot, trình quét)

  • Từ đánh giá bảo mật, đề xuất kiến trúc đến ứng phó sự cố: kinh nghiệm thực tiễn để phát triển lên cấp Senior/Lead và những tình huống có thể trình bày trong phỏng vấn.

  • 6 bộ quy trình ứng phó sự cố, 7 mẫu biểu kiểm tra và báo cáo, bảng kiểm trực tuyến gồm 60 câu hỏi, PDF tài liệu học tập

Trang web bạn quản lý cũng đang bị tấn công ngay lúc này

[Bài viết nên đọc cùng]

- Loạt bài trên Velog “Phương thức tấn công VS phương pháp phòng thủ”: https://velog.io/@bumicklee/series/defense


Các máy chủ có kết nối Internet phải nhận những yêu cầu từ các trình quét tự động và bot mỗi ngày. Mật khẩu bị rò rỉ liên tục được thử trên trang đăng nhập, còn có người lần lượt thay đổi mã đơn hàng để xem đơn hàng của người khác.

Vấn đề không phải là liệu có bị tấn công hay không. Ngay lúc này, các cuộc tấn công vẫn đang diễn ra. Câu hỏi thực sự gồm ba điều.

  1. Yêu cầu đó có thành công không? Nếu nhận được phản hồi 200 thì hệ thống đã bị xâm nhập rồi.

  2. Bạn có thể nhận ra không? Lúc 3 giờ sáng, chẳng ai đang theo dõi nhật ký hệ thống.

  3. Bạn có thể chứng minh rằng nó đã bị chặn không? "Đã sửa rồi" không phải bằng lời nói, mà bằng kết quả kiểm thử.

Khóa học này trả lời ba câu hỏi bằng code.


Cách sống sót trong thời đại tự động hóa hack bằng AI

Tháng 10 năm 2026, Sở Cảnh sát Seoul công bố một vụ xâm nhập liên hoàn, trong đó các hacker sử dụng AI đánh cắp khoảng 8,2 triệu bản ghi thông tin tại hơn 90 nơi (con số có thể thay đổi vì cuộc điều tra vẫn đang diễn ra).

AI không tạo ra phép màu mới. Nó chỉ giúp hacker nhanh chóng tìm ra những điểm yếu mà trước đây họ không thể phát hiện. Các cuộc tấn công tự động cũng có quy luật, và mục tiêu vẫn như trước. Nếu hiểu rõ quy luật đó và chủ động ngăn chặn, thì dù AI tìm kiếm nhanh đến đâu, số điểm yếu có thể bị phát hiện cũng sẽ giảm.

Nếu là mã của chúng ta, các sự cố tấn công mạng trên bản tin sẽ xảy ra ở đâu?


Rò rỉ thông tin SIM của SK Telecom, rò rỉ dữ liệu cá nhân của 33,67 triệu người dùng Coupang, lộ khóa truy cập TVING, Lotte Card bị hack, GS Retail bị tấn công nhồi nhét thông tin đăng nhập, Binance thất thoát 6,4 tỷ USD.

Tin tức về các sự cố an ninh mạng xuất hiện mỗi tuần. Nhưng dù đọc bao nhiêu bài báo đi nữa, vẫn không có câu trả lời cho câu hỏi "Vậy trong code của mình thì cần sửa ở đâu?".

Khóa học này trả lời câu hỏi đó bằng chính code. Bạn sẽ chạy một cửa hàng trực tuyến mã nguồn mở thực tế trên máy tính của mình, rồi tự tái hiện 22 sự cố để xem chúng xảy ra ở đâu trong code này. Sau đó, bạn sẽ khắc phục từng lỗi một và kiểm tra bằng các bài thử nghiệm để xác nhận lỗi đã được ngăn chặn hay chưa.

Các dự án mã nguồn mở nổi tiếng cũng không an toàn

Khóa học này thực hành trên các dự án mã nguồn mở thực tế, mỗi dự án có hàng chục nghìn sao trên GitHub, chứ không phải các ví dụ đồ chơi. Đó là cửa hàng trực tuyến mall viết bằng Spring Boot (hơn 80.000 sao) và EverShop viết bằng Express (hơn 10.000 sao).

Tuy nhiên, khi lần đầu kiểm tra các mã nguồn nổi tiếng này, chúng tôi phát hiện 74 vấn đề. Có 48 vấn đề ở Spring Boot và 26 vấn đề ở Express. Trong số đó có cả những vấn đề nghiêm trọng như sau.

  • Chỉ cần thay đổi mã đơn hàng là có thể xem được đơn hàng của người khác.

  • Bất kỳ thành viên nào đã đăng nhập cũng có thể tự đánh dấu “Thanh toán hoàn tất”.

  • Mã xác minh SMS được gửi kèm trong phản hồi API

  • Token không có chữ ký cũng được chấp nhận.

Ngay khi sử dụng mã nguồn mở, các lỗ hổng của nó cũng đi vào dịch vụ của chúng ta. Khóa học này giúp bạn nâng cao năng lực phòng thủ bằng cách lần lượt sửa từng đoạn mã Spring Boot và Express theo danh sách kiểm tra này. Khả năng phát hiện vấn đề trong mã do người khác viết chính là sức mạnh giúp bảo vệ mã của công ty bạn.(Danh sách kiểm tra bao gồm các lỗ hổng được xác nhận trong mã nguồn ban đầu, thiết lập mặc định của bản demo và những lỗi thiết lập vận hành được thêm vào để phục vụ phần thực hành.)

Bao quát cả Spring Boot và Express


  • Spring Boot (nội dung chính): Trong 15 phần và 96 bài học, bạn sẽ tự tay thực hiện toàn bộ quy trình từ tái hiện → sửa → kiểm tra → xem nhật ký phát hiện.

  • Express: Trong mỗi bài học chính, bạn sẽ thấy diff sửa đổi tương ứng trong Express và trực tiếp ngăn chặn cùng một cuộc tấn công trong 18 bài thực hành mini về Express chạy chỉ với Node.js, không cần Docker. Ở Mục 16, bạn sẽ làm theo video từ bước cài đặt đến khi hoàn thành một lượt thực hành.

  • Dù trong nhóm có hai stack khác nhau, bạn cũng không cần lo. Nguyên lý ngăn chặn vẫn giống nhau, và bạn có thể kiểm tra xem đã ngăn chặn được chưa bằng cùng một bài kiểm thử.

Bài giảng bổ sung dành cho nhà phát triển Express: Phần 16

Dành riêng cho những ai sử dụng Express, chúng tôi đã tạo Mục 16 “Bắt đầu thực hành với Express” (6 bài). Không cần Docker hay máy chủ DB. Chỉ cần Node.js 24.

Sau khi hoàn thành Phần 16, bạn sẽ thực hiện 18 bài thực hành nhỏ với Express. Theo số thứ tự bài học giống như khóa học chính, bạn sẽ trực tiếp dùng mã Express để ngăn chặn các vấn đề như xem đơn hàng của người khác, truy cập địa chỉ quản trị bị bỏ ngỏ, mass assignment, SSRF, SQL injection, XSS, dò mật khẩu, thời hạn token, giá trị bí mật mặc định, phản hồi lỗi, bản ghi kiểm toán, che thông tin trong log và sử dụng đồng thời mã giảm giá. Các lệnh và kết quả thực tế được tổng hợp trong “PDF hướng dẫn thực hành Express”; nguyên lý cùng hình ảnh trước và sau khi chỉnh sửa được trình bày trong “PDF giáo trình Express dành cho người mới bắt đầu”.

Các video của khóa học Express sẽ tiếp tục được bổ sung sau khi phát hành. Dự kiến sẽ thêm vào bản cập nhật Phần 17 “Thử ngăn chặn bằng Express” (13 bài) và Phần 18 “Bổ sung kiến thức cho người dùng Express” (4 bài: thứ tự middleware, lỗi bất đồng bộ, cookie và session, các gói phụ thuộc npm). Video được quay và kiểm tra trên macOS.


Tấn công mạng giờ đây không còn là tin tức mà là công việc của lập trình viên


  • Khi sự cố xảy ra, người đầu tiên bị gọi đến là nhà phát triển đã tạo ra đoạn mã đó. Sự khác biệt giữa nhà phát triển từng ngăn chặn sự cố và người chưa từng làm vậy sẽ lộ rõ vào ngày sự cố xảy ra.

  • Trong thời đại AI viết mã nhanh chóng, năng lực đánh giá và chứng minh mã đó có an toàn hay không chính là giá trị của một nhà phát triển. Khóa học này giúp bạn rèn luyện năng lực ấy qua thực hành.

Bạn có đang băn khoăn như vậy không?


  • "Tôi biết mình cần học bảo mật, nhưng không biết nên bắt đầu từ đâu." → Trong phần 1, bạn sẽ xác định những nơi cần xem xét trước tiên trong dịch vụ của mình thông qua bản đồ sự cố và mô hình hóa mối đe dọa.

  • "Tôi đã đọc OWASP Top 10, nhưng không biết chúng xuất hiện như thế nào trong mã của chúng tôi." → Đây không phải ví dụ đồ chơi. Bạn sẽ chỉnh sửa mã của «Daon Market» như thể đó là mã của công ty mình; đây là một cửa hàng trực tuyến Spring Boot được fork từ mall, dự án có hơn 80 nghìn sao trên GitHub.

  • "Đã sửa rồi, nhưng tôi không chắc vấn đề thực sự đã được giải quyết chưa." → Kết quả tái hiện cùng một cuộc tấn công chuyển từ [đỏ] sang [xanh], và bài kiểm tra trong khóa học cùng bảng điểm sẽ xác nhận bằng số liệu.

  • "Khi xảy ra sự cố, tôi không biết phải làm gì. Công ty cũng không có đội ngũ bảo mật." → Bạn sẽ trực tiếp thực hành các quy tắc phát hiện, sổ tay ứng phó cảnh báo, quy trình trong giờ đầu tiên và cách quyết định có cần báo cáo sự cố rò rỉ thông tin cá nhân hay không.

Những gì bạn có được sau khi hoàn thành khóa học này

Nếu theo học khóa này đến cùng, bạn sẽ có được thành quả có thể áp dụng ngay vào dịch vụ của công ty, chứ không chỉ là kiến thức học xong rồi để đó.

1. Mã nguồn hoàn chỉnh của website bán hàng đã khắc phục toàn bộ 37 lỗ hổng

Khi bắt đầu, bảng điểm ghi “37 lỗ hổng”. Mỗi khi hoàn thành một phần, con số lại giảm xuống, cho đến khi còn 0 ở buổi học cuối cùng. Mã nguồn hoàn chỉnh đã khắc phục tất cả lỗ hổng sẽ trở thành mã chuẩn cho dịch vụ của bạn. Đây sẽ là tài liệu tham khảo để bạn mở ra mỗi khi gặp khó khăn: nên đặt bước kiểm tra quyền sở hữu ở đâu, đọc thông tin bí mật như thế nào và xử lý callback thanh toán theo cách idempotent ra sao.

2. Các thành phần bảo vệ secure-kit tích hợp vào dịch vụ của công ty

Chúng tôi đã sắp xếp các đoạn mã phòng vệ được tự tay chỉnh sửa trong lớp học thành các mô-đun theo từng nội dung cần ngăn chặn. Với Spring Boot, hãy tích hợp bằng các dependency starter và cấu hình; với Express, hãy dùng middleware. Chỉ cần chọn và bật những mô-đun cần thiết.

3. Quy tắc phát hiện rò rỉ sớm

Cùng với mã ngăn chặn, hãy ghi lại log về dấu hiệu tấn công. Hãy ghi log các tín hiệu như nỗ lực tra cứu đơn hàng của người khác, tra cứu hàng loạt, yêu cầu gửi đến địa chỉ nội bộ, rồi chuyển chúng thành bảng điều khiển Grafana và quy tắc cảnh báo. Phải mất vài tháng mới phát hiện ra vụ rò rỉ dữ liệu của Coupang. Trong khóa học này, thời gian phát hiệnsẽ được rút ngắn.

4. Cơ sở để đề xuất thay đổi kiến trúc

Chúng tôi không chỉ sửa mã. Từ trạng thái ban đầu A0, chỉ có ứng dụng và DB, chúng tôi lần lượt bổ sung cổng gateway, phân tách mạng, proxy egress, kho lưu trữ bí mật (OpenBao), cảnh báo nhật ký (Loki·Grafana) và bản sao lưu bất biến (MinIO), mở rộng đến A11. Đây sẽ là căn cứ để bạn trực tiếp sử dụng khi viết đề xuất ở công ty: “Hãy thay đổi cấu trúc theo cách này”.

5. Tài liệu cần dùng khi xảy ra sự cố

  • Khi chuông báo động vang lên, hãy làm theo từ trên xuống 6 loại runbook (giờ đầu tiên sau sự cố, truy vấn hàng loạt, từ chối quyền sở hữu, tính toàn vẹn của nhật ký kiểm toán, xuất dữ liệu hàng loạt cho đối tác, ứng phó cảnh báo)

  • 7 mẫu biểu (bản đồ bề mặt tấn công, báo cáo đánh giá ban đầu, tổng kết 30 phút đầu của sự cố, đánh giá việc báo cáo rò rỉ dữ liệu, thông báo rò rỉ dữ liệu, dòng thời gian đồ án capstone, buổi họp rút kinh nghiệm)

  • Bảng kiểm tra trực tuyến giúp rà soát dịch vụ của tôi qua 60 câu hỏi

6. Cách nhìn nhận sự cố

Sau khi kết thúc khóa học, khi có sự cố mới xuất hiện trên tin tức, bạn có thể xác định trong vòng 30 phút "Nếu là dịch vụ của chúng ta thì có thể đã chặn sự cố ở đâu?". Bởi vì bạn sẽ phân tích 22 sự cố theo cùng một khuôn khổ (điều gì đã sụp đổ → nằm ở đâu trong mã nguồn của chúng ta → làm thế nào để ngăn chặn → làm thế nào để phát hiện).

Điều còn lại trong sự nghiệp: từ một nhà phát triển chỉ tạo tính năng trở thành nhà phát triển bảo vệ dịch vụ

  • Portfolio: Mã nguồn đã sửa, báo cáo kiểm tra ban đầu và bản tổng kết phân tích sự cố sẽ được lưu lại như hồ sơ công việc của bạn.

  • Câu trả lời phỏng vấn: Bạn có thể trả lời câu hỏi "Bạn ngăn chặn sự cố bảo mật như thế nào?" bằng các sự cố thực tế và chính đoạn mã của mình.

  • Bước tiếp theo: Mô hình hóa mối đe dọa, đề xuất kiến trúc và ứng phó sự cố là những năng lực cần có ở cấp độ senior và lead. Khóa học này giúp bạn rèn luyện cả ba kỹ năng đó.

Lý do bạn nhất định nên tham gia khóa học này: Đã đến lúc nâng cấp bản thân

Có ba lý do khiến bạn nhất định phải tham gia khóa học này.

  1. Các cuộc tấn công đã được tự động hóa. Bot và AI không ngừng tìm kiếm những điểm yếu. Bên nào nắm được các quy luật và chủ động ngăn chặn trước sẽ tồn tại.

  2. Khi xảy ra sự cố, bạn sẽ là người đầu tiên được gọi đến. Nhà phát triển tạo ra đoạn mã đó phải giải thích nguyên nhân và khắc phục.

  3. Năng lực bảo đảm an toàn sẽ nâng cao giá trị của bạn. Trong thời đại AI viết code, những nhà phát triển có thể đánh giá và chứng minh code có an toàn hay không rất được săn đón.

Mỗi buổi học gồm năm bước

Vì mọi buổi thực hành đều theo cùng một trình tự, chỉ cần theo dõi vài bài là bạn sẽ quen với quy trình.

  1. Sự cố và nguyên lý: Qua một sự cố thực tế, tìm hiểu điều gì đã bị phá vỡ.

  2. Tái diễn (đỏ): Dùng make replay để xác nhận cuộc tấn công tương tự có thể thực hiện thành công trên cửa hàng trực tuyến của chúng ta. Trên màn hình hiện [레드] 취약.

  3. Ngăn chặn: Sửa trực tiếp mã Spring Boot. Vị trí cần sửa đã được đánh dấu trong mã.

  4. Xác nhận (xanh): Xem liệu cùng một lần tái hiện có chuyển thành [Xanh] bị chặn hay không, đồng thời kiểm tra tất cả bài kiểm tra của khóa học đều đạt. Cũng xác nhận người dùng bình thường vẫn có thể sử dụng như trước.

  5. Phát hiện: Gắn nhật ký sự kiện bảo mật tại vị trí đã chặn, chạy lại tình huống tái hiện để xem nhật ký đó có được ghi lại hay không.

22 sự cố thực tế được đề cập

Dựa trên kết quả điều tra chính thức và các bài báo, với mỗi sự cố, chúng tôi chỉ rõ “trong mã nguồn của chúng tôi, chỗ này đây”.

  • Trong nước: Rò rỉ thông tin SIM của SK Telecom, rò rỉ thông tin cá nhân và khóa ký của Coupang, lộ khóa truy cập TVING, vụ hack Lotte Card, tấn công nhồi thông tin đăng nhập GS Retail, thanh toán vi mô và femtocell của KT, mã độc tống tiền nhắm vào YES24 và SGI Seoul Guarantee, vụ hack Upbit

  • Quốc tế: SQL injection MOVEit, chiếm đoạt tài khoản khách hàng Snowflake, khóa ký Storm-0558 của Microsoft, tấn công bộ phận hỗ trợ của M&S·Change Healthcare, token tích hợp Salesloft Drift, sự cố ký của Binance·Bybit, Capita, Jaguar Land Rover, sự cố gián đoạn Cloudflare·AWS, v.v.

Bao gồm đầy đủ cả 10 hạng mục của OWASP Top 10:2025 và 20 rủi ro không có trong danh sách nhưng thường xảy ra trên thực tế (như chèn lậu yêu cầu, trang của người khác còn lưu trong bộ nhớ đệm, sử dụng đồng thời phiếu giảm giá, bùng nổ yêu cầu thử lại, thử thẻ, v.v.).

Thay đổi cả cấu trúc: từ A0 đến A11

Daon Market là một hệ thống thương mại điện tử thực tế gồm ứng dụng khách hàng, ứng dụng quản trị, MySQL, MongoDB, Redis, RabbitMQ và MinIO. Tất cả đều chạy trên một máy tính cá nhân bằng Docker compose. Sau mỗi phần, bạn sẽ bổ sung từng lớp bảo vệ cho hệ thống này và quan sát trực tiếp những gì đã thay đổi trên sơ đồ. Không cần tài khoản đám mây.

Được thiết kế để bạn dễ dàng làm theo

Lý do phổ biến nhất khiến người ta bỏ cuộc trong các khóa học thực hành bảo mật là "môi trường không hoạt động". Vì vậy, chúng tôi đã đầu tư nhiều công sức để giúp bạn dễ dàng làm theo.

  • Bất kỳ bài học nào cũng bắt đầu ngay tại điểm khởi đầu của bài đó: Chỉ với một dòng make goto L=8-3, mã và dữ liệu sẽ được chuyển sang trạng thái bắt đầu của bài 8-3, với đáp án của các bài học trước đã được áp dụng. Bạn có thể bỏ qua các bài học trước.

  • Cho biết lệnh cần nhập tiếp theo: dù nghỉ vài ngày rồi quay lại, make where sẽ cho biết vị trí hiện tại, còn make next sẽ hiển thị lệnh tiếp theo.

  • Khi gặp sự cố, hãy bắt đầu bằng chẩn đoán: make doctor kiểm tra Docker, bộ nhớ, ổ đĩa, cấu hình và container, đồng thời hướng dẫn cách khắc phục từng bước.

  • Nếu gặp khó khăn, hãy so sánh với lời giải: make solution sẽ hiển thị những dòng khác nhau giữa mã của bạn và lời giải.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Lập trình viên backend có từ 1–7 năm kinh nghiệm, đang xây dựng API bằng Spring Boot hoặc Express

  • Lập trình viên phụ trách các chức năng mua sắm, thanh toán, điểm thưởng và thành viên, cũng là người đầu tiên được gọi đến khi xảy ra sự cố.

  • Trưởng nhóm phát triển phải đảm nhận cả việc rà soát bảo mật lẫn ứng phó với các đợt kiểm tra dù không có nhân sự phụ trách bảo mật.

  • Dành cho những ai tò mò sự cố hack được đưa tin nằm ở đâu trong mã nguồn của chúng ta

  • Dành cho những ai đã nhận được kết quả kiểm tra lập trình an toàn nhưng chưa biết phải sửa code như thế nào.

Cần biết trước khi bắt đầu?

  • Chỉ cần có kinh nghiệm tạo một API đơn giản bằng Spring Boot hoặc Express.

  • Cần có khả năng đọc các câu lệnh SELECT và UPDATE trong SQL.

  • Bạn cần có khả năng chạy lệnh trong terminal. Chưa từng dùng Docker cũng không sao.

  • Bạn không cần có kiến thức về bảo mật. Chúng ta sẽ cùng tìm hiểu OWASP và bản đồ sự cố ngay từ Phần 1.

  • Bài thực hành chính cần Docker, Python 3.11 và make, khuyến nghị RAM 16 GB. Bài thực hành Express chỉ cần Node.js 24.

Xin chào
Đây là brunoleebi8302

Xác minh sự nghiệp

Trong thời kỳ Y2K đầy biến động của ngành CNTT, tôi bắt đầu sự nghiệp với vai trò nhà phát triển máy chủ. Sau đó, tại các hiện trường thuộc nhiều ngành nghề khác nhau, tôi đảm nhiệm đan xen vai trò nhà phát triển và kỹ sư hạ tầng, trực tiếp lĩnh hội mọi thứ từ nền tảng công nghệ đến hệ sinh thái hạ tầng phức tạp. Dựa trên kinh nghiệm xây dựng và tinh chỉnh vô số hệ thống, gần đây tôi đang tạo ra những giá trị mới trong lĩnh vực an ninh CNTT và công nghệ hội tụ.
Thêm

Chương trình giảng dạy

Tất cả

103 bài giảng ∙ (8giờ 27phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của brunoleebi8302

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

83 ₫

25%

2.910.394 ₫