Affiliate

Kiếm tiền Youtube

BÀI MỚI NHẤT

Tổng hợp các phương pháp bảo mật cho Xenforo

21:26 Thêm bình luận

I. Di chuyển vị trí file config
- Bước 1: 

Đầu tiên tạo một thư mục chứa file config, thư mục này đê đâu tuỳ các bạn
ví dụ: diendan/game/data/core/app/vnxf
Ở đây vnxf là thư mục chứa file config mình tạo.


- Bước 2: 
sau đó copy file config của các bạn đặt vào đó, đổi tên file config
ví dụ: mình đổi config.php thành vnxf.php

- Bước 3:

chmod file config vừa đổi tên (ví dụ: vnxf.php) thành 400
chmod thư mục chứ file config thành 101

- Bước 4:
Mở file config.php gốc trong thư mục library lên xoá toàn bộ nội dung trong đó và thay bằng đoạn code sau:

Mã:
<?php include "diendan/game/data/core/app/vnxf/vnxf.php" ?>
sau đó chmod 400
Trong đó: diendan/game/data/core/app/vnxf/vnxf.php là đường dẫn tới file config
chmod 101 cho thư mục: Tác dụng khi truy cập vào thư mục thì sẽ báo thư mục rỗng
chmod 400 cho file: Chống sửa

P/s: Chống chỉ định với các bạn sử dụng code load cache.
II. Đặt code trong nhiều lớp thư mục
Thông thường khi local attack (local thế nào các bạn hỏi google nhé) hacker thường sẽ get file config để lấy thông tin database. Thường thì cũng dễ đoán đường dẫn thôi nếu không thay đổi. Mình ví dụ với direct admin thì đường dẫn mặc định thế này:

- /home/vnxf/domains/vnxf.vn/public_html/library/config.php
hoặc nếu đặt code trong thư mục thì sẽ thế này
- /home/vnxf/domains/vnxf.vn/public_html/folder/library/config.php
vậy hacker chỉ cần run câu lệnh đến đường dẫn đó là xong (cách run lệnh và làm thế nào để run bà con tự tìm hiểu nhé)

Để phòng tránh điều này thì ta đặt code inclu trong nhiều thư mục ví dụ thế này:
/home/vnxf/domains/codientu.org/public_html/folder/folder1/folder2/folder3/folder4/diendan

Rồi việc còn lại là trỏ domain tới cái thư mục diendan tức là cái thư mục cuối cùng chứa code. (trỏ domain ra sao hỏi google nhé :)) )

Vậy đường dẫn của site vẫn là thế này http://yourdomain/diendan

=> ai cũng nghĩ code ta chỉ đặt trong thư mục diendan và nghĩ đường dẫn của ta là thế này:

/home/vnxf/domains/vnxf.vn/public_html/diendan/library/config.php

chẹp mà hacker không gà thế đâu nếu run lệnh không được họ sẽ dễ dàng đoán ra ta đặt code xuyên nhiều thư mục .

Mà cái quan trọng là tên các thư mục cha mẹ của thư mục diendan tên là gì mỗi mình ta biết thôi đâu ai biết đâu, vậy cứ để người khác ngồi mò đường dẫn đi. :) tốn kha khá time đấy.

Chú ý CHMOD mỗi lớp thư mục là 701, up lên file index.html với nội dung rỗng để che không cho thấy nội dung trong thư mục (trừ cái thư mục cuối cùng chưa code đó dừng up nhé không lại ko vào đc 4rum :) )

P/s: cách này hay nhưng sẽ là xấu đường link khi dùng xenporta nên ai muốn làm đẹp link thì khỏi dùng 
:))

III. Sử dụng file .htaccess để bảo mật website

