Wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Câu hỏi trắc nghiệm về bảo mật web và SQL Injection

Total questions: 90

Worksheet time: 45mins

Name
Class
Date
1.

Đối với web nâng cao, khi thiết kế frontend an toàn, ưu tiên nào đúng?

a)

Tính năng > bảo mật

b)

Bảo mật tích hợp vào thiết kế từ đầu, không chắp vá sau

c)

Tối ưu UI là đủ

d)

Chỉ cần backend bảo mật

2.

SQL Injection là gì?

a)

Chèn script vào trình duyệt

b)

Chèn lệnh SQL độc hại vào câu truy vấn

c)

Chèn HTML vào trang

d)

Chèn CSS vào style

3.

Điều kiện cơ bản để xảy ra SQLi:

a)

Truy vấn được tạo bằng cách nối chuỗi trực tiếp từ input người dùng

b)

Câu lệnh SQL cố định

c)

Chỉ dùng SELECT * FROM table

d)

Không dùng DB

4.

Câu nào dễ bị SQLi?

a)

SELECT * FROM users WHERE id = ? (prepared statement)

b)

SELECT * FROM users WHERE id = '1'

c)

SELECT * FROM users WHERE id = ' + userInput + '

d)

SELECT * FROM users WHERE id = $1 (parameterized)

5.

Biện pháp phòng chống SQL Injection hiệu quả nhất là:

a)

Escape thủ công ký tự '

b)

Sử dụng prepared statements/parameterized queries

c)

Chỉ cho phép số

d)

Dùng HTTPS

6.

SQLi dạng “Union-based” cho phép attacker làm gì?

a)

Kết hợp nhiều DB lại

b)

Ghép thêm kết quả truy vấn khác vào kết quả bình thường để lộ dữ liệu

c)

Ghép file

d)

Ghép HTTP request

7.

SQLi “Blind” là khi:

a)

Không có DB

b)

Server không trả lỗi chi tiết hoặc kết quả trực tiếp, attacker suy đoán qua phản ứng (true/false, thời gian...)

c)

Attacker bị mù

d)

Không có input

8.

Để giảm thiểu hậu quả nếu SQLi xảy ra, nên:

a)

Cho tài khoản DB quyền tối đa

b)

Áp dụng nguyên tắc least privilege: tài khoản DB chỉ có quyền cần thiết

c)

Dùng tài khoản root cho tất cả

d)

Lưu DB trên desktop

9.

Trong ORM (Object-Relational Mapping), câu nào vẫn có thể gây SQLi nếu dùng sai?

a)

User.objects.get(id=1)

b)

db.raw("SELECT * FROM users WHERE email = '" + email + "'")

c)

User.query.filter(User.email == email)

d)

User.create(...)

10.

Hàm nào nguy hiểm trong nhiều ngôn ngữ khi dùng với input người dùng để xây query?

a)

format/string interpolation trên câu SQL

b)

length()

c)

toUpperCase()

d)

trim()

11.

Nếu ứng dụng chỉ dùng NoSQL (ví dụ MongoDB), SQLi:

a)

Không thể xảy ra

b)

Có thể có injection ở mức query NoSQL nếu build query từ input không an toàn

c)

Không cần quan tâm

d)

Luôn an toàn

12.

Tại sao không nên thông báo lỗi SQL chi tiết cho client?

a)

Người dùng không hiểu

b)

Tiết lộ tên bảng, cột, cấu trúc DB giúp attacker tinh chỉnh payload

c)

Làm chậm server

d)

Không liên quan

13.

Giới hạn độ dài input giúp giảm:

a)

XSS

b)

Khả năng gửi payload SQLi quá dài, giảm DoS, nhưng không đủ để chống SQLi

c)

Cần dùng DB

d)

HTTPS

14.

Stored procedure có thể giúp chống SQLi nếu:

a)

Lại build dynamic SQL bằng nối chuỗi bên trong SP

b)

Sử dụng parameter đúng cách, không nối chuỗi

c)

Không dùng parameter

d)

Không có logic

15.

Câu query nào ít nguy hiểm hơn:

a)

"SELECT * FROM users WHERE name = '

b)

"SELECT * FROM users WHERE name = $1" với values = [req.body.name]

c)

"SELECT * FROM users WHERE name LIKE '%

d)

"DELETE FROM users"

16.

Để phát hiện SQLi, logging nên:

a)

Không log gì

b)

Log query với parameter & IP (nhưng không log dữ liệu nhạy cảm)

c)

Log mật khẩu

d)

Log cookie plaintext

