WEB SYSTEM UPGRADE × SECURITY REMEDIATION

Đưa hệ thống web cũ
lên môi trường mới, an toàn.

Nâng cấp từng bước các hệ thống web đang chạy trên phiên bản PHP và framework đã hết hỗ trợ lên môi trường mới, an toàn. Song song, Việt Vang dùng công cụ chẩn đoán do chính mình phát triển để rà soát lỗ hổng trên toàn bộ mã nguồn, rồi sửa và chẩn đoán lại đến khi đạt.

Ví dụ hỗ trợ:
Laravel
CodeIgniter
Các framework PHP khác
PHP & môi trường server

Dự án thực tế (Laravel): nâng cấp đồng thời 4 hệ thống

362
→
0

Lỗ hổng & lỗi phát hiện được (trước → sau khi sửa)

254,975
Dòng code được chẩn đoán
1,627
File được rà soát
0 lỗi
Lỗi mới phát sinh sau nâng cấp
8 → 11
Laravel (PHP 7.x → 8.3)

01 / CHALLENGES

Doanh nghiệp bạn có đang gặp những vấn đề này?

Vẫn chạy trên phiên bản hết hỗ trợ

PHP 7 và các framework phiên bản cũ (ví dụ Laravel 8) đã hết hỗ trợ chính thức. Có lỗ hổng mới cũng không còn bản vá.

Không nắm được bên trong source

Người phát triển ban đầu không còn, không biết rủi ro nằm ở đâu và nghiêm trọng đến mức nào.

Sợ nâng cấp làm hỏng hệ thống

Lo lên phiên bản mới thì các chức năng đang chạy sẽ lỗi, nên chưa dám động vào.

Chẩn đoán và sửa lỗi tách rời

Dịch vụ chẩn đoán bên ngoài chỉ dừng ở bản báo cáo. Muốn sửa các điểm bị chỉ ra lại phải thuê thêm.

02 / OUR OWN TOOL

Công cụ chẩn đoán do Việt Vang tự phát triển
“VV Laravel Checker”

Công cụ chẩn đoán chất lượng và bảo mật do đội kỹ sư từng làm rất nhiều dự án Laravel thực tế tự xây dựng. Tool phân tích sâu tới những cách viết đặc thù của Laravel mà các scanner thông thường dễ bỏ sót (định nghĩa route, Gate / Policy, Blade template, Eloquent), chỉ rõ “lỗi ở đâu, vì sao nguy hiểm, sửa thế nào”.

FEATURE 1

Bộ rule riêng theo chuẩn OWASP

Phát hiện lỗi phân quyền, IDOR (thao tác được dữ liệu của người khác), XSS, SSRF, open redirect, CSRF, cấu hình sai, đoạn code nguy hiểm… được thiết kế riêng cho Laravel.

FEATURE 2

Chạy nhiều loại kiểm tra cùng lúc

Ngoài rule riêng, tool chạy luôn kiểm tra lỗ hổng đã biết của thư viện phụ thuộc (composer audit), PHPUnit và phân tích tĩnh (PHPStan / PHP_CodeSniffer) trong một lần.

FEATURE 3

Kế hoạch xử lý theo mức ưu tiên

Phân loại theo mức độ nghiêm trọng (Critical / Error / Warning / Info) và mức ưu tiên xử lý (P0–P3). Tự động chấm Quality Score và quyết định có được release hay không (Release Gate).

FEATURE 4

Chứng minh kết quả bằng con số

Đối chiếu kết quả trước và sau khi sửa theo từng rule, từng file. Báo cáo rõ “đã sửa bao nhiêu”, “còn lại bao nhiêu”, “phát sinh mới bao nhiêu”.

Các rule phát hiện tiêu biểu

BROKEN_ACCESS_CONTROL
OWNERSHIP_IDOR
BLADE_XSS
SSRF
OPEN_REDIRECT
CSRF
SESSION_FIXATION
MISCONFIGURATION
WEAK_PASSWORD_POLICY
UNSAFE_EVAL
OBFUSCATED_PHP
ROUTE_MISSING_VALIDATION

Báo cáo chẩn đoán thực tế

Mỗi lần chạy, tool xuất một báo cáo HTML xem được ngay trên trình duyệt (ảnh dưới là báo cáo thật, đã ẩn tên dự án).

BEFORE
Trước khi sửa: 84 lỗi ・ Score 79/100 ・ Chưa được release

Báo cáo chẩn đoán trước khi sửa: tổng 84 lỗi, Critical 2, Error 47, Quality Score 79/100, Release Gate BLOCKED

AFTER
Sau khi sửa: 0 lỗi ・ Score 100/100 ・ Được release

Báo cáo chẩn đoán sau khi sửa: 0 lỗi, Quality Score 100/100, Release Gate PASS

