Bài viết mới nhất về "Hacking - Security"
Showing posts with label Hacking - Security. Show all posts

Tổng hợp các phương pháp bảo mật cho xenforo mới nhất 2017

Chào các bạn, hôm nay mình sẽ hướng dẫn các bạn về bảo mật của diễn đàn XenForo. Các bạn có thể chọn các phần theo nhu cầu bảo mật của mình sao cho tiện lợi nhất.

I. Tạo thêm 1 lần đăng nhập trước khi vào AdminCP.

- Mở file admin.php thêm vào sau:

Thêm đoạn code sau vào dưới <?php

//Dang nhap vao admincp
$config['user_security'] = 'yourusername';
$config['pass_security'] = 'yourpassword';

if ($_SERVER['PHP_AUTH_USER'] != $config['user_security'] || $_SERVER['PHP_AUTH_PW'] != $config['pass_security']){
    header('WWW-Authenticate: Basic realm="Xin vui long khai bao thong tin yeu cau truoc khi duoc chuyen den bang dang nhap"');
    header('HTTP/1.0 401 Unauthorized');

    //Trang sẽ hiển thị khi thông tin khai báo sai. (support HTML).
    echo '<center>Access Denied!!!</center>';
    exit;
}

Tổng hợp các phương pháp bảo mật cho xenforo mới nhất 2017

II. Bảo vệ file admin.php bằng .htaccess

- Mở file .htaccess (ngang hàng với index.php) thêm vào đoạn code sau:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_HOST} !^12.34.56.78
RewriteCond %{REQUEST_URI} !/index.php$
RewriteRule .* /index.php [R=302,L]

Thay 12.34.56.78 bằng IP của bạn (Tác dụng của việc này là chỉ cho phép IP của bạn có thể truy cập vào AdminCP). Để biết được IP của bạn các bạn vào http://whoer.net

Tổng hợp các phương pháp bảo mật cho xenforo mới nhất 2017

III. Bảo mật admin bằng IP

Đầu tiên tạo 1 file security.php với nội dung sau:

<?php
$file_listip = "listip.txt";
$fopen_ip = fopen($file_listip, "r");

while (!feof($fopen_ip) )
{
    $read_ip = fgets($fopen_ip,50);
    $read_ip = preg_replace('(\n)', '', $read_ip);
    $list_ip[] = $read_ip;
}
fclose($fopen_ip);
if (!in_array($_SERVER['REMOTE_ADDR'], $list_ip)) { 
   echo "Bạn không phải là thành viên ban quản trị!";
   exit();
}
?>

Tiếp theo, tạo thêm 1 file checkip.php với nội dung sau:

<?php
session_start();
include('admin_pass.php');
$file_listip = "listip.txt";

if(!is_file($file_listip)) { 
   $fp_host = fopen($file_listip, "w");
   fclose($fp_host);
}
if(!is_file($file_listip)) {
   echo "<center>Khong the tao file <b>$file_listip</b> . Vui long tao file <b>$file_listip</b> dat vao trong thu muc <b>admin</b> va chuyen <b>File permission</b> cua file <b>$file_listip</b> sang <b>666</b><br><img src='images/chmod.jpg'></center>"; 
   exit();
}
if(!is_writable($file_listip)) {
   echo "<center>File <b>$file_listip</b> khong the ghi. Vui long su dung chuong trinh <a href='http://filezilla-project.org/download.php' target='_blank'><b>FileZilla</b></a> chuyen <b>File permission</b> cua file <b>$file_listip</b> sang <b>666</b><br><img src='../images/chmod.jpg'></center>"; 
   exit(); 
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Kiểm tra IP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$fopen_ip = fopen($file_listip, "r");

while (!feof($fopen_ip)) {
    $read_ip = fgets($fopen_ip,50);
    $list_ip[] = $read_ip;
}
fclose($fopen_ip);

if (in_array($_SERVER['REMOTE_ADDR'], $list_ip)) {
        echo "<center>IP của bạn đã được cập nhập sẵn.</center>";
} else {
   if (isset($_POST['submit'])) {
      $code = md5($_POST['code']);
      if ($code == $pass_checkip) $_SESSION['code'] = $pass_checkip;
   }
   if (!$_SESSION['code'] || $_SESSION['code'] != $pass_checkip) {
      echo "<center><form action='' method='post'>Code: <input type='password' name='code'> <input type='submit' name='submit' value='Submit'></form></center>";
      exit;
   }
      $new_ip = $_SERVER['REMOTE_ADDR'];
      $fp = fopen($file_listip, "a+");  
      fputs ($fp, "$new_ip\n");  
      fclose($fp);
      echo "<center>IP của bạn đã được cập nhập thành công.</center>";
}
?>
</body>
</html>

Tạo 1 file admin_pass.php dùng để chứa mật khẩu

<?php
$pass_checkip = 'e10adc3949ba59abbe56e057f20f883e';    //Pass để vào trang checkip.php. Sử dụng dạng mã hóa md5 http://tools.sinhvienit.net/md5/
?>

e10adc3949ba59abbe56e057f20f883e là mật khẩu để vào trang checkip.php nhé

Cuối cùng tạo 1 file listip.txt rồi lưu lại

Sau đó mở file admin.php ra thêm đoạn 

include('security.php');

vào dưới <?php lưu lại và up tất cả lên ngang hàng với file index.php

Để cập nhật ip bạn vào http://sitecuaban/checkip.php

Lưu ý: Nên đổi tên các file thành tên khác nhé

IV. Bảo Vệ File admin.php bằng htpasswd

Sau đây mình sẽ hướng dẫn tạo được file .htpasswd trên 2 Hosting Controller thông dụng hiện nay là Cpanel & Directadmin.
Với cPanel:
- Đăng nhập vào cPanel
- Chọn "Password Protect Directories" >> "Web Root" >> Chọn thư mục gốc diễn đàn của bạn
-Check vào "Password protect this directory"
- Trong ô "Name the protected directory" điền: Admin Control Panel Protected
- Nhấn vào Save.
- Trong phần "Create User" điền vào Username & Password của bạn.
- Nhấn "Add/modify authorised user" Ok, như vậy bạn đã có 1 file passwd ở: /.htpasswds/public_html/ten_folder_dien_dan
Với Directadmin:
- Đăng nhập vào Directadmin
- Chọn "Password Protected Directories" >> "Find a Directory to Password Protect" >> chọn thư mục gốc diễn đàn của bạn.
- Check vào ô "Protection Enabled".
- Điền lần lượt các thông số "Protected Directory Prompt" - "Set/Update User" - "Password" - "Re-Enter Password"
- Nhấn vào Save. Ok, như vậy bạn đã có 1 file passwd ở: .htpasswd/public_html/ten_folder_dien_dan

Sau khi tạo file htpasswd ở trên. Các bạn mở file .htaccess (trong thư mục gốc forum của bạn) thêm đoạn sau vào:

<Files admin.php>
AuthType Basic
AuthName "ACP Protected"
AuthUserFile "path/to/passwd/file"
Require valid-user
</Files>

Chú ý: path/to/passwd/file sẽ có dạng
- /home/domain.com/domains/domain.com/.htpasswd/public_html/.htpasswd(với Directadmin)
- /home/domain.com/.htpasswds/public_html/passwd (với cPanel)