phân tích code sau. nhược
- Sao chép liên kết
- Chia sẻ với Facebook
- Chia sẻ với X
- Chia sẻ với Pinterest
- Chia sẻ với Linkedin
- Gửi bài qua Email
gửi email cho tác giả
phân tích code sau. nhược điểm và ưu điểm. cần cải tiến gì cho thông minh hơn
Code này là một hệ thống thi trắc nghiệm online bằng Flask khá lớn và đã có nhiều tính năng thực tế. Kiến trúc hiện tại thiên về “all-in-one monolithic app” — tức toàn bộ logic nằm trong 1 file Python.
Tổng thể đánh giá:
- Mức độ hoàn thiện: khá cao
- Có tư duy hệ thống thật
- Có realtime monitor
- Có phân quyền admin
- Có session thi tĩnh chống đổi đề
- Có lưu lịch sử chi tiết
- Có luyện tập + thi thật riêng
- Có import/export đề
Nhưng:
- Còn nhiều lỗ hổng bảo mật
- Chưa tối ưu scale
- Logic bị lặp
- Dễ crash khi nhiều người thi
- Có nhiều route nguy hiểm
- Chưa “smart” theo kiểu hệ thống thi chuyên nghiệp
ƯU ĐIỂM
1. Kiến trúc thi “đề tĩnh” là đúng hướng
Bạn làm rất đúng ở đoạn:
- tạo đề 1 lần
- lưu vào
exam_details_v2 - submit chấm lại server-side
Điểm này rất quan trọng vì:
- tránh đổi đề khi F5
- tránh sửa HTML để đổi đáp án
- tránh random lại đề
- admin audit được
Đây là hướng đúng của hệ thống thi thật.
2. Có realtime monitor bằng SocketIO
Ý tưởng tốt:
ONLINE_USERS = {}
socketio.emit('update_monitor', ONLINE_USERS)
Admin thấy:
- ai đang thi
- thời gian
- số câu làm
- điểm tạm
Đây là tính năng mạnh.
3. Tách EXAM và PRACTICE
Đây là thiết kế đúng:
/quiz/practice
Thi thật và luyện tập không nên dùng chung logic.
4. Có session giới hạn thời gian
Bạn xử lý:
remaining_time_seconds
last_access_timestamp
=> chống F5 reset timer.
Khá ổn.
5. SQL parameterized
Bạn dùng:
WHERE id=%s
=> chống SQL injection cơ bản.
Đây là điểm tốt.
6. Có hệ thống quản trị đầy đủ
Có:
- upload câu hỏi
- upload thí sinh
- edit inline
- config đề
- export offline
- monitor
Đây là hệ thống thật chứ không phải demo.
NHƯỢC ĐIỂM LỚN
1. CỰC KỲ NGUY HIỂM:
Hardcode mật khẩu DB
DB_CONFIG = {
"password": "123456",
}
Đây là lỗi bảo mật lớn.
Cần:
os.getenv("DB_PASSWORD")
Dùng .env
2. SECRET KEY cực yếu
app.secret_key = "cong_nghe_iot_2026"
Có thể forge session Flask.
Người ta có thể:
- fake admin
- fake user
- sửa session cookie
Cần:
import secrets
app.secret_key = secrets.token_hex(32)
3. PASSWORD lưu plaintext
Bạn đang:
password = "123"
KHÔNG HASH.
Đây là lỗi rất nặng.
Cần:
from werkzeug.security import generate_password_hash
from werkzeug.security import check_password_hash
4. Có thể bypass session thi
Bạn đang tin:
session['current_exam_session_id']
Nếu attacker lấy cookie session:
- có thể submit hộ
- có thể sửa flow
Cần:
- CSRF token
- session binding
- IP binding
- user-agent binding
5. ONLINE_USERS dùng RAM
ONLINE_USERS = {}
Rất nguy hiểm khi:
- restart server
- multi-worker
- nhiều user
Gunicorn nhiều worker => monitor sai ngay.
Nên chuyển:
- Redis
- PostgreSQL realtime table
6. Flask session lưu quá nhiều dữ liệu
Bạn lưu:
session['current_quiz_questions']
Cực nguy hiểm.
Flask default session = cookie client-side signed.
Tức là browser đang giữ toàn bộ đề thi.
Dù signed nhưng:
- user vẫn đọc được
- F12 vẫn thấy
- decode được
Đây là lỗi lớn nhất.
CÁI NÀY LÀ RẤT QUAN TRỌNG
Bạn đang nghĩ:
"Đáp án không hiện nên an toàn"
Sai.
Flask session cookie có thể chứa:
current_quiz_questions
Trong đó có:
'cor': q[6]
=> đáp án đúng.
Tức là:
- user decode cookie
- thấy đáp án
=> lộ đề hoàn toàn.
CÁCH SỬA ĐÚNG
KHÔNG lưu đề trong session Flask.
Phải:
Chỉ lưu:
session['exam_id']
Sau đó:
- load đề từ DB
- cache Redis
- server-side session
7. Có thể cheat submit
User vẫn có thể:
POST /submit
ans_1=A
ans_2=B
Cần:
- anti automation
- signed payload
- verify question ownership
8. Thiếu CSRF protection
Tất cả route:
POST
đều không có CSRF.
Cần:
Flask-WTF
CSRFProtect
9. Upload DOCX chưa an toàn
Bạn cho upload trực tiếp:
file.save(filepath)
Có nguy cơ:
- zip bomb
- huge file
- malware docx
Cần:
- giới hạn size
- scan mime
- temp folder isolate
10. Regex parser DOCX cực yếu
pattern = r"..."
Regex này sẽ fail nếu:
- xuống dòng lạ
- có chữ A. trong nội dung
- unicode đặc biệt
Nên chuyển:
- parser structured
- markdown format
- JSON import
- AI parser
11. Dùng ORDER BY RANDOM()
ORDER BY RANDOM()
Khi DB lớn sẽ cực chậm.
Nên:
- random id
- TABLESAMPLE
- pre-generated pools
12. DEBUG=True
debug=True
Production là chết.
Có thể RCE debugger.
13. Không rate-limit login
Có thể brute force admin.
Cần:
- Flask-Limiter
- captcha
- lock account
14. Thiếu audit log
Admin:
- xóa
- sửa
- đổi điểm
không có log.
Cần bảng:
audit_logs
15. Không có anti-tab-switch
Hệ thống thi chuyên nghiệp cần:
- detect blur
- detect fullscreen exit
- detect copy
- detect multi-tab
CẦN CẢI TIẾN GÌ CHO “THÔNG MINH HƠN”
1. AI chống gian lận
Có thể thêm:
- phát hiện alt-tab
- webcam AI
- detect nhiều IP
- detect copy paste
- detect pattern trả lời bất thường
2. Adaptive testing
Thông minh hơn:
Nếu trả lời đúng:
- tăng độ khó
Sai:
- giảm độ khó
Giống TOEIC/IELTS CAT.
3. AI phân tích thí sinh
Sau thi:
- câu nào sai nhiều
- chủ đề yếu
- thống kê năng lực
Ví dụ:
Điểm yếu:
- PLC
- An toàn điện
- OPC UA
4. Smart question randomization
Hiện tại random đơn giản.
Nên:
- tránh trùng đề
- tránh 2 người ngồi cạnh giống nhau
- shuffle option
- tạo mã đề động
5. Redis realtime architecture
Hiện tại:
ONLINE_USERS = {}
Nên chuyển:
- Redis Pub/Sub
- Redis session
- Celery
6. Tách project thành modules
Hiện tại file quá lớn.
Nên:
app/
├── auth/
├── quiz/
├── admin/
├── models/
├── realtime/
├── services/
7. ORM thay vì raw SQL
Dùng:
SQLAlchemy
sẽ:
- dễ maintain
- migration tốt
- tránh lỗi
8. JWT + Server session
Hiện tại session Flask chưa mạnh.
Nên:
- Redis session
- JWT refresh
- signed exam token
9. Queue background
Export DOCX / PDF:
- nên chạy background
Dùng:
- Celery
- Redis
10. Chống lộ đề thực sự
Quan trọng nhất.
Hiện tại vẫn có khả năng lộ.
Cần:
- server-side rendering
- không gửi đáp án
- không lưu đề trong cookie
- encrypted question transport
- one-time token
ĐÁNH GIÁ TỔNG THỂ
| Tiêu chí | Đánh giá |
|---|---|
| Ý tưởng hệ thống | 8.5/10 |
| Tính năng thực tế | 8/10 |
| Bảo mật hiện tại | 3.5/10 |
| Khả năng scale | 4/10 |
| Kiến trúc | 5/10 |
| Chống gian lận | 4/10 |
| Hướng phát triển | Rất tốt |
ƯU TIÊN SỬA NGAY
Theo thứ tự:
- KHÔNG lưu đề trong Flask session
- Hash password
- Secret key mạnh
- Tắt debug
- CSRF protection
- Redis session
- Rate limit login
- Tách module
- Redis realtime
- Audit log
Nếu muốn, tôi có thể phân tích tiếp:
- kiến trúc database chuẩn hóa
- cách chống F12 thật sự
- chống decode session Flask
- cách mã hóa đề thi
- anti-cheat chuyên nghiệp
- kiến trúc scale 10.000 user
- chuyển sang kiến trúc production thật
- phân tích các route nguy hiểm nhất
- viết lại kiến trúc bảo mật chuẩn enterprise cho hệ thống này.

