- CHMOD file conf_global.php thành "004" (có một số host ko hỗ trợ kiểu này)
- CHMOD thư mục chứa IBF thành "701"
- Tuyệt đối ko đặt user & pass database trùng với user & pass FTP
Đầu tiên tôi sẽ hướng dẫn cách đơn giản để dấu chuỗi index.php trên thanh trình duyệt.
1/ Các bạn dùng chức năng Search của Explorer để tìm toàn bộ trong thư mục của IBF chuỗi sau : index., sau đó bạn mở file đó ra và xóa index. đi.
2/ Mở file conf_global.php ra, và tìm đoạn này :
Mã lệnh (PHP) |
$INFO['php_ext'] = 'php'; |
Bạn đổi thành :
Mã lệnh (PHP) |
$INFO['php_ext'] = ''; |
Từ giờ trở đi, IBF của bạn sẽ không còn index.php trên thanh address nữa.
Thủ thuật nhỏ: Các bạn có thể đổi tên file index.php thành index.php3 hoặc index.php4 để phòng tránh hacker view index.php.
Bạn có thể đổi tên index.php thành index.php3 hoặc index.php4 hoặc bất kỳ bằng cách:
Ví dụ chúng ta đã dấu index.php trên thanh Address và bây giờ muốn đổi tên file index.php thành file khác. Chẳng hạn như vidu.php đi nhé.
- Chúng ta tạo file .htaccess với nội dung như sau
Mã lệnh |
DirectoryIndex vidu.php index.php index.php3 index.html |
- Sau đó up lên thư mục chứa IBF. Thế là xong.
- Các bạn dùng Explorer tìm tất cả file có text : sources/.
- Vào từng file, dùng chức năng Find and Replace (Mọi trình soạn thảo text đều hỗ trợ chức năng này).
- Bạn thay thế sources/ thành newfolder/ chẳng hạn (bạn có thể thay newfolder thành bất cứ tên gì bạn thích).
- Khi xong tất cả mọi file. Bạn thoát ra, và đổi tên thư mục sources thành tên mới của bạn.
Thế là xong.
PS : Áp dụng tương tự cho thư mục Skin.
- Bạn dùng Explorer tìm file có chứa : admin.
- Thay thế bằng tên file admin mới, ví dụ : newadmin.php (Nếu bạn chưa dấu file index thì khi đổi chỉ cần nhập newadmin. là được, mình chỉ thế này để các bạn theo dõi từ đầu và làm theo cho dễ).
Đến đây bạn đã hoàn thành rồi đấy.
xin nhắc các bạn thêm điều này.
Nếu các bạn chưa nắm vững cách hoạt động của các file này thì delete ngay đi nhé :
ssi.php
show.php
phpinfo.php
ở đây tôi xin hướng dẫn đổi conf_global.php thành abc.php
vào :
source/admin/admin_functions.php
tìm tất cả những từ conf_global.php thay bằng abc.php
Tìm trong 3 file : admin.php , index.php , ssi.php tất cả những từ conf_global.php thay bằng abc.php
Sau đó đổi file conf_global.php thành abc.php
Session ID :
+Bước 1:
Mở file ad_settings. php
Tìm code sau:
case 'dourl':
$this->save_config( array ( 'number_format', 'html_dir','safe_mode_skins', 'board_name','board_url','home_name','home_url', 'disable_gzip',
'html_url','upload_url', 'upload_dir', 'print_headers', 'header_redirect', 'debug_level', 'sql_debug' ) );
break;
thay bằng :
case 'dourl':
$this->save_config( array ( 'number_format', 'html_dir','safe_mode_skins', 'board_name','board_url','home_name','home_url', 'disable_gzip',
'html_url','upload_url', 'upload_dir', 'print_headers', 'session_hide', 'header_redirect', 'debug_level', 'sql_debug' ) );
break;
tìm tiếp :
$ADMIN->html .= $SKIN->add_td_row( array( "Print HTTP headers?
(Some NT installs require this off)" ,
$SKIN->form_yes_no( "print_headers", $INFO['print_headers'] )
) );
thêm đường sau :
$ADMIN->html .= $SKIN->add_td_row( array( "Hide Session ID?
(Removes Session ID from the URL)" ,
$SKIN->form_yes_no( "session_hide", $INFO['session_hide'] )
) );
bước2 mở index.php
tìm :
if ($ibforums->member['id'] and ( $std->my_getcookie('hide_sess') ) )
{
$ibforums->session_id = "";
}
thêm vào trước :
if ($INFO['session_hide'])
{
$ibforums->session_id = "";
}
+Bước 3:
Mở file conf_global. php
Thêm vào bất cứ đâu dòng code sau :
$INFO['session_hide'] = '1';
Code Pass cho Cpadmin, Cpmod :
Bạn dùng cách dưới đây để lập password cho cpadmin, và cpmod... để tránh khi bạn quên logout, người khác dùng nick bạn vào quậy phá forum
Demo :
http://vncool.com/forum/admin.php
Các bạn down load file : secondpass
unzip file đó ra sẽ được 3 file: auth.php, create_pwd.php, htpasswd.txt
file create_pwd.php được dùng để tạo pass cho bạn sử dụng
cách sử dụng:
up load file auth.php và htpasswd.txt vào folder có chứa file bạn muốn bảo vệ
open file bạn cần bảo vệ, đặt đoạn code sau vào đầu tiên của file
up load file create_pwd.php lên host, đâu cũng được miễn là bạn có thể truy cập nó bằng internet explorer
dùng IE để truy cập vô file create_pwd.php, bạn sẽ thấy có dòng:
Enter your password:
bạn type pass word bạn muốn set vào ô bên cạnh, nhấn Encode
khi đó, bạn sẽ nhận được 1 dòng dạng:
Your password has been encoded as: 098f6bcd4621d373cade4e832627b4f6
phần đằng sau dấu ":" (đánh dấu đỏ) chính là password của bạn đã được mã hóa, tạm gọi là pass của bạn
bây giờ vào edit file htpasswd.txt trên host
bạn đổi chữ test thành tên khác mà bạn muốn,
bạn thay thế toàn bộ phần đằng sau dấu ":" bằng chính pass của bạn đã lấy được ở bước trên (bước dùng file create_pwd.php)
sau đó save file htpasswd.txt lại và đổi tên nó thành .htpasswd
bạn hãy chú ý tới dấu chấm đằng trước của tên file sau khi đổi tên nhé
bây giờ vào file bạn bảo vệ, bạn sẽ thấy nó sẽ hỏi pass trước khi cho phép bạn truy cập vào
user = user bạn đã nhập thay cho chữ test ở file htpasswd.txt
pass = pass của bạn
Xoá bỏ Session của IBF trên thanh Address :
Tiến hành như sau : mở file
functions.php .
Tìm dòng : $this->session_id = md5( uniqid(microtime()) );
thay bằng $this->session_id = "";
Xong .
Nhìn IBF gọn gàng & an toàn hơn.
Script giúp backup databse :
$appname="Backup MySQL";
$copyright="Le Van Chuong - VnToDaY";
function sqldumptable($table, $fp=0) {
$tabledump = "\n";
$tabledump.= "# Struc cua table: " .$table . "\n";
$tabledump.= "DROP TABLE IF EXISTS $table;\n";
$tabledump.= "CREATE TABLE $table (\n";
$firstfield=1;
$fields = mysql_query("SHOW FIELDS FROM $table");
while ($field = mysql_fetch_array($fields)) {
if (!$firstfield) {
$tabledump .= ",\n";
} else {
$firstfield=0;
}
$tabledump .= " $field[Field] $field[Type]";
if (!empty($field["Default"])) {
$tabledump .= " DEFAULT '$field[Default]'";
}
if ($field['Null'] != "YES") {
$tabledump .= " NOT NULL";
}
if ($field['Extra'] != "") {
$tabledump .= " $field[Extra]";
}
}
mysql_free_result($fields);
$keys = mysql_query("SHOW KEYS FROM $table");
while ($key = mysql_fetch_array($keys)) {
$kname=$key['Key_name'];
if ($kname != "PRIMARY" and $key['Non_unique'] == 0) {
$kname="UNIQUE|$kname";
}
if(!is_array($index[$kname])) {
$index[$kname] = array();
}
$index[$kname][] = $key['Column_name'];
}
mysql_free_result($keys);
while(list($kname, $columns) = @each($index)){
$tabledump .= ",\n";
$colnames=implode($columns,",");
if($kname == "PRIMARY"){
$tabledump .= " PRIMARY KEY ($colnames)";
} else {
if (substr($kname,0,6) == "UNIQUE") {
$kname=substr($kname,7);
}
$tabledump .= " KEY $kname ($colnames)";
}
}
$tabledump .= "\n);\n\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
$rows = mysql_query("SELECT * FROM $table");
$numfields=mysql_num_fields($rows);
$datastruc = "# Data cua table: " .$table . "\n";
fwrite($fp,$datastruc);
while ($row = mysql_fetch_array($rows)) {
$tabledump = "INSERT INTO $table VALUES(";
$fieldcounter=-1;
$firstfield=1;
while (++$fieldcounter<$numfields) {
if (!$firstfield) {
$tabledump.=", ";
} else {
$firstfield=0;
}
if (!isset($row[$fieldcounter])) {
$tabledump .= "NULL";
} else {
$tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
}
}
$tabledump .= ");\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
}
mysql_free_result($rows);
}
// MAIN PROC
$server = "localhost";
$username = "root"; //username cua mysql
$password = "chuong2404"; // pass cua mysql
$tablebk = "phpbb"; // Ten table can luu tru
$pathtofilename =""; // duong dan den thu muc can luu tru
// Tinh ngay thang;
$ngaythang = $today = date("d")."_".date("m")."_".date("y")."__time".date("g")."_".date("i");
//open file
$filename = $pathtofilename."/backup_date".$ngaythang;
$filehandle=fopen($filename.".sql","w");
// Connect to mysql
$connect = mysql_connect($server,$username,$password);
if (!$connect) {
echo "khong ket noi duoc voi mysql";
exit;
}
mysql_select_db($tablebk);
// Header
$header = "#----------------------------------------#\n";
$header.= "# Du lieu backup cua table: $tablebk #\n";
$header.= "# Ngay backup: " .$ngaythang ." #\n";
$header.= "# by Le Van Chuong VnToDaY#\n";
$header.= "#----------------------------------------#\n";
fwrite($filehandle,$header);
// end
$tablesbackup = mysql_query("SHOW tables");
while ($tablebackup = mysql_fetch_array($tablesbackup)) {
sqldumptable($tablebackup[0], $filehandle);
}
fwrite($filehandle, "\n\n\n");
fclose($filehandle);
$data = implode("", file($filename.".sql"));
$gzdata = gzencode($data, 9);
$fp = fopen($filename.".gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
if (file_exists($filename.".sql")) {
unlink($filename.".sql");
}
?>
Lời kết : Trên đây là những kinh nghiệm để bảo mật IBF, đặc biệt là để chống hack local. Tuy nhiên, 1 điều quan trọng nhất mà bạn ko thể quên là phải cập nhật thường xuyên các bug (lỗi bảo mật) về IBF để fix ngay lập tức