03 / CASE STUDY

Dự án thực tế: dịch vụ business matching đang vận hành (Laravel)

Không dừng dịch vụ, chúng tôi nâng cấp từng bước 4 bộ source từ Laravel 8 → 9 → 10 → 11, PHP 7.x → 8.3. Song song, dùng VV Laravel Checker để chẩn đoán và sửa lỗi, rồi chẩn đoán lại trong cùng điều kiện để đối chiếu trước và sau.

PROJECT PROFILE

Dịch vụ web business matching
do doanh nghiệp Nhật Bản vận hành

Nền tảng kết nối và giao thương giữa các doanh nghiệp. Hiện vẫn đang chạy production, được doanh nghiệp từ khắp thế giới sử dụng hằng ngày.

Cho người dùng (frontend)
Trang công khai, nơi doanh nghiệp toàn cầu xem thông tin, đăng ký và trao đổi với nhau
Cho người quản lý (backend)
Trang quản trị, nơi nhân viên vận hành quản lý thông tin doanh nghiệp, nhập dữ liệu và các cài đặt
Trạng thái
Đang chạy production, người dùng toàn cầu
Phạm vi
4 bộ source, khoảng 255.000 dòng code (PHP + Blade)
362 → 0
Số lỗi phát hiện (trước → sau khi sửa)
0 lỗi
Lỗi mới phát sinh sau nâng cấp
254,975
Dòng code được chẩn đoán (PHP + Blade)
1,627
File được rà soát

Số lỗi phát hiện theo từng hệ thống

Hệ thốngSố lỗi trước khi sửaSau khi sửa
Dự án A
86,927 dòng

103

0

Dự án B
74,727 dòng

80

0

Dự án C
44,752 dòng

95

0

Dự án D
48,569 dòng

84

0

Phân loại theo mức độ (tổng 4 hệ thống)

Critical (nghiêm trọng nhất)4 → 0
Error (nghiêm trọng)175 → 0
Warning (cảnh báo)169 → 0
Info (thông tin)14 → 0

* Một số cảnh báo đã được xác nhận phạm vi ảnh hưởng, sau đó được loại trừ có chủ đích trong file cấu hình (có ghi lại lý do). Các mục loại trừ vẫn theo dõi được trong báo cáo.

04 / FIX EXAMPLES

Phát hiện ra, và sửa tận nơi

Không dừng ở chẩn đoán, kỹ sư của chúng tôi trực tiếp sửa những điểm bị phát hiện. Dưới đây là ví dụ sửa lỗi trong dự án thực tế (code được rút gọn để minh hoạ).

OWNERSHIP_IDOR

Xoá được dữ liệu của công ty khác

Chỉ cần đổi ID là xoá được bảng giá của nhà cung cấp khác. Đã thêm bước kiểm tra chủ sở hữu.

- $item = PriceList::find($request->id);
- $item->delete();
+ $this->authorize('ownsSupplierResource', [PriceList::class, $id]);
+ $item = PriceList::query()
+     ->where('id', $request->id)
+     ->where('supplier_id', Auth::user()->supplier->id)
+     ->first();
+ $item?->delete();
BROKEN_ACCESS_CONTROL

Màn hình, API dùng được khi chưa đăng nhập

Các route quan trọng như nhập dữ liệu chưa có xác thực. Đã thêm xác thực và kiểm tra quyền.

- Route::get('/import_supplier',
-     [ImporterController::class, 'importSupplier']);
+ Route::get('/import_supplier',
+     [ImporterController::class, 'importSupplier'])
+     ->middleware('auth');
+ // Phía Controller: $this->authorize('runLegacyImport');
BLADE_XSS

Chèn mã độc vào màn hình (XSS)

Các template trang quản trị đang xuất dữ liệu không escape. Đã sửa đồng loạt sang cách xuất an toàn.

- <a href="{!! url('detail/' . $item->id) !!}">Chi tiết</a>
+ <a href="{{ url('detail/' . $item->id) }}">Chi tiết</a>
OPEN_REDIRECT

Chuyển hướng không an toàn

Các lệnh redirect tự ghép chuỗi URL được thống nhất về một class dùng chung, kiểm tra theo danh sách cho phép.

- return redirect('/404');
- return redirect('/detail-company.html/' . $id);
+ return SafeRedirect::toNotFound();
+ return SafeRedirect::toRoute('buyer.detail', ['id' => $id]);

Ngoài ra còn sửa cấu hình CORS dùng wildcard, tăng chính sách mật khẩu, ngừng công khai /phpinfo, gỡ bỏ thư viện cũ có chứa eval nguy hiểm (khoảng 2.300 dòng)…

05 / SERVICE SCOPE

Trọn gói từ khảo sát đến giám sát sau release

