Trong thời đại ngày nay, các website xây dựng bằng mã nguồn mở phát triển mạnh mẽ, đặc biệt là sự kết hợp giữa PHP và MySQL. Tuy nhiên, song song với sự phát triển công nghệ là sự xuất hiện ngày càng nhiều của các "Hacker trẻ" luôn muốn thử thách bản thân sau khi tham khảo các hướng dẫn tấn công và khai thác lỗ hổng trên các diễn đàn tin tặc.
Do đó, bất kỳ Website nào cũng có nguy cơ trở thành mục tiêu tấn công, đặc biệt là các Website cá nhân và doanh nghiệp vừa & nhỏ, thường sử dụng dịch vụ Shared Hosting để tiết kiệm chi phí. Việc nâng cao bảo mật cho Website trên Shared Hosting là điều hết sức cần thiết. Dưới đây là các phương pháp bảo mật quan trọng cho website PHP trên Shared Hosting Linux
Shared hosting là gì?
Shared Hosting (hay còn gọi là hosting chia sẻ) là hình thức nhiều Website cùng "thuê chung" tài nguyên trên một Server vật lý. Đa số các Website hiện nay đều sử dụng Shared Hosting để giảm chi phí, trừ một số ít Website có lượng truy cập rất lớn và yêu cầu cao về bảo mật mới dùng Server riêng.
1. Phân quyền truy cập hợp lý
A. Tìm hiểu về lệnh chmod
Chmod là lệnh dùng để phân quyền truy cập vào một tập tin hay thư mục cho các nhóm người dùng khác nhau, tương tự như lệnh Attrib trong DOS.
Các nhóm người dùng bao gồm:
- Owner: Chủ sở hữu của Hosting
- Group: Nhóm người dùng
- World: Tất cả mọi người
Các quyền truy cập khi dùng chmod:
- Read (đọc): r = 4
- Write (ghi): w = 2
- Execute (thực thi): x = 1
Ví dụ: chmod 751 tương đương rwxr-x--x
Cách thực hiện chmod:
Bạn có thể chmod tập tin và thư mục thông qua FTP hoặc cPanel. Dưới đây là ví dụ sử dụng phần mềm FTP FlashFXP:
- Kết nối FTP vào Hosting bằng FlashFXP.
- Nhấp chuột phải vào tập tin hoặc thư mục cần chmod (giữ Ctrl để chọn nhiều mục rời rạc hoặc Ctrl A để chọn tất cả), chọn CHMOD.
- Nếu muốn chmod riêng cho tập tin và thư mục, đánh dấu chọn "Separately Set File And Folder Attributes".
B. Hướng dẫn CHMOD hợp lý để bảo mật website:
Cấu hình CHMOD khuyến nghị:
- Đối với các File: chmod 404 (chỉ cho phép đọc)
- Đối với các thư mục: chmod 101 (chỉ cho phép thực thi)
- Đối với thư mục gốc public_html: chmod 501
Các chmod trên sẽ ngăn chặn khả năng ghi/sửa đổi (write) lên các tập tin và thư mục, qua đó bảo vệ cấu trúc và nội dung Website. Đây là cấu hình CHMOD chặt chẽ mà hầu hết các ứng dụng Web phổ biến như diễn đàn, Site nhạc, tin tức... vẫn hoạt động ổn định.
Lưu ý: Nếu Hosting không hỗ trợ CHMOD qua FTP với các giá trị trên, bạn có thể dùng các lệnh sau:
- Đối với các File: 704 (chỉ cho phép đọc)
- Đối với các thư mục: 701 (cho phép thực thi)
Từ cPanel 11 trở đi, công cụ File Manager được tích hợp sẵn cho phép CHMOD nhanh nhiều File 404, Folder 101.
2. Che giấu đường dẫn - Hide Path
Thông thường, khi đăng ký Hosting, Domain chính sẽ trỏ trực tiếp vào thư mục /public_html/. Điều này khiến “kẻ tấn công” dễ dàng đoán được vị trí của các tập tin quan trọng (như File cấu hình config.php của các mã nguồn mở). Nếu truy cập được các File này, Hacker có thể lấy được thông tin đăng nhập quản trị và kiểm soát Website.
Giải pháp khắc phục:
Bước 1: Tạo một Hosting mới không gắn Domain chính.
Bước 2: Sử dụng tính năng Addon Domain hoặc Subdomain để trỏ tên miền vào một đường dẫn phụ nằm sâu bên trong public_html.
Ví dụ: /public_html/foder1/folder2/folder3/forum/
Bước 3: Các thư mục App, Core, Main sẽ được tạo tự động. Bạn có thể dùng CHMOD (như hướng dẫn ở phần 1) để hạn chế quyền truy cập vào các thư mục này, nhằm ngăn người khác dò tìm đường dẫn Website.
Cách làm trên giúp Website có một lớp bảo vệ phụ, khiến việc tìm ra các tập tin trở nên khó khăn hơn, ít nhất là đối với các cuộc tấn công mang tính cơ hội.
3. Ẩn thông báo lỗi PHP
Mặc định, khi xảy ra lỗi, PHP sẽ hiển thị chi tiết về lỗi ra trình duyệt, bao gồm vị trí File, dòng Code và đường dẫn. Điều này vô tình cung cấp manh mối cho Hacker tìm ra lỗ hổng bảo mật.
Khắc phục bằng cách tạo File php.ini với nội dung:
display_errors = Off
log_errors = On
Sau đó Upload File php.ini này lên các thư mục public như thư mục gốc Website, thư mục Admin...
4. Kích hoạt Safe_mode và hạn chế các hàm nguy hiểm
Thêm hoặc sửa các dòng sau trong File php.ini:
disable_functions = passthru, system, shell_exec, exec, dir, readfile, virtual, proc_terminate
safe-mode = on
Chú ý: Một số hàm bị vô hiệu hóa có thể được Website sử dụng. Khi đó bạn cần loại bỏ hàm đó ra khỏi danh sách để đảm bảo Web hoạt động ổn định.
Việc kích hoạt chế độ an toàn và hạn chế các hàm nguy hiểm giúp giảm khả năng bị khai thác lỗ hổng, tấn công mã độc từ PHP.
5. Quản lý quyền truy cập MySQL
Khi tạo tài khoản truy cập Database, lưu ý:
- Không sử dụng User/Pass quản trị Hosting cho Database.
- Chỉ cấp các quyền cần thiết, tránh cấp quyền DROP, ALTER, CREATE USER...
6. Hạn chế sử dụng chmod 777 cho Folder/File
Chỉ chmod 777 khi thực sự cần thiết và nhớ thay đổi lại quyền truy cập sau khi hoàn tất công việc. Quyền chmod 777 cho phép mọi người đọc/ghi/thực thi File, rất nguy hiểm.
7. Mã hóa thông tin nhạy cảm
Các file chứa thông tin bí mật (như cấu hình kết nối Database) nên được mã hóa, ví dụ:
- Dùng hàm base64_encode() của PHP
- Sử dụng công cụ mã hóa Zend Guard của Zend (https://www.zend.com/)
8. Chặn truy cập Source Code khi Server lỗi
Tạo file .htaccess với nội dung:
Order Allow,Deny
Deny from All
Order Allow,Deny
Deny from All
Điều này ngăn việc Download mã nguồn khi PHP gặp sự cố (do lỗi nội bộ hay tấn công từ bên ngoài).
9. Tắt PHP trong thư mục chỉ định
Tạo file .htaccess trong thư mục Upload:
php_admin_flag engine off
Sau đó chmod 444 cho file .htaccess này.
Việc này giúp ngăn Hacker tải lên và thực thi các đoạn mã PHP độc hại.
10. Update liên tục, dùng mật khẩu mạnh
- Cập nhật các bản vá lỗi mới nhất cho mã nguồn và hệ thống.
- Sử dụng mật khẩu quản trị đủ dài, phức tạp.
- Phối hợp với nhà cung cấp dịch vụ để xử lý kịp thời khi phát hiện lỗ hổng.
Lưu ý:
- File php.ini chỉ có tác dụng trong thư mục chứa nó.
- Các file php.ini và .htaccess nên được bảo vệ bằng chmod 444.
Nguồn: Thiết kế Website