17.

Injection là một trong top lỗi OWASP bởi vì:

a)

Khó khai thác

b)

Dễ phòng tránh nhưng hậu quả rất nặng nếu tồn tại

c)

Không phổ biến

d)

Chỉ có ở DB cũ

18.

Nguyên tắc vàng về validation:

a)

Tin tưởng dữ liệu từ nội bộ

b)

Không tin bất kỳ input nào, luôn validate phía server

c)

Chỉ kiểm tra ở client

d)

Kiểm tra một lần khi đăng ký

19.

Kiểm tra “whitelist” nghĩa là:

a)

Cho phép mọi thứ trừ cái cấm

b)

Chỉ cho phép giá trị/định dạng xác định, chặn tất cả còn lại

c)

Không kiểm tra gì

d)

Chỉ chặn ký tự '

20.

Validation phía client bằng JavaScript:

a)

Đủ an toàn

b)

Dùng để cải thiện UX, nhưng không thay thế validation phía server

c)

Không cần thiết

d)

Bắt buộc với mọi web

21.

Khi nhận input “số lượng”, kiểu validation hợp lý là:

a)

Kiểm tra là số, trong khoảng hợp lệ (>=0, < giới hạn)

b)

Chỉ check không rỗng

c)

Chỉ check độ dài

22.

Việc chuẩn hóa (normalize) dữ liệu trước khi validate giúp:

a)

Tăng kích thước

b)

Tránh bypass bằng biến thể ký tự (ví dụ khoảng trắng, Unicode)

c)

Giảm bảo mật

d)

Không ảnh hưởng

23.

Với input email, validate hợp lý là:

a)

Chỉ check có ký tự “@”

b)

Dùng regex hoặc thư viện để kiểm tra định dạng cơ bản

c)

Gửi mail thử

d)

Không cần check

24.

Với input file upload, validation cần:

a)

Chỉ dựa vào phần mở rộng .jpg/.png

b)

Kiểm tra content-type, kiểm tra magic bytes, giới hạn kích thước, whitelist loại file

c)

Không kiểm tra

d)

Cho phép mọi định dạng

25.

Lý do không nên tự viết regex phức tạp cho mọi thứ (như URL, email, số thẻ) nếu không cần:

a)

Regex không an toàn

b)

Dễ sai, khó bảo trì, có thể tạo lỗ hổng performance (ReDoS)

c)

Không chạy trên server

d)

Không hỗ trợ trong ngôn ngữ

26.

Validation nên được thực hiện:

a)

Chỉ khi insert

b)

Khi insert, update và trước khi xử lý logic quan trọng

c)

Chỉ khi delete

d)

Không cần

27.

Output encoding và input validation khác nhau ở điểm:

a)

Input validation xử lý đầu vào, output encoding xử lý trước khi xuất ra

b)

Cả hai giống nhau

c)

Chỉ cần 1 trong 2

d)

Không dùng cho bảo mật

28.

“Server-side validation” nghĩa là:

a)

Kiểm tra dữ liệu trên máy client

b)

Kiểm tra dữ liệu trên server trước khi xử lý

c)

Kiểm tra bằng tay

d)

Kiểm tra trong DB

29.

Một mẫu tốt khi validate JSON request là:

a)

Parse JSON rồi dùng schema validation (ví dụ Joi, Yup...)

b)

Dùng eval

c)

Không parse

d)

Chỉ check null

30.

Validation giúp chống:

a)

SQLi (phần nào), XSS (phần nào), dữ liệu sai logic

b)

Mọi loại tấn công

c)

Chỉ XSS

d)

Chỉ SQLi

31.

Khi có nhiều nguồn input (form, API, import file), validation nên:

a)

Chỉ áp dụng cho form

b)

Áp dụng cho tất cả đường vào dữ liệu

c)

Chỉ áp dụng cho API

d)

Không cần

32.

Với input “ngày sinh”, validate hợp lý là:

a)

Chấp nhận mọi chuỗi

b)

Định dạng ngày & phạm vi hợp lý (không ở tương lai xa, không quá 150 năm trước, tuỳ yêu cầu)

c)

Chỉ check length

d)

Không check

33.

“Canonicalization” trong bảo mật dữ liệu là:

a)

Mã hóa dữ liệu

b)

Chuyển dữ liệu về dạng chuẩn (lowercase, remove dot, normalize path...) trước khi so sánh/validate

c)

Xóa dữ liệu

d)

Định dạng JSON

34.

Với input đường dẫn file từ user, tốt nhất:

a)

