Backend cần bảo mật những gì là đủ? Hướng dẫn toàn diện cho một website cơ bản.
Trong phát triển web, nhiều lập trình viên mới thường nghĩ rằng frontend đã kiểm tra dữ liệu rồi thì backend chỉ cần nhận và lưu lại. Tuy nhiên, dưới góc nhìn của hacker, mọi thứ từ phía client đều không đáng tin.
Hacker không sử dụng giao diện website của bạn. Họ gửi request trực tiếp đến server, sửa dữ liệu, bypass validation, hoặc giả mạo quyền truy cập.
Vì vậy, backend phải là tuyến phòng thủ cuối cùng và quan trọng nhất.
Trong bài viết này, chúng ta sẽ đi qua những thứ backend cần kiểm tra để một website cơ bản đủ an toàn, kèm theo góc nhìn của hacker để hiểu vì sao từng bước lại quan trọng.

Nguyên tắc đầu tiên trong bảo mật web:
“Never trust the client.”
Frontend có thể kiểm tra:
Email đúng format
Password đủ 8 ký tự
Input không để trống
Nhưng hacker có thể bỏ qua hoàn toàn frontend bằng cách:
dùng Postman
dùng curl
viết script gửi request trực tiếp
Ví dụ hacker gửi request như sau:
{
"email": "abc",
"password": ""
}Hoặc thậm chí:
{
"role": "admin"
}Nếu backend không kiểm tra lại, hệ thống có thể:
tạo tài khoản lỗi
cấp quyền admin
ghi dữ liệu rác vào database
Vì vậy backend phải validate lại toàn bộ dữ liệu.
2. Kiểm tra dữ liệu đầu vào (Input Validation)
Backend cần kiểm tra:
Kiểm tra kiểu dữ liệu
Ví dụ:
age phải là number
email phải là string
id phải là số
Ví dụ Node.js:
if (typeof age !== "number") {
return res.status(400).json({ error: "Invalid age" })
}Nếu không kiểm tra, hacker có thể gửi:
{
"age": "DROP TABLE users"
}Đây là bước đầu để ngăn nhiều kiểu tấn công.
Kiểm tra độ dài dữ liệu
Hacker đôi khi gửi payload cực dài để:
làm crash server
làm đầy database
bypass logic
Ví dụ:
if (username.length > 50) {
return res.status(400).json({ error: "Username too long" })
}Kiểm tra whitelist thay vì blacklist
Sai lầm phổ biến:
if (username.includes("<script>"))Hacker chỉ cần encode:
%3Cscript%3ECách tốt hơn:
Chỉ cho phép ký tự hợp lệ:
/^[a-zA-Z0-9_]+$/3. Kiểm tra Authentication (xác thực người dùng)
Backend phải xác nhận:
người dùng đã đăng nhập chưa
token có hợp lệ không
token có hết hạn không
Ví dụ middleware:
if (!req.user) {
return res.status(401).json({ error: "Unauthorized" })
}Nếu thiếu bước này, hacker chỉ cần gọi API:
POST /api/create-postvà tạo dữ liệu dù chưa đăng nhập.
4. Kiểm tra Authorization (phân quyền)
Đây là lỗi rất phổ biến trong các website nhỏ.
Ví dụ API:
DELETE /api/users/123Backend chỉ kiểm tra:
user đã login chưaNhưng hacker có thể xoá bất kỳ user nào.
Backend cần kiểm tra thêm:
user có quyền xoá khôngVí dụ:
if (req.user.role !== "admin") {
return res.status(403).json({ error: "Forbidden" })
}Hoặc kiểm tra ownership:
if (post.userId !== req.user.id) {
return res.status(403).json({ error: "Not your post" })
}5. Chống SQL Injection
Một trong những kỹ thuật hacker phổ biến nhất.
Ví dụ query nguy hiểm:
const query = "SELECT * FROM users WHERE email = '" + email + "'"Hacker gửi:
' OR 1=1 --Query sẽ trở thành:
SELECT * FROM users WHERE email = '' OR 1=1Hacker có thể đăng nhập vào bất kỳ tài khoản nào.
Cách an toàn:
Prepared statement
db.query(
"SELECT * FROM users WHERE email = ?",
[email]
)Hoặc dùng ORM:
Prisma
Sequelize
TypeORM
6. Kiểm tra Rate Limit (chống spam API)
Nếu không giới hạn request, hacker có thể:
brute force password
spam API
làm quá tải server
Ví dụ:
10000 request / phútGiải pháp:
rate limit theo IP
rate limit theo user
Ví dụ Express:
express-rate-limit7. Kiểm tra file upload
Upload file là nơi hacker thường tấn công.
Ví dụ hacker upload:
shell.phpNếu server cho phép chạy file này, hacker có thể:
chạy code trên server
chiếm toàn bộ website
Backend cần:
giới hạn loại file
đổi tên file
lưu ngoài public folder
Ví dụ:
Cho phép:
jpg
png
pdf8. Kiểm tra CSRF
CSRF xảy ra khi hacker dụ người dùng click link độc hại.
Ví dụ:
User đã login vào website.
Hacker gửi link:
example.com/delete-accountNếu backend không kiểm tra CSRF token, tài khoản có thể bị xoá.
Giải pháp:
CSRF token
SameSite cookie
9. Logging và Monitoring
Một hệ thống tốt phải ghi lại hành vi bất thường.
Ví dụ:
login thất bại 20 lần
API bị spam
request payload lạ
Logs giúp:
phát hiện tấn công
debug sự cố
truy vết hacker
10. Không lộ thông tin lỗi
Sai lầm phổ biến:
Backend trả về lỗi:
SQL syntax error near...Hacker có thể dùng thông tin này để:
đoán cấu trúc database
tìm lỗ hổng
Cách tốt hơn:
{
"error": "Internal server error"
}Chi tiết lỗi chỉ lưu trong server log.
Checklist backend cơ bản cần có
Một backend cơ bản nên có ít nhất:
Input validation
Authentication
Authorization
SQL injection protection
Rate limiting
File upload validation
CSRF protection
Logging
Error handling an toàn
Nếu thiếu một trong những thứ trên, hacker có thể khai thác.
Góc nhìn hacker: vì sao backend luôn là mục tiêu chính
Frontend chỉ là giao diện.
Hacker thường tấn công:
API
Database
Authentication
Logic backend
Một hacker giỏi sẽ:
bỏ qua giao diện
đọc API
sửa request
tìm endpoint ẩn
brute force logic
Do đó, khi xây dựng hệ thống web:
Frontend để phục vụ người dùng, Backend để chống hacker.
Kết luận
Một backend “đủ an toàn” cho website cơ bản không cần quá phức tạp, nhưng phải kiểm soát chặt mọi dữ liệu đi vào hệ thống.
Nguyên tắc quan trọng nhất:
Không tin client
Luôn validate dữ liệu
Kiểm tra quyền truy cập
Giới hạn request
Ẩn thông tin hệ thống
Nếu làm đúng những điều này, bạn đã tránh được 80% lỗi bảo mật phổ biến trên web.
Nếu bạn là lập trình viên web, hãy luôn nhớ:
Hacker không phá hệ thống bằng code phức tạp, họ phá hệ thống bằng những thứ backend quên kiểm tra.
📢 Dịch vụ hỗ trợ lập trình & phần mềm
🚀 Bạn đang học CNTT hoặc cần phần mềm thực tế?
💻 TAT TEAM Chúng tôi hỗ trợ:
Dịch vụ | Nội dung |
🎓 Bài tập & đồ án | Hỗ trợ đúng chuẩn, dễ bảo vệ |
🧩 Phần mềm cho doanh nghiệp | Bán hàng, kho, nhân sự – giúp tự động hóa quy trình và tăng doanh thu |
👨💻 Hướng dẫn lập trình | Hiểu bản chất – code thực tế |
🛠️ Fix bug & tối ưu | Dự án cá nhân & doanh nghiệp |
Blog được biên soạn bởi TAT TEAM, Hỗ trợ lập trình và xây dựng phần mềm!