Việc sử dụng htaccess giúp hạn chế tối đa việc chèn Shell nếu có lỗi. Các thư mục sau: public_html/data ,public_html/styles ,public_html/js bạn up file .htaccess với nội dung sau:
Mã:
<FilesMatch "\.(cgi|pl|php)$"> # Bạn có thể tự cập nhật file không cho phép chạy, ở đây chỉ cấm 03 loại file: cgi, pl và php
Order Deny,Allow
Deny from all
</FilesMatch>
Các thư mục sau: public_html/library , public_html/internal_data ,public_html/install (tùy)bạn up file.htaccessvới nội dung sau:
Mã:
Order deny,allow
Deny from all
IV. Bảo mật admincp

Phần 1: Thay đổi địa chỉ trang quản lí admin

(Mặc định trang quản lí của bạn là http://tenwebsiteban/admin.php).

- Vào host đổi tên file admin.php thành tên bạn muốn (ví dụ: abc.php).

- Mở file: library/XenForo/Link.php. Tìm đoạn code sau:
Mã:
$outputLink = 'admin.php' . ($append !== '' ? '?' : '') . $append;
if ($fullLink)
- Thay admin.php bằng tên file mà bạn vừa đổi.
Ví dụ:
Mã:
$outputLink = 'abc.php' . ($append !== '' ? '?' : '') . $append;
- Mở template moderator_bar tìm đoạn code sau:
Mã:
<a href="admin.php" class="acp adminLink"><span class="itemLabel">{xen:phrase admin_control_panel}</span></a>
- Thay admin.php bằng tên file mà bạn vừa đổi.
Ví dụ:
Mã:
<a href="abc.php" class="acp adminLink"><span class="itemLabel">{xen:phrase admin_control_panel}</span></a>
Phần 2: Tạo thêm 1 lần đăng nhập trước khi vào AdminCP.
- Mở file admin.php (hoặc file mà bạn vừa đổi tên) thêm vào sau dòng <?php đoạn code sau:
Mã:
//Dang nhap vao admincp$config['user_vietxforg'] = 'yourusername';$config['pass_vietxforg'] = 'yourpassword'; if ($_SERVER['PHP_AUTH_USER'] != $config['user_vietxforg'] || $_SERVER['PHP_AUTH_PW'] != $config['pass_vietxforg']){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;}
Phần 3: Tạo 1 file admin.php ảo để đánh lừa hacker.
- Sau khi hoàn thành bước 1 file admin.php thật sẽ được thay đổi. Bạn có thể tạo ra 1 file admin.php ảo có nội dung như sau:
Các bạn tải file đính kèm và sửa các code sau:
Mã:
<title>Cộng đồng Xenforo Việt Nam - Admin Control Panel Login | Admin CP - Cộng đồng Xenforo Việt Nam</title>
Mã:
Cộng đồng Xenforo Việt Nam - Admin Control Panel Login
Mã:
http://vnxf.vn
Mã:
vnxf.vn
Thành title và link site bạn nhé. Lưu ý chỉ sửa những cái mình ghi ở trên.

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

- Bước 1:
 
Tạo 1 file php đặt tên là baomat.php

Mã:
<?php
$list_ip = array(
"127.0.0.1", // Local
"202.78.227.157" // IP Hosting
);
$file_listip = "themip.txt"; // Kiem tra xem trong file themip.txt co ip dang truy cap khong.
$fopen_ip = fopen($file_listip, "r");
while ( !feof($fopen_ip) )
{
$read_ip = fgets($fopen_ip,50);
$ip = explode('<nbb>', $read_ip);
$list_ip[] = $ip[1];
}
fclose($fopen_ip);
if ( !in_array($_SERVER['REMOTE_ADDR'], $list_ip) ){
echo "<center></center>";
exit();
}
?>
- Bước 2: Tạo tiếp 1 file php đặt tên là themip.php
Mã:
<?php
SESSION_start();
$pass = 'vnxf.vn'; // Mat khau de them ip vao file txt
$file_listip = "themip.txt"; // file txt co nhiem vu them ip
?>
<!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);
$ip = explode('<nbb>', $read_ip);
$list_ip[] = $ip[1];
}
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 ($_POST[submit]) {
if ($_POST[code] == "$pass") $_SESSION['code'] = "$pass";
}
if (!$_SESSION['code'] || $_SESSION['code'] != "$pass") {
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, "<nbb>$new_ip<nbb>\n");
fclose($fp);
echo "<center>IP của bạn đã được cập nhập thành công.</center>";
}
?>
</body>
</html>
Đoạn này:
Mã:
vnxf.vn
là pass nhé các bạn thay tùy ý.

