Nền tảng · 35–50 phút · Foundation

, & cho security

Hiểu trình duyệt biến thành đọc/ghi , nền tảng để hiểu client-side security.

SAU BÀI NÀY ÔNG SẼ
  • Giải thích , & cho security bằng ngôn ngữ của chính mình
  • Dùng để tách quan sát khỏi kết luận
  • Hoàn thành lab , & cho security an toàn và nêu được /
LÀM CÙNG NHAU · SAFE LAB

Làm cùng nhau: chữ thường hay ?

Nhận ra vì sao an toàn hơn quan trọng hơn việc nhớ một chuỗi đặc biệt.

  1. Bước 1: Nhìn dòng `message.textContent = ...` trong ví dụ.

    Kết quả cần thấy: Giá trị `name` được hiển thị như chữ trong phần tử message.

    Vì sao: textContent nói với browser rằng đây là text, không phải cấu trúc mới.

    Đừng nhầm: Không kết luận textContent giải quyết mọi lỗi web; nó chỉ đúng cho context text .

  2. Bước 2: So sánh với dòng chú thích dùng `innerHTML`.

    Kết quả cần thấy: innerHTML yêu cầu browser phân tích chuỗi như markup, nên cần tránh với input không tin cậy.

    Vì sao: Đây là khác biệt : cùng dữ liệu nhưng đi vào khác có mức rủi ro khác.

    Đừng nhầm: Đừng chỉ tìm chữ `innerHTML` rồi báo lỗi; phải kiểm tra dữ liệu có do người dùng ảnh hưởng và có escaping phù hợp không.

  3. Bước 3: Dự đoán điều xảy ra nếu tên người dùng chứa dấu `<` khi dùng textContent.

    Kết quả cần thấy: Dấu đó vẫn hiện như một ký tự, không tự tạo thẻ .

    Vì sao: Dự đoán output giúp kiểm tra mental model mà chưa cần chạy payload hay truy cập target thật.

    Đừng nhầm: Không dùng thử nghiệm trên website public; browser DevTools chỉ nên dùng với app của bạn hoặc lab được phép.

01

Bức tranh lớn

Hiểu trình duyệt biến thành đọc/ghi , nền tảng để hiểu client-side security. Chủ đề này quan trọng vì mô tả cấu trúc; là representation runtime; tương tác với và Web APIs. Data từ URL, storage hoặc message có thể trở thành ; ghi /script-sensitive context có thể thành . Khi đi , hoặc , phần khó thường không phải nhớ tên công cụ mà là nhận ra mô hình này trong một biến thể mới. Ở web, hãy nghĩ bằng request → routing → application logic → data store → response. Browser chỉ là một client; khi hiểu và state, bạn sẽ bớt phụ thuộc vào việc bấm UI và đọc được hành vi thật của ứng dụng. Mục tiêu của phần nền tảng là dự đoán được hệ thống sẽ làm gì trước khi chạy lệnh. Nếu output khác dự đoán, dùng khác biệt đó để cập nhật mental model. Trước khi sang phần tiếp theo, hãy tự nói lại chủ đề “, & cho security” bằng hai câu: hệ thống đang cố làm gì, và quyết định nào có thể tạo ra rủi ro nếu sai.

02

Mental model & từ khóa

mô tả cấu trúc; là representation runtime; tương tác với và Web APIs. Data từ URL, storage hoặc message có thể trở thành ; ghi /script-sensitive context có thể thành . Các thuật ngữ trọng tâm của bài là: , , , , . Hãy liên kết chúng với luồng dữ liệu và quyết định bảo mật thay vì học định nghĩa rời rạc. Các từ khóa cần nối thành một mô hình duy nhất gồm: , , , , . Đừng học chúng như flashcard rời rạc. Hãy chỉ ra dữ liệu đi từ đâu tới đâu, thành phần nào giữ state, thành phần nào ra quyết định và đâu là . Khi mô hình đúng, bạn có thể dự đoán một thay đổi nhỏ sẽ làm output thay đổi thế nào. mô tả cấu trúc; là representation runtime; tương tác với và Web APIs.

const name = "Mai";
message.textContent = `Chào ${name}`; // hiện chữ, không đọc name như HTML
// Tránh: message.innerHTML = name;
03

Quy trình quan sát có kiểm chứng

