Collection by traibingo
121
Part 19
Chống tấn công SQL Injection trong Joomla
Hiện Joomla! ngày càng phát triển mạnh
mẽ và ngày càng được ứng dụng rộng
rãi ở Việt Nam với số lượng các thành
phần mở rộng (extensions) từ các hãng
thứ ba cũng tăng không ngừng cả về số
lượng và chất lượng. Rất nhiều thành
phần mở rộng (gồm component, module,
plugin, template ) thực sự tuyệt vời và đáng được cài đặt trên mọi
Website.
Tuy nhiên, có một thực tế song hành với mặt ưu điểm trên là số lượng các
Website bị tấn công thông qua các lỗi lập trình bất cẩn trong các thành
phần mở rộng được cài đặt thêm cũng ngày càng tăng cao. Thậm chí số
lượng lỗi bị khai thác còn cao hơn cả Microsoft (theo báo cáo 6 tháng đầu
năm 2008 của IBM).
Do vậy, ngay từ lúc này, bạn hãy kiểm tra lại toàn bộ hệ thống của mình để
đảm bảo: Chỉ cài đặt các thành phần mở rộng thực sự cần thiết, thực sự
uy tín và hãy nhờ một người có kinh nghiệm để kiểm tra các đoạn mã, mà
một trong số chúng thường bị hacker khai thác - các lỗi phổ biến về truy
vấn SQL (thường gọi là SQL Injection).
Đối với người sử dụng cuối (end-user):
Không dùng tiền tố mặc định 'jos_'
Collection by traibingo
122
Khi cài đặt website, Joomla sử dụng tiền tố mặc định cho các bảng của cơ
sở dữ liệu: 'jos_'. Tuy nhiên để tránh sự nhòm ngó của các haker bạn nên
đổi tiền tố này.
Không dùng tài khoản mặc định 'admin'
Tạo một tài khoản quản trị (Super Administrator) mới thay vì dùng tài
khoản mặc định có tên 'admin'
Đổi tên và vô hiệu hóa tài khoản mặc định 'admin' mà Joomla đã tạo
ra khi cài đặt bằng cách: Mở bảng _users, tìm bản ghi có id=62, đổi
username khác 'admin' và thay block bằng '1')
Đối với những người lập trình (developer) thì chú ý những vấn đề
sau:
Ép kiểu dữ liệu
Luôn ép kiểu dữ liệu cho các chuỗi đưa vào câu lệnh truy vấn SQL. Thí dụ:
Nếu muốn kiểu dữ liệu là kiểu nguyên (integer) thì sử dụng câu lệnh SQL:
Collection by traibingo
123
$sql = 'UPDATE #__mytable SET `id` = ' . (int) $int;
Nếu muốn kiểu dữ liệu là kiểu ngày/tháng (date) thì sử dụng câu lệnh SQL:
$date = & JFactory::getDate($mydate);
$sql = 'UPDATE #__mytable SET `date` = ' . $db->quote( $date-
>toMySQL(), false);
Luôn gỡ bỏ ý nghĩa của những ký tự đặc biệt
Bạn cần gỡ bỏ ý nghĩa của những ký tự đặc biệt (những ký tự có khả năng
gây nguy hiểm cho câu lệnh SQL) nằm trong các chuỗi dữ liệu được đưa
vào câu lệnh SQL bằng câu lệnh:
$sql = 'UPDATE #__mytable SET `string` = ' . $db->quote( $db-
>getEscaped( $string ), false );
Chống tấn công DOS
Trong các mệnh đề WHERE, nếu bạn có sử dụng lệnh LIKE, hãy đảm bảo
rằng bạn đã lọc các ký tự đặc biệt như "%" và "_" thì sử dụng câu lệnh
SQL:
$sql = 'UPDATE #__mytable SET WHERE `string` LIKE '.
$db->quote( $db->getEscaped( $string, true ), false )
Chống tấn công XSS
Rất nhiều người có thói quen lấy dữ liệu nhập vào từ người dùng bằng câu
lệnh JRequest::getVar(). Tuy nhiên đây là một thói quen không tốt. Thay
vào đó bạn nên sử dụng các phương thức ép kiểu. Thí dụ:
Nếu muốn kiểu số nguyên, dùng câu lệnh:
$int = JRequest::getInt( $name, $default );
Nếu muốn kiểu số thực, dùng câu lệnh:
$float = JRequest::getFloat( $name, $default );
Nếu muốn kiểu logic (đúng/sai), dùng câu lệnh:
Collection by traibingo
124
$bool = JRequest::getBool( $name, $default );
Nếu muốn kiểu từ (word): chỉ có các ký tự chữ cái và ký tự gạch dưới "_",
dùng câu lệnh:
$word = JRequest::getWord( $name, $default );
Nếu muốn kiểu câu lệnh (command): chỉ có các ký tự chữ cái, ký tự số, ký
tự "." và "_", dùng câu lệnh:
$cmd = JRequest::getCMD( $name, $default );
Nếu muốn kiểu văn bản không phải HTML (văn bản đã được lọc bỏ các thẻ
HTML), dùng câu lệnh:
$string = JRequest::getString( $name, $default );
Kiểm tra Website Joomla bằng Joomla! HISA
Joomla HISA là một công cụ kiểm tra - bảo mật cho phép:
Kiểm tra một HOSTING có đáp ứng các yêu cầu cần thiết để cài đặt
Joomla hay không
Thông báo các thông số của HOST (tên host, địa chỉ IP ); thông số
về PHP, MYSQL
Cảnh báo về các thiết lập không an toàn
Cảnh báo về các thư mục chưa được thiết lập đúng quyền hạn
Cũng giống như "Joomla Diagnostics", rất đơn giản bạn chỉ cần tải về
công cụ có tên là Joomla! HISA (Joomla! Health, Installation and Security
Audit). Sau đó upload 1 file duy nhất (joomla_hisa_en.php) lên Hosting
định cài đặt Joomla và xem kết quả.
Phiên bản Joomla HISA hiện tại chỉ cho phép kiểm tra dòng Joomla! 1.0.x
(từ Joomla 1.0.10 trở đi)
Collection by traibingo
125
Quy trình kiểm tra
Download Joomla HISA: >> Joomla HISA <<<
Giải nén và upload Joomla! HISA: Giải nén, sau đó upload 1 file duy
nhất (joomla_hisa_en.php) lên thư mục chứa Joomla
Chạy Joomla! HISA: Mở trình duyệt và gõ vào URL tới file
"joomla_hisa_en.php".
VD: http://yoursite.com/joomla/joomla_hisa_en.php
Joomla! HISA sẽ thông báo kết quả
Host Environment: Thông số chung của Host
Collection by traibingo
126
PHP Environment: Thông số về PHP
MySQL Environment: Thông số về MySQL
Joomla! Environment: Các thông số liên quan cho Joomla
Required and Recommended Settings: Các yêu cầu bắt buộc và
khuyến cáo
Nếu một trong các thiết lập bị cảnh báo bằng màu đỏ thì bạn nên xem bài
viết "Xử lý cảnh báo trong quá trình cài đặt và cấu hình Joomla!" để biết
cách khắc phục.
Collection by traibingo
127
Directory and File Permissions: Quyền hạn đối với các tệp và thư
mục
Để tránh các HACKER nhòm ngó bạn nên thiết lập các thư mục với
CHMOD = 755, các tệp với CHMOD = 644
Chú ý:
Thứ nhất, nên đổi tên file joomla_hisa_en.php trước khi upload lên host
(Chẳng hạn đổi tên thành yoursite_hisa.php)
Thứ hai, sau khi sử dụng hãy xóa ngay file Joomla Hisa nói trên
. nhất (joomla_ hisa_en.php) lên Hosting
định cài đặt Joomla và xem kết quả.
Phiên bản Joomla HISA hiện tại chỉ cho phép kiểm tra dòng Joomla! 1.0.x
(từ Joomla. tra Website Joomla bằng Joomla! HISA
Joomla HISA là một công cụ kiểm tra - bảo mật cho phép:
Kiểm tra một HOSTING có đáp ứng các yêu cầu cần thiết