Cho phép đường dẫn tuỳ ý

b)

Không cho phép user cung cấp đường dẫn trực tiếp, sử dụng ID trỏ tới file được cấu hình sẵn

c)

Ghép vào path

d)

Không validate

35.

Validation kiểu “blacklist ký tự nguy hiểm” có nhược điểm:

a)

Dễ thiếu trường hợp, attacker tìm cách bypass

b)

Không có nhược điểm

c)

Khó implement

d)

Không chạy

36.

Tại sao dùng thư viện cũ là nguy hiểm?

a)

Chạy chậm hơn

b)

Có thể chứa lỗ hổng đã được công bố và dễ bị khai thác

c)

Không chạy trên server

d)

Làm mã xấu

37.

Công cụ như npm audit, pip audit dùng để:

a)

Minify code

b)

Phát hiện dependency có lỗ hổng đã biết

c)

Cải thiện hiệu năng

d)

Tự viết test

38.

Khi cập nhật thư viện, bước quan trọng là:

a)

Cập nhật trực tiếp trên production

b)

Test trên môi trường staging trước

c)

Không cần test

d)

Rollback ngay

39.

Tại sao nên khóa version (lockfile) cho dependency?

a)

Để mọi môi trường dùng đúng phiên bản đã test

b)

Để khó cài hơn

c)

Để không cần update

d)

Để giảm dung lượng

40.

“Transitive dependency” là:

a)

Thư viện mà ứng dụng gọi trực tiếp

b)

Thư viện mà thư viện khác phụ thuộc, gián tiếp được dùng

c)

Thư viện không dùng

d)

Hệ điều hành

41.

Đưa thẳng script từ CDN của bên thứ ba mà không kiểm soát phiên bản có nguy cơ:

a)

Bị thay đổi nội dung script nếu CDN bị tấn công

b)

Không sao vì CDN an toàn tuyệt đối

c)

Không thể tấn công

d)

Chỉ ảnh hưởng tốc độ

42.

Khi phát hiện thư viện có CVE nghiêm trọng, nên:

a)

Phớt lờ

b)

Cập nhật phiên bản vá, hoặc thay thế thư viện khác, test kỹ

c)

Gỡ toàn bộ ứng dụng

d)

Không dùng DB

43.

“Security patch” là:

a)

Bản vá bảo mật cho phần mềm/thư viện

b)

Bản nâng cấp UI

c)

Bản quảng cáo

d)

Bản log

44.

Dùng quá nhiều thư viện không cần thiết có thể:

a)

Tăng bề mặt tấn công (nhiều lỗ hổng tiềm ẩn)

b)

Tăng bảo mật

c)

Không ảnh hưởng

d)

Giảm độ phụ thuộc

45.

Kiểm tra license của thư viện liên quan đến:

a)

Bảo mật

b)

Pháp lý & cách sử dụng, phân phối

c)

Hiệu năng

d)

Tên biến

46.

Quá trình “hardening” một dependency nghĩa là:

a)

Gỡ bỏ tính năng không dùng, cấu hình an toàn nhất

b)

Viết lại

c)

Không dùng

d)

Đổi tên

47.

Dùng package từ nguồn không rõ trên registry (npm, PyPI) có nguy cơ:

a)

Không sao, ai cũng dùng

b)

Có thể bị cài mã độc, mất an toàn

c)

Tăng tốc

d)

Giảm kích thước

48.

Khi app dùng framework cũ hết hỗ trợ (end-of-life), rủi ro là:

a)

Không nhận cập nhật bảo mật mới

b)

Nhanh hơn

c)

Không cần bảo mật

d)

Được hỗ trợ tốt hơn

49.

DoS (Denial of Service) là:

a)

Tấn công đánh cắp dữ liệu

b)

Tấn công làm dịch vụ không thể phục vụ người dùng hợp lệ

c)

Tấn công XSS

d)

Tấn công SQLi

50.

DDoS khác DoS ở chỗ:

a)

DDoS đến từ nhiều nguồn/tác nhân phân tán

b)

DDoS nhẹ hơn

c)

DDoS chỉ xảy ra trên LAN

d)

DDoS là lỗi phần mềm

51.

Mục tiêu phổ biến của DDoS:

a)

Tăng bảo mật

b)

Làm cạn tài nguyên (CPU, RAM, băng thông) của server

c)

Sửa dữ liệu

d)

Lấy mật khẩu

52.

“Rate limiting” là:

a)

Giới hạn băng thông

b)

Giới hạn số request từ một client trong khoảng thời gian

c)

