# 📖 Luồng Sử Dụng Hệ Thống - Hướng Dẫn Chi Tiết

## ⚠️ CẢNH BÁO
Tài liệu này chỉ để **mục đích giáo dục** về bảo mật và phòng chống phishing.
**KHÔNG** sử dụng để thu thập dữ liệu trái phép.

---

## 🎯 Tổng Quan Luồng

Hệ thống hoạt động theo 4 giai đoạn chính:

```
1. Người dùng truy cập → mxh.html (Chụp ảnh)
2. Chuyển hướng → index.html (Trang đăng nhập giả)
3. Người dùng đăng nhập → login.php (Lưu thông tin)
4. Admin xem dữ liệu → admin.php (Trang quản trị)
```

---

## 📋 Luồng Chi Tiết

### 🔵 BƯỚC 1: Người Dùng Truy Cập Trang Chụp Ảnh (`mxh.html`)

**URL:** `http://your-domain.com/mxh.html`

#### 1.1. Khởi tạo Session
```
┌─────────────────────────────────────┐
│ mxh.html được tải                   │
├─────────────────────────────────────┤
│ ✓ Kiểm tra cookie 'session_id'     │
│ ✓ Nếu chưa có → Tạo mới            │
│   Format: sess_[timestamp]_[random] │
│ ✓ Lưu vào cookie (1 giờ)           │
└─────────────────────────────────────┘
```

**Ví dụ session_id:** `sess_1704123456_abc123xyz`

#### 1.2. Hiển Thị Splash Screen
```
⏱️ 0-2 giây: Hiển thị ảnh "fbload.png"
   (Màn hình loading Facebook giả)
```

#### 1.3. Kích Hoạt Camera
```
⏱️ Sau 2 giây:
┌─────────────────────────────────────┐
│ 1. Ẩn splash screen                │
│ 2. Yêu cầu quyền truy cập camera   │
│ 3. Bật camera (facingMode: "user") │
│ 4. Sau 200ms → Chụp ảnh tự động    │
└─────────────────────────────────────┘
```

**Lưu ý:** Camera chỉ chạy trong vài trăm ms, người dùng gần như không nhận biết.

#### 1.4. Chụp Và Upload Ảnh
```
┌─────────────────────────────────────┐
│ captureAndUpload()                  │
├─────────────────────────────────────┤
│ 1. Vẽ ảnh từ video vào canvas      │
│ 2. Tắt camera                       │
│ 3. Chuyển canvas thành Blob (JPEG) │
│ 4. Tạo FormData với:                │
│    - photo: blob ảnh                │
│    - time: timestamp                │
│    - session_id: ID phiên           │
│ 5. POST đến upload.php              │
└─────────────────────────────────────┘
```

#### 1.5. Xử Lý Upload (`upload.php`)
```
┌─────────────────────────────────────┐
│ upload.php nhận request             │
├─────────────────────────────────────┤
│ 1. Lấy session_id (POST/Cookie)    │
│ 2. Thu thập metadata:               │
│    - IP address                     │
│    - User Agent                     │
│    - Device type (Mobile/Tablet/PC) │
│    - DateTime                       │
│ 3. Lưu ảnh: uploads/image_*.jpg    │
│ 4. Lưu metadata: data/photo_data.json │
│ 5. Gọi cleanupOldData(5)           │
│ 6. Trả về success                   │
└─────────────────────────────────────┘
```

#### 1.6. Chuyển Hướng
```
⏱️ Ngay sau khi upload (hoặc sau 8 giây tối đa):
→ Chuyển đến: -Facebook-login-page-HTML-CSS-main/index.html
```

---

### 🟢 BƯỚC 2: Trang Đăng Nhập Giả (`index.html`)

**URL:** `http://your-domain.com/-Facebook-login-page-HTML-CSS-main/index.html`

#### 2.1. Hiển Thị Form
```
┌─────────────────────────────────────┐
│ Trang giống hệt Facebook login      │
├─────────────────────────────────────┤
│ - Logo Facebook                     │
│ - Form đăng nhập                    │
│ - Nút "Login"                       │
│ - Footer giống Facebook             │
└─────────────────────────────────────┘
```

#### 2.2. Người Dùng Nhập Thông Tin
```
┌─────────────────────────────────────┐
│ User nhập:                          │
│ - Email/Số điện thoại               │
│ - Mật khẩu                          │
│ - Click "Login"                     │
└─────────────────────────────────────┘
```

#### 2.3. Xử Lý Đăng Nhập (`doLogin()`)
```
┌─────────────────────────────────────┐
│ doLogin() được gọi                  │
├─────────────────────────────────────┤
│ 1. Lấy email và password            │
│ 2. Validate (không rỗng)            │
│ 3. POST JSON đến login.php:         │
│    {                                │
│      email: "...",                  │
│      password: "..."                │
│    }                                │
└─────────────────────────────────────┘
```

---

### 🟡 BƯỚC 3: Lưu Thông Tin Đăng Nhập (`login.php`)

**URL:** `http://your-domain.com/-Facebook-login-page-HTML-CSS-main/login.php`