- Bước 3:
Tiếp tục mở Notepad lên rồi lưu lại với tên themip.txt

Bước 4: Mở file admin.php thêm đoạn code này
Mã:
include("baomat.php");
dưới dòng <?php

Bước 5: up tất cả lên host ngang hàng index
* tác dụng của các file:

Khi các bạn gõ đường dẫn: http://yoursitename/admin.php nó sẽ đọc lệnh:
include("baomat.php"); trước và chạy file baomat.php, file baomat.php sẽ check trong file themip.txt xem có địa chỉ IP bạn trong đó không, nếu có thì nó sẽ chuyển bạn tới khung đăng nhập của admincp, nếu không có thì nó sẽ hiện trang trắng.

Để thêm IP bạn chạy link: http://yoursite/themip.php

và nhập pass vào ô code

Chúc các bạn thành công.

Tạo mới và sử dụng thư viện trong CodeIgniter

23:19 Thêm bình luận

Tạo mới thư viện

Một thư viện Codeigniter là một tập hợp các chức năng cố định, có tính logic cao và hợp lý, được thể hiện dưới dạng các lớp, cũng tương tự như các controller và model. Tuy nhiên các libraries lại được dùng để cung cấp các chức năng bên ngoài các controllers.

Bài viết này sẽ tập trung hướng dẫn các bạn cách tạo mới một thư viện và sử dụng thư viện đó trong hệ thống CodeIgniter.
Việc nâng cấp hoặc mở rộng những thư viện được dựng sẵn trong hệ thống cũng khá đơn giản, bạn có thể thêm xử lý, điều chỉnh xử lý hoặc thay thế hoàn toàn những xử lý có sẵn bên trong thư viện cũ đó bằng cách ghi đè phiên bản của thư viện trong thư mục application/libraries của bạn.
Tóm lược bài viết sẽ hướng dẫn cách:
  • Tạo một thư viện hoàn toàn mới của riêng bạn
  • Mở rộng những thư viện đã có sẵn của hệ thống
  • Thay thế hoàn toàn những thư viện cũ
Lưu ý: Ngoại trừ việc không thể ghi đè lớp thư viện database giúp thao tác và quản lý connection thì tất cả các lớp thư viện khác đều có thể mở rộng

Lưu trữ - Storage

Lớp thư viện của bạn nên được đặt trong thư mục application/libraries đây là nơi mặc định hệ thống sẽ load các thư viện khi khởi tạo. Bạn có thể đặt ở nơi khác nhưng phải cấu hình lại đường dẫn thư viện

Quy ước khi đặt tên

  • Tên file phải bắt đầu bằng một ký tự hoa và không chứa ký tự đặc biệt. VD: Mycar.php
  • Tên lớp phải bắt đầu bằng một ký tự hoa và không chứa ký tự đặc biệt. VD: class Mycar
  • Tên file phải trùng với tên lớp
Tóm lại: tên file và tên lớp phải trùng với nhau, phải bắt đầu bằng một ký tự in hoa và không được chứa ký tự đặc biệt.

Nguyên mẫu

Một lớp thư viện phải có nguyên mẫu cơ bản như sau
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mycar {
public function turn_left(){
//code here ...
}

public function turn_right($sound){
//code here ...
}

public function go_along(){
//code here
return true; //Giá trị minh họa
}

public function stop($postion){
//code here
return true; //Giá trị minh họa
}
}
/* File Mycar.php */

Sử dụng thư viện

Ở mọi function nào trong bất kỳ controller nào bạn cũng có thể load thư viện mà bạn muốn dùng bằng câu lệnh
$this->load->library('Tên thư viện muốn gọi');

