Tổng quan về bảo mật cho IBF gồm các phần chính sau :
- Đổi tên file cấu h́nh : conf_global.php
- Đổi tên file Login vào Control Panel : admin.php
- Giấu chuỗi index, đổi tên file index.php, và đổi tên thư mục Sources.(Cái này có thể ko cần làm)
- Thiết lập mật khẩu bảo vệ Control Panel : Security Password.
- Giới hạn số lần truy nhập Admin CP có User và Password sai.
- Xây dựng tường lửa bảo vệ.
- Mă hoá.
- Cập nhật và Fix lỗi thường xuyên.
Sau đây tôi sẽ hướng dẫn các bạn thực hiện các bước trên để có thể giúp các bạn bảo mật Diễn đàn một cách tốt nhất có thể. Công cụ để sửa code ở đây tôi dùng Macromedia Dreamweaver (Hỗ trợ t́m Text trong tất cả các file ở thư mục định sẵn).
1. Đổi tên file cấu h́nh conf_global.php :
T́m tất cả các file có chuỗi conf_global. thay bằng tên mà bạn muốn thay. Ví dụ tôi đổi tên file thành : config4r.php th́ tôi t́m conf_global. thay bằng config4r. (chú ư là có dấu . đấy nhé)
Sau đó bạn vào thư mục gốc của Forum đổi tên conf_global.php thành config4r.php là xong bước 1.
2. Đổi tên admin.php (ở đây tôi ví dụ là đổi thành file : 4rcp.php )
T́m tất cả các file có chuỗi admin. thay bằng 4rcp.
Sau đó vào thư mục gốc của Forum đổi tên admin.php thành 4rcp.php.
Đă xong bước 2
3. Đổi tên thư mục sources và giấu chuỗi Index. Và nếu muốn có thể đổi tên index.php
T́m tất cả các file có chuỗi sources thay bằng tên thư mục bạn muốn đổi. Ví dụ tôi đổi tên thư mục Source thành thư mục : code , tôi t́m tất cả các file có chuỗi sources thay thế bằng code
Sau đó đổi tên thư mục sources thành code .
Giấu chuỗi index :
T́m chuỗi index. ở tất cả các file rồi xoá đi. (Không điền ǵ vào ô Replace)
Done ! Như vậy bạn đă tạo thêm một Password bảo vệ cho Forum của bạn khi Login vào Admin CP.
5. Giới hạn số lần nhập sai User và Pass khi đăng nhập vào Admin CP.
Mở file 4rcp.php (file admin.php) t́m đoạn sau :
//----------------------------------
// Attempt to get the details from the
// DB
//----------------------------------
Bổ sung ngay phía dưới :
require $root_path."sources/lib/emailer.php";
$this->email = new emailer();
Sau đó t́m tiếp ngay dưới :
if ( empty($mem['id']) )
{
Bổ sung thêm :
$ip_address=getenv("HTTP_X_FORWARDED_FOR");
if ($ip_address=="") {
$ip_address=getenv("REMOTE_ADDR");
}
$ip_hostname = @gethostbyaddr($ip_address);
$mail = $INFO['email_out'];
$this->email->message = "Cảnh báo !!! Có một ai đó đă cố gắng truy cập vào Admin CP của bạn!\n\nVới Username là : $username\nvà Password đă mă hoá MD5 là : $password (".md5($password).")\n\nĐịa chỉ IP của người đă cố gắng đăng nhập là : $ip_address\n Host là: $ip_hostname\n\nBạn có thể t́m được thông tin về người đă sử dụng IP này để truy cập vào Admin CP của bạn bằng địa chỉ sau [Thành viên phải đăng kư mới xem được link này. ] ";
$this->email->subject = "Cảnh báo : Có kẻ t́m cách xâm nhập Administration CP ";
$this->email->to = $mail;
$this->email->send_mail();
Bây giờ ta t́m tiếp :
if ($pass != $mem['password'])
{
Thêm dưới đó :
$ip_address=getenv("HTTP_X_FORWARDED_FOR");
if ($ip_address=="") {
$ip_address=getenv("REMOTE_ADDR");
}
$ip_hostname = @gethostbyaddr($ip_address);
$mail = $INFO['email_out'];
$this->email->message = "Cảnh báo !!! Có một ai đó đă cố gắng truy cập vào Admin CP của bạn!\n\nVới Username là : $username\nvà Password đă mă hoá MD5 là : $password (".md5($password).")\n\nĐịa chỉ IP của người đă cố gắng đăng nhập là : $ip_address\n Host là: $ip_hostname\n\nBạn có thể t́m được thông tin về người đă sử dụng IP này để truy cập vào Admin CP của bạn bằng địa chỉ sau [Thành viên phải đăng kư mới xem được link này. ] ";
$this->email->subject = "Cảnh báo : Có kẻ t́m cách xâm nhập Administration CP ";
$this->email->to = $mail;
$this->email->send_mail();
Done, như vậy bạn đă xong bước thứ 5. Từ bây giờ bất kỳ ai nhập Password đăng nhập Admin CP sai quá 3 lần, IBP của bạn sẽ gửi thư cảnh báo về cho bạn ngay.
Phù mỏi tay quá, mấy cái sau tôi chỉ giới thiệu qua thôi .
6. Xây dựng tường lửa.
Có rất nhiều loại tường lửa có thể sử dụng, nhưng ở đây tôi sẽ hướng dẫn bạn cách xây dựng m ột PHP Firewall thông qua .htpasswd (có thể đọc tham khảo bài bảo mật ACP của tôi)
Tạo file : baove.php với đoạn code sau :
<?php
global $_matrix2k_auth_passwd_file, $_matrix2k_auth_OK;
$_matrix2k_auth_passwd_file = ".htpasswd";
$_matrix2k_auth_OK = 0;
function _matrix2k_auth_die($str) {
?>
<html>
<head>
<title>Firewall protect for ACP Matrix 2K </title>
</head>
<body>
<center><h1>Firewall 1 protect for ACP IBF </h1>
<h2>Please Type your user and password to Login Firewall 2 or ACP Hi Hi ! </h2></center>
<center><h3><?php echo $str ?></h3></center>
</body>
</html>
<?php
exit(-1);
}
function _matrix2k_auth_check($us er, $password, $level) {
Mă hoá th́ chúng ta dùng Tool, Tool tốt nhất là Zend code, nếu ko có bạn có thể xài PHPEncode cũng được. Hăy Search rồi Load tool về để encode các file php của bạn lại .
8. Cập nhật và Fix lỗi.
Các bạn phải cập nhật và Fix lỗi thường xuyên và liên tục. Dưới đây là một số lỗi đă công bố của IBP 1.3 và cách Fix :
*************************
Lỗi SQL Injection ở forum.php
*************************
T́m đoạn code :
if ( (!isset($sort_keys[$sort_key])) and (!isset($prune_by_day[$prune_value])) and (!isset($sort_by_keys[$sort_by])) )
Thay bằng :
if ( (!isset($sort_keys[$sort_key])) or (!isset($prune_by_day[$prune_value])) or (!isset($sort_by_keys[$sort_by])) )
*************************
Lỗi SQL Injection ở calendar.php
*************************
T́m trong file : sources/calendar.php đoạn code sau :