Giới hạn dung lượng DB

d)

Giới hạn số file log

53.

Rate limiting giúp:

a)

Chống mọi DDoS

b)

Giảm tác động của tấn công brute-force, spam request, DoS ở mức ứng dụng

54.

Một chiến lược rate limiting đơn giản là:

a)

Cho phép vô hạn request

b)

Cho phép tối đa N request mỗi IP trong X giây

c)

Cấm mọi request

d)

Chỉ cho phép GET

55.

Lý do IP-based rate limiting có hạn chế:

a)

IP luôn 1-1 với user

b)

NAT, proxy, VPN khiến nhiều user chung IP hoặc attacker dùng nhiều IP

c)

Không đo được

d)

Chỉ dùng cho HTTPS

56.

“Application-level DoS” tấn công vào:

a)

Hạ tầng mạng

b)

Logic ứng dụng, sử dụng request hợp lệ nhưng đắt tài nguyên (ví dụ truy vấn rất nặng)

c)

Firewall

d)

Hệ điều hành

57.

Một ví dụ phòng chống brute-force login bằng rate limiting:

a)

Cho login vô hạn

b)

Sau N lần sai, tạm khóa account/thêm delay/captcha

c)

Không log

d)

Không hash mật khẩu

58.

Khi thiết kế API public, rate limiting nên:

a)

Không dùng

b)

Dựa trên API key, user, IP... kết hợp

c)

Dựa trên màu giao diện

d)

Dựa trên DB

59.

Pattern để tạm ngừng gọi service downstream đang lỗi, tránh làm lan rộng sự cố

a)

Không liên quan

b)

Tăng băng thông

c)

Tắt server

d)

Tăng băng thông

60.

Kết hợp cache và rate limiting giúp:

a)

Giảm tải cho backend, chống DoS tốt hơn

b)

Không liên quan

c)

Tăng dung lượng

d)

Giảm bảo mật

61.

Ở tầng network, dịch vụ chống DDoS có thể:

a)

Lọc traffic bất thường trước khi đến server

b)

Mã hóa DB

c)

Chạy JS

d)

Lọc XSS

62.

Logging request số lượng lớn bất thường giúp:

a)

Phát hiện sớm DoS/DDoS

b)

Tạo DoS

c)

Chậm

d)

Không hữu ích

63.

Giới hạn kích thước body request giúp:

a)

Chống tấn công upload file/corpous quá lớn gây DoS

b)

Chỉ ảnh hưởng UI

c)

Không cần

d)

Chỉ đối với GET

64.

Backend security tập trung vào:

a)

Bảo vệ logic xử lý server và dữ liệu

b)

Bảo vệ browser

c)

Bảo vệ giao diện

d)

Bảo vệ CSS

65.

Một hệ thống bảo mật tốt thường:

a)

Ẩn mọi lỗi, không log

b)

Log chi tiết nội bộ, cung cấp thông báo chung cho người dùng

c)

In stack trace ra màn hình

d)

Không có lỗi

66.

Error message như “syntax error near ' OR '1'='1'” cho user là:

a)

Rất hữu ích cho attacker

b)

Không sao

c)

Cần thiết

d)

Không liên quan

67.

Nguyên tắc “defense in depth” nghĩa là:

a)

Chỉ dùng một lớp bảo vệ

b)

Nhiều lớp bảo vệ: validation, encoding, auth, logging, monitoring...

c)

Không cần backup

d)

Không cần rate limit

68.

Dùng HTTPS trên backend API:

a)

Không ảnh hưởng bảo mật

b)

Bảo vệ dữ liệu khỏi bị nghe lén và sửa đổi trên đường truyền

c)

Chỉ để SEO

d)

Chỉ dùng cho trang login

69.

Đối với mật khẩu, backend nên:

a)

Lưu plaintext

b)

Hash kèm salt với thuật toán mạnh (bcrypt, Argon2...)

c)

Mã hóa reversible

d)

Gửi email chứa mật khẩu định kỳ

70.

Lỗi “Insecure Direct Object Reference (IDOR)” là:

a)

Cho phép người dùng truy cập tài nguyên của người khác chỉ bằng đổi ID trong URL

b)

Cho phép XSS

c)

Cho phép SQLi

d)

Cho phép CSRF

71.

Để tránh IDOR, backend phải:

a)

Tin ID người dùng gửi

b)

Kiểm tra quyền truy cập dựa trên user hiện tại trước khi trả dữ liệu

c)

Chỉ mã hóa ID

d)

Dùng GET

72.

