Clone một website

Tạo một website giống hệt một website đang hoạt động, và thay đổi đôi chút trên website mới. Có thể đó là thay đổi các quảng cáo thành quảng cáo khác hay chèn vào một đoạn mã ăn cắp thông tin đăng nhập của người dùng…

Website nhân bản vô tính này khác với website giả mạo ở chổ nó không cố mô phỏng website chủ mà lấy dữ liệu trực tiếp từ website chủ, vì vậy nó giống website chủ theo thời gian thực. Tuy vậy nó cũng có điểm yếu.

Về mặt tích cực, clone một website có thể được dùng để tạo website dự phòng, giúp tăng tốc độ tải xuống của người dùng. Vận hành một website clone đơn giản, không cần tạo CSDL riêng. Ngoài ra, website clone có thể lọc các nội dung hay các địa chỉ web như một kiểu family proxy.

Có thể xây dựng một trang web, clone được một trang bất kỳ và giữ được hầu hết các tính năng vốn có.

1. Kỹ thuật clone một website

clone

Giả sử website X clone website A.

Khi người dùng yêu cầu một trang trên X, X chuyển yêu cầu đó cho A và nhận nội dung trả lại từ A, sau đó X chỉnh sửa nội dung này trước khi chuyển đến người dùng.

Về mặt kỹ thuật, cần phải chỉnh sửa tất cả action trong form và tất cả href của anchor, nếu không các phần từ này sẽ đưa người dùng về website A thay vì X hoặc bị lỗi 404.

Một số phần tử làm chuyển hướng trang như javascript window.location, document.location hay <meta http-equiv=”refresh” … /> cũng phải được sửa đổi.

Tất cả việc chỉnh sửa này đều dùng Regular Expression, do đó phải chọn ngôn ngữ mạnh về kỹ thuật này, thí dụ PHP. Tuy nhiên viết các mẫu tìm và thay thế này cũng là một thách thức vì sự đa dạng của mã nguồn trên site chủ.

Cách 1: Dùng frame ẩn

Frame ẩn dùng để chuyển yêu cầu và nhận dữ liệu từ A, chỉnh sửa nội dung và cập nhật lên trang chính. Cách này đơn giản, hoạt động suông sẻ. Khuyết điểm là lộ IP, A có thể dùng .htaccess để chặn IP của X.

Cách 2: Dùng curl

curl dùng để lấy nội dung từ A. Ưu điểm là có thể giả mạo IP, User-Agent bằng IP và User-Agent của người dùng; có thể lưu giữ cookie của phiên làm việc… Khuyết điểm là curl không hỗ trợ Javascript.

2. Thí dụ về mẫu tìm kiếm và thay thế

  • $target là địa chỉ website chủ, thí dụ http://abcd.com
  • $clone là địa chỉ website clone, thí dụ http://you.net/clone.abcd.com
  • $base là đường dẫn về thư mục www, trước các địa chỉ tương đối dẫn về site chủ
  • $clonebase là đường dẫn về thư mục www, trước các địa chỉ tương đối dẫn về site clone
  • $page  là trang web được lấy về từ $target
echo preg_replace(
    array(
        '%(?<=<form\b)([^>]*?\baction)\s*=\s*(\'|")(https?://)?(?:www\.)?\b'.preg_quote($target).'((?:(?!\2).)*)\2%sim',
        '%(?<=<form\b)([^>]*?\baction)\s*=\s*(\'|")(?!https?://)/?((?:(?!\2).)*)\2%sim',
        '%(?<=<a\b)([^>]*?\bhref)\s*=\s*(\'|")(https?://)?(?:www\.)?'.preg_quote($target).'/?((?:(?!\2)[^>])*)\2%sim',
 //     ... các mẫu khác ...
    ),
    array(
        '$1=$2${3}' . $clone . '$4$2',
        '$1=${2}' . $clonebase . '/$3$2',
        '$1=$2${3}' . $clone . '/$4$2',
//      ...
    ),
    $page
);

3. Cấu hình Nginx

Kỹ thuật clone một website được minh họa bằng ngôn ngữ PHP với khoảng 50 dòng lệnh, chạy với web server Nginx trên RPi 2 (không public).

Khi sửa đổi để đường link trỏ về site clone, cấu trúc đường link có thể không phù hợp với cấu trúc file trên website và dẫn đến lỗi 404, vì vậy phải rewrite đường link bằng cách thay đổi cấu hình Nginx. Trang dùng để clone website là _clone.php

location ~ ^/clone\./?(.*)$ {
    rewrite ^/clone\./?(.*)$ /_clone.php?$1 last;
}

4. Cấu hình Apache

Tương tự với Nginx nhưng trên web server Apache việc chuyển hướng trang được thiết lập trong file .htaccess (đã cài đặt thử nghiệm trên openshift.com)

Tạo file .htaccess trong thư mục www có nội dung như sau

RewriteEngine On
RewriteRule ^clone\.(.+)$  _clone.php?$1 [L]

5. Minh họa về kỹ thuật clone (webserver Apache trên Openshift)

  • Lưu ý là server này không hỗ trợ https. Trang demo sẽ đóng lại sau ngày 3/7/2015.
  • Để clone website target.name chỉ cần mở địa chỉ http://000.ly-le.info/clone.target.name
  • Một vài tính năng của website chủ có thể được clone không chính xác nếu tính năng này có dùng Javascript

6. Chống clone website

Vài cách chống clone:

  • Nếu bị clone bằng frame ẩn, dùng .htaccess để khóa IP của site clone
  • Nếu bị clone bằng curl, thêm các đoạn mã Javascript, thí dụ tạo form hay cập nhật thông tin theo cấu trúc DOM, để chống clone vì curl không hỗ trợ Javascript
  • SSL không có tác dụng chống clone

Leave a Comment

Filed under Software

Leave a Reply