01

Khảo sát hiện trạng & biện pháp tạm thời

Trước khi nâng cấp chính thức, áp dụng ngay các biện pháp có hiệu quả tức thì: làm an toàn php.ini (ẩn thông tin phiên bản, siết chế độ session…), điều chỉnh giới hạn tài nguyên, giới hạn truy cập cho đăng nhập và upload.

02

Nâng cấp lên PHP 8.3, 8.4

Build lại container image, thay thế mà vẫn giữ nguyên dữ liệu và volume. Kiểm tra phiên bản và smoke test sau khi thay.

03

Nâng cấp framework từng bước

Laravel, CodeIgniter…: nâng chắc chắn từng phiên bản một theo hướng dẫn nâng cấp chính thức của từng framework (ví dụ Laravel 8 → 9 → 10 → 11). Cập nhật thư viện phụ thuộc và sửa các thay đổi không tương thích ở phần mail, lưu trữ file, cấu hình.

04

Chẩn đoán & sửa lỗi bảo mật

Dùng tool chẩn đoán riêng (dự án Laravel dùng VV Laravel Checker) để chẩn đoán trước khi sửa, rồi sửa các điểm bị phát hiện. Sau khi sửa chẩn đoán lại, xác nhận không còn lỗi tồn đọng, không phát sinh lỗi mới, rồi gửi báo cáo.

05

Chuẩn hoá thông tin xác thực & phân quyền

Bảo mật thông tin kết nối DB và file .env, sửa lại quyền file (bỏ quyền 777 mở toàn bộ…), rà soát cấu hình kết nối.

06

Regression test, release & giám sát

Regression test các chức năng chính: đăng nhập, import CSV, gửi mail, upload, export… Đưa lên production trong khung giờ bảo trì (có thể rollback trong 15 phút), giám sát log 1–2 tuần sau release.

06 / SCHEDULE

Lịch triển khai tiêu chuẩn: 10 ngày làm việc

Nhân sự: 2 developer + 1 tester (ví dụ với dự án Laravel 2 app; thay đổi tuỳ framework và quy mô)

Công việcD1D2D3D4D5D6D7D8D9D10
Biện pháp tạm thời

Khoá DB & dọn file public

Nâng cấp PHP 8.3

Xác thực & phân quyền

Nâng cấp framework

Test sớm

Regression test & sửa lỗi

Release & bắt đầu giám sát

07 / PRICING

Chi phí tham khảo

Ví dụ: hệ thống 2 app (nâng cấp PHP + Laravel 8 → 11)

Từ khoảng
US$2,500

Khoảng 15 man-day ・ Đơn giá US$170 / man-day

* Giá tham khảo dựa trên báo giá của dự án thực tế, thay đổi theo loại framework, quy mô source, phiên bản và cấu hình hạ tầng. Chúng tôi cũng nhận riêng gói chẩn đoán bảo mật hoặc tư vấn phạm vi sửa lỗi. Buổi tư vấn đầu tiên và báo giá sơ bộ hoàn toàn miễn phí.

Hạng mụcCông số (man-day)
Khảo sát & biện pháp tạm thời1.5
Nâng cấp PHP 8.32.0
Nâng cấp Laravel 8 → 11 từng bước5.0
Chuẩn hoá xác thực & phân quyền1.0
Regression test & sửa lỗi2.0
Release & giám sát2.0
Quản lý dự án (10% tổng)1.35
Tổng14.85 man-day = US$2,524.5

08 / WHY VIỆT VANG

Vì sao chọn Việt Vang

Đảm bảo chất lượng khách quan bằng tool riêng

Không dựa vào cảm tính của người làm. Trước và sau khi sửa đều chẩn đoán theo cùng một tiêu chuẩn, kết quả giao cho khách bằng con số và báo cáo.

Kinh nghiệm bảo mật với khách hàng Nhật Bản

Đã thực hiện chẩn đoán an toàn thông tin website cho doanh nghiệp nhà nước Nhật Bản, và phát triển hệ thống cho khách hàng Nhật Bản, Đức.

Trọn gói từ chẩn đoán đến sửa lỗi và vận hành

Không dừng ở bản báo cáo. Cùng một đội chịu trách nhiệm từ sửa lỗi, test, release production đến giám sát.

Bắt đầu với buổi tư vấn miễn phí

Hãy cho chúng tôi biết hệ thống đang dùng PHP và framework nào, phiên bản bao nhiêu, quy mô source khoảng bao nhiêu. Chúng tôi sẽ đề xuất phạm vi, thời gian và chi phí dự kiến.

Đến form liên hệ

Điện thoại: +84 28 6265 1411
CHUAN VIET VANG JSC
7-9-11 Trần Xuân Hòa, TP. Hồ Chí Minh, Việt Nam