Khi thiết kế API REST, nên tránh gửi dữ liệu nhạy cảm qua:

a)

Body POST

b)

Header Authorization

c)

URL query và path (vì có thể bị log trong nhiều nơi)

d)

HTTPS

73.

Sử dụng “prepared statement” liên quan chủ yếu đến:

a)

XSS

b)

SQL injection

c)

CSRF

d)

DDoS

74.

Để bảo vệ API khỏi abuse, ngoài rate limit còn có thể dùng:

a)

API key, OAuth, quota, monitoring

b)

Đổi port

c)

Tắt HTTPS

d)

Không log

75.

Một lý do không nên trả về toàn bộ object user (bao gồm password hash, token) cho frontend là:

a)

Tăng băng thông

b)

Lộ thông tin nhạy cảm

c)

Dễ bị lỗi

d)

Tốn CPU

76.

“Least privilege” với account ứng dụng nghĩa là:

a)

User nào cũng quyền admin

b)

Mỗi thành phần chỉ có quyền tối thiểu cần thiết

c)

Không dùng phân quyền

d)

Tất cả quyền root

77.

Dùng ORM giúp:

a)

Tự động chống mọi SQLi

b)

Giảm nguy cơ SQLi nếu dùng API ORM đúng cách, nhưng vẫn có thể injection nếu dùng raw query

c)

Không cần DB

d)

Không cần validate

78.

Khi triển khai log, cần chú ý:

a)

Log mọi thứ kể cả mật khẩu

b)

Không log gì

c)

Log đủ để truy vết (ai, hành động gì, lúc nào, ở đâu) nhưng tránh dữ liệu nhạy cảm

d)

Log chỉ trên client

79.

Một cách để phát hiện tấn công tự động (bot) là:

a)

Phân tích pattern request (tần suất, user agent, hành vi)

b)

Không phân tích

c)

Dựa vào màu nền

d)

Dựa vào favicon

80.

“Input tampering” là:

a)

Người dùng sửa HTML

b)

Attacker thay đổi dữ liệu gửi lên (ví dụ giá sản phẩm trong form, role...)

c)

Không liên quan

d)

Tắt JS

81.

Để chống input tampering, backend phải:

a)

Tin dữ liệu từ hidden input

b)

Không dựa vào giá trị client gửi, luôn tính toán lại những thứ quan trọng trên server

c)

Lưu giá trên client

d)

Không check

82.

Một hệ thống production cần cấu hình:

a)

Chế độ debug ON, stack trace hiển thị

b)

Tắt debug, log nội bộ, error page chung

c)

Không log

d)

Log ra console chỉ

83.

Tại sao nên tách database server ra khỏi web server?

a)

Khó deploy

b)

Tăng bảo mật & khả năng mở rộng

c)

Giảm hiệu năng

d)

Không liên quan

84.

“Security by obscurity” (chỉ dựa vào che giấu) là:

a)

Cách tiếp cận chính thống

b)

Không nên dùng như biện pháp chính, chỉ là lớp phụ thêm

c)

An toàn tuyệt đối

d)

Không cần thiết

85.

Phần mềm quét lỗ hổng (vulnerability scanner) giúp:

a)

Tự sửa lỗi

b)

Phát hiện lỗi tiềm ẩn (SQLi, XSS, config...) cần dev xem xét xử lý

c)

Tăng load

d)

Tạo lỗi

86.

Trong mô hình 3 lớp (presentation – logic – data), backend security chủ yếu nằm ở:

a)

A. Presentation

b)

B. Logic và data layer

c)

C. Browser

87.

Một API trả về dữ liệu theo page (pagination) giúp:

a)

Giảm băng thông, giảm khả năng DoS qua request 1 lần lấy cực nhiều dữ liệu

b)

Không liên quan bảo mật

c)

Tăng tải

d)

Không cần DB

88.

“Secure coding practices” bao gồm:

a)

Không cần review

b)

Review code, dùng pattern an toàn, tránh anti-pattern (nối chuỗi SQL, eval...)

c)

Chỉ viết nhanh

d)

Chỉ test tính năng

89.

Đưa secret (key, password DB) vào repo Git công khai là:

a)

Bình thường

b)

Rất nguy hiểm, phải rotate key và xóa khỏi lịch sử

c)

Không sao vì Git an toàn

d)

Chỉ ảnh hưởng hiệu năng

90.

Môi trường “staging” dùng để:

a)

Test tính năng & bảo mật gần giống production trước khi deploy thật

b)

Chạy bản debug

c)

Lưu log

d)

Không cần