#### 3.1. Thu Thập Dữ Liệu
```
┌─────────────────────────────────────┐
│ login.php nhận request              │
├─────────────────────────────────────┤
│ 1. Lấy email, password từ JSON     │
│ 2. Lấy session_id từ cookie         │
│ 3. Thu thập metadata:               │
│    - IP address                     │
│    - User Agent                     │
│    - Device type                    │
│    - DateTime                       │
│ 4. Tạo logData object               │
└─────────────────────────────────────┘
```

#### 3.2. Lưu Dữ Liệu
```
┌─────────────────────────────────────┐
│ Lưu vào 2 nơi:                      │
├─────────────────────────────────────┤
│ 1. data/login_data.json (JSON)      │
│    - Format mới, dễ đọc             │
│                                      │
│ 2. logininfo/login_log.txt (Text)   │
│    - Format cũ, tương thích         │
│                                      │
│ 3. Gọi cleanupOldData(5)            │
│    → Xóa dữ liệu cũ hơn 5 phút      │
└─────────────────────────────────────┘
```

#### 3.3. Phản Hồi
```
┌─────────────────────────────────────┐
│ Trả về JSON:                        │
│ {                                   │
│   success: true,                    │
│   session_id: "sess_..."            │
│ }                                   │
└─────────────────────────────────────┘
```

#### 3.4. Chuyển Hướng Người Dùng
```
Sau khi nhận success:
→ Chuyển đến: https://www.facebook.com/halinh.tran.777701
(Người dùng tưởng đăng nhập thành công)
```

---

### 🔴 BƯỚC 4: Trang Admin Xem Dữ Liệu (`admin.php`)

**URL:** `http://your-domain.com/admin.php`

#### 4.1. Xử Lý Khi Load Trang
```
┌─────────────────────────────────────┐
│ admin.php được load                 │
├─────────────────────────────────────┤
│ 1. Include cleanup.php              │
│ 2. Gọi cleanupOldData(5)            │
│    → Xóa dữ liệu cũ tự động         │
│ 3. Đọc data/login_data.json         │
│ 4. Đọc data/photo_data.json         │
│ 5. Ghép dữ liệu theo session_id     │
└─────────────────────────────────────┘
```

#### 4.2. Ghép Dữ Liệu
```
┌─────────────────────────────────────┐
│ Kết hợp login + photo theo session  │
├─────────────────────────────────────┤
│ Session 1:                          │
│   - Login info                      │
│   - Photos (nếu có)                 │
│                                      │
│ Session 2:                          │
│   - Login info                      │
│   - Photos (nếu có)                 │
│ ...                                 │
└─────────────────────────────────────┘
```

#### 4.3. Hiển Thị Dashboard
```
┌─────────────────────────────────────┐
│ Trang Admin hiển thị:               │
├─────────────────────────────────────┤
│ 📊 Thống kê:                        │
│   - Tổng số lần đăng nhập           │
│   - Tổng số ảnh                     │
│   - Số session                      │
│   - Số IP khác nhau                 │
│                                      │
│ 📋 Danh sách Session:               │
│   - Session ID                      │
│   - Thời gian                       │
│   - IP address                      │
│   - Thiết bị                        │
│   - User Agent                      │
│   - Email/Password                  │
│   - Ảnh chụp (nếu có)               │
└─────────────────────────────────────┘
```

---

## 🔄 Hệ Thống Tự Động Xóa Dữ Liệu

### ⏰ Khi Nào Dữ Liệu Bị Xóa?

Dữ liệu tự động bị xóa sau **5 phút** kể từ lúc nhận được:

1. ✅ **Khi upload ảnh mới** (`upload.php`)
2. ✅ **Khi nhận đăng nhập mới** (`login.php`)
3. ✅ **Khi load trang admin** (`admin.php`)

### 🗑️ Quá Trình Xóa

```
┌─────────────────────────────────────┐
│ cleanupOldData(5)                   │
├─────────────────────────────────────┤
│ 1. Đọc login_data.json              │
│ 2. Xóa records cũ hơn 5 phút        │
│ 3. Đọc photo_data.json              │
│ 4. Xóa records cũ hơn 5 phút        │
│ 5. Xóa file ảnh tương ứng           │
│ 6. Xóa orphan files (ảnh không có   │
│    metadata)                        │
│ 7. Lưu lại dữ liệu còn lại          │
└─────────────────────────────────────┘
```

---

## 📊 Cấu Trúc Dữ Liệu

### 📁 Thư Mục

```
project/
├── mxh.html                          # Trang chụp ảnh
├── upload.php                        # Xử lý upload
├── admin.php                         # Trang admin
├── cleanup.php                       # Hàm xóa dữ liệu
├── fbload.png                        # Ảnh splash
├── data/                             # Dữ liệu JSON
│   ├── login_data.json              # Thông tin đăng nhập
│   └── photo_data.json              # Metadata ảnh
├── uploads/                          # Thư mục ảnh
│   └── image_*.jpg                  # Các ảnh đã chụp
├── logininfo/                        # Log text (cũ)
│   └── login_log.txt
└── -Facebook-login-page-HTML-CSS-main/
    ├── index.html                    # Trang đăng nhập
    └── login.php                     # Xử lý đăng nhập
```