//Example: load Mycar class

$this->load->library('Mycar');

Để sử dụng những function ở bên trong thư viện chúng ta có thể sử dụng câu lệnh
$this->ten_thu_vien->ten_function(doi_so_neu_co);

//Ví dụ: chúng ta sẽ gọi function turn_left của thư //viện Mycar trong file Mycar.php
$this->Mycar->turn_left(); //Không có đối số truyền vào và trả về

//Ví dụ: chúng ta sẽ gọi function turn_right có đối số truyền vào
$this->Mycar->turn_right('olala');

//Ví dụ: chúng ta sẽ gọi function go_along có đối số trả về
$result = $this->Mycar->go_along();

//Ví dụ: chúng ta sẽ gọi function stop có đối số truyền vào và trả về
$result = $this->Mycar->stop('low');
Ngoài ra bạn cũng có thể truyền trực tiếp đối số (một giá trị hoặc một mảng các giá trị) khi load thư viện bằng cách sau
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Mycar', $params);
Trong lớp Mycar ở function __construct() chúng ta nhận về param để sử dụng
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mycar {
public function __construct($params){
//Sử dụng param...
}

.........................
}
/* File Mycar.php */

Kết hợp với tài nguyên của hệ thống

Trong thư viện của bạn muốn sử dụng cái tài nguyên của hệ thống thì chúng ta phải sử dụng một siêu object được trả về từ function get_instance() Thông thường ở các class trong controller chúng ta sẽ gọi các resource có sẵn một cách dễ dàng như sau
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
vv...
Nếu bạn sử dụng các tài nguyên của hệ thống trong lớp thư viện của bạn thì chúng ta sẽ phải làm như sau:
$CI =&get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
vv...

Thay thế một thư viện của hệ thống

Để thay thế hoàn toàn xử lý của một thư viện có sẵn trong framework bằng một thư viện của bạn chúng ta dễ dàng thực hiện bằng cách đặt tên file và tên lớp giống hệt với tên thư viện của hệ thống. Ví dụ nếu bạn muốn thay thế hoàn toàn xử lý của class Email trên hệ thống bạn chỉ việc tạo ra thư viện Email trong application/libraries/Email.php với khai báo nhưu sau
class CI_Email {
//content
}

//Chú ý: hầu hết các thư viện của CI framework thì đều bắt đầu bằng tiền tố CI_
Việc thay thế xử lý không thể sử dụng cho class database
Để load thư viện Email chúng ta sử dụng cú pháp bình thường
$this->load->library('email');

Mở rộng thư viện có sẵn

Trong trường hợp bạn thấy thư viện viết sẵn của hệ thống vẫn thiếu một vài xử lý nhỏ để đáp ứng nhu cầu giải quyết bài toán bạn có thể viết lại tuy nhiên điều này là không cân thiết. Bạn chỉ cần mở rộng thư viện đã có để bổ sung thêm những xử lý bạn muốn là được. Ví dụ bạn muốn mở rộng thư viện Email có sẵn của hệ thống bạn sẽ tạo ra một class mới là My_Email nằm ở đường dẫn application/libraries/MY_Email.php
class MY_Email extends CI_Email {

public function __construct()
{
parent::__construct(); //Bạn có thể bỏ di nếu không muốn kế thừa construct của lớp cha
}
}

Thiết lập những tiền tố riêng cho thư viện mở rộng
==================================================

Nếu bạn muốn thay đổi những thiết lập tiền tố mặc định của hệ thống. Bạn chỉ cần mở file config **application/config/config.php** và tìm đến dòng sau
```php

$config['subclass_prefix'] = 'MY_';

Bạn chỉ cần chỉnh 'MY_' theo tiền tố mà bạn muốn.
Mặc định thư viện của hệ thống CI sử dụng tiền tố là CI_ nên bạn sẽ không được phép chọn tiền tố này.
Kính chúc các bạn tạo thành công thư viện. Bài viết có tham khảo bộ tài liệu chính thức của CI v2.2.0