DevTools Elements/Sources cho phép theo dõi element, event và script. Không phải mọi client-side validation đều là security control vì client nằm dưới quyền người dùng. Luôn bắt đầu bằng expected behavior rồi mới tìm deviation; như vậy bạn biết mình đang chứng minh điều gì. DevTools Elements/Sources cho phép theo dõi element, event và script. Không phải mọi client-side validation đều là security control vì client nằm dưới quyền người dùng. Bắt đầu bằng expected behavior và một sạch. Sau đó chỉ thay một biến, ghi input/output, timestamp hoặc state cần thiết rồi lặp lại để loại trừ ngẫu nhiên. Nếu tool đưa ra một nhãn như “open”, “vulnerable”, “failed” hay “suspicious”, quay về field thô tạo ra nhãn đó và xác minh bằng cách thứ hai. Đây là thói quen giúp tránh và cũng giúp report tái hiện được.

04

Case lab: từ dữ kiện tới kết luận

Đọc đoạn giả lập lấy query parameter rồi gán vào textContent hoặc innerHTML; xác định variant nào an toàn hơn và vì sao. Đây là tình huống tổng hợp trong lab của khóa học, không dùng target thật. Bài thực hành trọng tâm là: Đọc đoạn giả lập lấy query parameter rồi gán vào textContent hoặc innerHTML; xác định variant nào an toàn hơn và vì sao. Khi làm, chia note thành bốn cột: FACT (thấy trực tiếp), HYPOTHESIS (giả thuyết), TEST (thay đổi nào sẽ phân biệt các giả thuyết) và RESULT (kết quả). Sau khi có đáp án, tạo ít nhất hai biến thể: đổi identity/context và đổi input/state. Nếu kết luận vẫn đứng vững qua các biến thể, bạn mới có confidence cao hơn.

05

Bẫy tư duy & cách tự debug

Lỗi hay gặp là nhìn thấy một tín hiệu rồi gắn ngay nhãn vulnerability hoặc dùng công cụ trước khi hiểu hệ thống. Với chủ đề này, hãy nhớ: là representation runtime của trang; có thể biến dữ liệu thành node hoặc nội dung. Với bài này, mệnh đề phải giữ là: là representation runtime của trang; có thể biến dữ liệu thành node hoặc nội dung. Nếu bị kẹt, đừng tăng số lượng command/payload một cách mù quáng. Quay lại , thu hẹp câu hỏi, kiểm tra assumptions và đọc error/output theo từng lớp. Trong lab hoặc , đặt rồi đổi hướng khi không có mới; trong /, luôn kiểm tra trước khi mở rộng bề mặt thử nghiệm.

06

Phòng thủ, & tiêu chí qua bài

Encode output theo đúng context, tránh dangerous , dùng framework an toàn và enforce validation/ phía server. Khi review fix, kiểm tra cả positive case, negative case và một biến thể gần kề để tránh vá đúng một chuỗi kiểm thử. Một tốt phải chỉ ra root cause, control đặt ở đúng và cách . Hãy kiểm tra positive case hợp lệ, negative case bị từ chối và ít nhất một biến thể gần kề để tránh “vá đúng payload”. Bạn có thể coi mình qua bài khi: (1) giải thích , & cho security không nhìn tài liệu; (2) dự đoán được một output mới; (3) hoàn thành lab bằng ; (4) nêu được cách phòng thủ; và (5) phân biệt được observation với conclusion.

THỰC HÀNH AN TOÀN · GUIDED

Bài tập

Đọc đoạn giả lập lấy query parameter rồi gán vào textContent hoặc innerHTML; xác định variant nào an toàn hơn và vì sao. Deliverable: ghi trạng thái ban đầu, dự đoán kết quả trước khi thao tác, chụp lại output quan trọng và giải thích chênh lệch giữa dự đoán với thực tế. Làm lại một biến thể nhỏ để chứng minh bạn hiểu mô hình chứ không chỉ nhớ đúng một ví dụ.

Gợi ý: Đừng tìm đáp án ngay. Với , & cho security, ghi trước, thay đúng một biến rồi giải thích vì sao output đổi hoặc không đổi.
safe-terminal · /home/student/lab
MEMORY ONLY
WhiteHat Safe Terminal v2 · MEMORY-ONLY SIMULATOR · gõ help để bắt đầu.
$
KNOWLEDGE CHECK · CẦN 80%

5 câu kiểm tra

Không trừ điểm. Mục tiêu là giải thích được lý do, không phải đoán đúng.

Câu 1/5

Phát biểu nào đúng nhất về , & cho security?

Câu 2/5

Trong một lab về “, & cho security”, nào phù hợp nhất để bắt đầu kiểm chứng?

Câu 3/5

Control/ nào bám sát chủ đề “, & cho security” nhất?

Câu 4/5

Mental model nào nên giữ khi gặp một biến thể mới của “, & cho security”?

Câu 5/5

Nếu bài “, & cho security” cần thao tác có tính offensive, môi trường nào phù hợp?

PROGRESS

Đánh dấu hoàn thành

Cần đạt ít nhất 80% quiz trước khi chốt bài.