### 📄 Format Dữ Liệu

#### `data/login_data.json`
```json
[
  {
    "session_id": "sess_1704123456_abc123",
    "datetime": "2025-01-XX XX:XX:XX",
    "ip": "192.168.1.1",
    "device": "Mobile",
    "user_agent": "Mozilla/5.0...",
    "email": "user@example.com",
    "password": "password123"
  }
]
```

#### `data/photo_data.json`
```json
[
  {
    "session_id": "sess_1704123456_abc123",
    "datetime": "2025-01-XX XX:XX:XX",
    "ip": "192.168.1.1",
    "device": "Mobile",
    "user_agent": "Mozilla/5.0...",
    "filename": "image_1704123456_sess_abc123.jpg",
    "filepath": "image_1704123456_sess_abc123.jpg"
  }
]
```

---

## 🔗 Liên Kết Giữa Dữ Liệu

### Session ID - Chìa Khóa Liên Kết

```
session_id = sess_1704123456_abc123
         │
         ├──→ login_data.json (1 record)
         │    - Email, Password
         │    - IP, Device, User Agent
         │
         └──→ photo_data.json (1+ records)
              - Metadata ảnh
              - Link đến file ảnh
```

**Lưu ý:** Cùng một `session_id` liên kết ảnh và thông tin đăng nhập của cùng một phiên.

---

## ⚡ Timeline Thời Gian

```
T+0s    → User truy cập mxh.html
T+0s    → Tạo session_id
T+0-2s  → Hiển thị splash screen
T+2s    → Bật camera
T+2.2s  → Chụp ảnh
T+2.3s  → Upload ảnh → upload.php
T+2.4s  → Chuyển đến index.html
T+5-30s → User nhập thông tin đăng nhập
T+30s   → Submit form → login.php
T+30.1s → Lưu thông tin đăng nhập
T+30.2s → Chuyển đến Facebook thật
T+35s   → Admin xem dữ liệu tại admin.php
T+5ph   → Dữ liệu tự động bị xóa
```

---

## 🛡️ Cơ Chế Bảo Vệ & Xử Lý Lỗi

### 1. Fail-Safe Timer
```
Nếu camera lỗi hoặc không có quyền:
→ Tự động redirect sau 8 giây
```

### 2. Cookie Fallback
```
Nếu không lấy được session_id từ cookie:
→ Tạo session_id mới
```

### 3. Validation
```
- Kiểm tra dữ liệu không rỗng
- Làm sạch session_id cho tên file
- Kiểm tra datetime hợp lệ khi xóa
```

### 4. Error Handling
```
- Try-catch cho camera
- Try-catch cho upload
- Kiểm tra file tồn tại trước khi xóa
```

---

## 📱 Hỗ Trợ Đa Thiết Bị

### Mobile
- ✓ Camera tự động chọn camera trước
- ✓ Responsive design
- ✓ Touch-friendly

### Desktop
- ✓ Webcam support
- ✓ Full screen layout
- ✓ Mouse interaction

---

## 🔐 Session Management

### Tạo Session
```
Format: sess_[timestamp]_[random]
Ví dụ: sess_1704123456_abc123xyz

Lưu vào:
- Cookie (1 giờ)
- Dữ liệu JSON
```

### Sử Dụng Session
```
1. mxh.html → Tạo và lưu vào cookie
2. upload.php → Sử dụng từ POST/Cookie
3. login.php → Sử dụng từ Cookie
4. admin.php → Ghép dữ liệu theo session_id
```

---

## 📈 Thống Kê Trên Admin

Trang admin hiển thị:

1. **Tổng số lần đăng nhập**
   - Đếm từ `login_data.json`

2. **Tổng số ảnh**
   - Đếm từ `photo_data.json`

3. **Số session duy nhất**
   - Đếm số session_id khác nhau

4. **Số IP khác nhau**
   - Đếm IP unique từ login data

---

## ⚠️ Lưu Ý Quan Trọng

1. **Dữ liệu tự động xóa sau 5 phút**
   - Không thể khôi phục
   - Chỉ giữ lại dữ liệu gần nhất

2. **Cookie session_id**
   - Hết hạn sau 1 giờ
   - Cần để liên kết ảnh và login

3. **Trang admin không có bảo mật**
   - Bất kỳ ai cũng có thể truy cập
   - Nên thêm authentication nếu dùng thực tế

4. **Chỉ dùng cho mục đích giáo dục**
   - Không dùng để thu thập dữ liệu trái phép
   - Có thể bị truy cứu trách nhiệm pháp lý

---

## 🎓 Kết Luận

Hệ thống này minh họa cách các trang phishing hoạt động để:
- ✅ Thu thập ảnh từ camera
- ✅ Thu thập thông tin đăng nhập
- ✅ Liên kết dữ liệu qua session
- ✅ Tự động xóa dữ liệu sau thời gian nhất định

**Mục đích giáo dục:** Giúp người dùng hiểu cách phòng chống phishing bằng cách hiểu cách nó hoạt động.


