Thursday, 14 Nov 2019
kinh nghiệm

cách bảo mật cho website chạy wordpress

  1. Giấu file wp-config.php

Mặc dù có một vài shell như Coleil có thể dò ra file config của mã nguồn dù bạn có giấu ở đâu nhưng việc cất kỹ file nhạy cảm này cũng sẽ giúp bạn hạn chế phần nào, ít ra là các hacker “thực tập”.

Trong host linux, thông thường các tập tin của website sẽ đều nằm trong thư mục public_html và thường path sẽ là /home/username/public_html/wp-config.php.

Do đó, cách giấu file config tốt nhất là bạn nên đưa file wp-config.php ra khỏi thư mục public_html, bạn có thể đăng nhập vào host thông qua FTP và tạo thêm một thư mục tên bất kỳ nằm ngang hàng với public_html.

Sau đó tải file wp-config.php trong thư mục public_html và upload nó vào thư mục mới tạo. Cuối cùng là sửa file wp-config.php trong thư mục public_html thành như sau, xem liên kết ở dưới:

01

02

03

04

<php

  if ( !defined(‘ABSPATH’) )

    define(‘ABSPATH’, dirname(__FILE__) . ‘/’);

  require_once(ABSPATH . ‘../baomat/wp-config.php’);

Bạn thay chữ baomat thành tên thư mục của bạn mà bạn đã tạo nó ngang hàng với public_html.

Lưu ý: Cách này chỉ áp dụng cho các website có file cài đặt ngay trong thư mục public_html chứ không hỗ trợ một lớp thư mục khác. Bạn có thể áp dụng với thư mục www nếu có.

Cấm sửa theme và plugin trong bảng điều khiển

Có một vài hacker khá tinh vi đó là sau khi đã xâm nhập vào được website bạn thì họ sẽ chèn một vài đoạn mã nào đó nằm rải rác bên trong các theme/plugin mà bạn đang dùng.

Do đó, hãy cân nhắc dùng tính năng Editor trong bảng quản trị, tốt nhất là hãy tắt nó đi nếu bạn không dùng tới, cách tắt là chèn đoạn này vào bất kỳ dòng nào trong file wp-config.php

01 define(‘DISALLOW_FILE_EDIT’,true);

Cấm cài thêm theme/plugin

Cũng không có ngoại lệ trong trường hợp hacker có thể tự ý cài thêm một plugin hay theme nào đó mà bên trong đó toàn chứa mã độc nếu họ có quyền truy cập vào bảng điều khiển. Do đó, nếu bạn không có nhu cầu theme/plugin thì hãy đặt đoạn sau vào file wp-config.php

01 define(‘DISALLOW_FILE_MODS’,true);

Chặn thực thi file wp-config.php

Đây cũng là một tip hay nếu bạn không thích bất cứ ai sờ mó đến file wp-config.php trên host.

Đối với máy chủ NGINX thì chèn đoạn sau vào file config

01

02

03

location ~* wp-config.php {

  deny all;

}

Còn đối với máy chủ Apache thì chèn đoạn sau vào file .htaccess

01

02

03

04

<Files wp-config.php>;

    order allow,deny

    deny from all

</Files>

Khóa đường dẫn wp-admin

Dĩ nhiên thư mục wp-admin và file wp-login.php luôn là điểm tấn công nếu một ai đó muốn truy cập vào website của bạn. Do đó, tốt hơn hết là chặn hết tất cả lượt truy cập vào hai khu vực này, trừ bạn ra.

Để làm được việc này bạn có thể sử dụng tính năng Login Protect trong Incapsula hoặc tạo một file .htaccess trong thư mục wp-admin và chèn đoạn sau vào.

01

02

03

04

05

<FilesMatch “.*”>

 Order Deny,Allow

 Deny from all

 Allow from 123.456.789

</FilesMatch>

Thay số 123.456.789 thành IP của máy bạn, muốn biết IP mình là gì thì

Đối với NGINX thì chèn đoạn này vào file config.

01

02

03

04

location ~ ^/(wp-admin|wp-login\.php) {

                allow 123.456.789;

                deny all;

  }

Không cho truy nhập XML-RPC.php

# XML-RPC DDoS PROTECTION

<FilesMatch “^(xmlrpc\.php)”>

Order Deny,Allow

# Whitelist Jetpack/ Automattic CIDR IP Address Blocks

Allow from 192.0.64.0/18

Allow from 209.15.0.0/16

Allow from 66.155.0.0/17

Allow from wordpress.com

Deny from all

</FilesMatch>

# XML-RPC DDoS & TRACKBACK/PINGBACK PROTECTION

# Also block Pingbacks and Trackbacks

<FilesMatch “^(xmlrpc\.php|wp-trackback\.php)”>

Order Deny,Allow

Deny from all

</FilesMatch>

  • Thiết lập Cookie cho domain của bạn

Để thiết lập cookie cho domain của mình ta thêm vào config

define(‘COOKIE_DOMAIN’, ‘wordpress.com.vn’);

//Thay wp.com.vn bằng domain của bạn

Để bật SSL cho trang đăng nhập ta thiết lập:

define(‘FORCE_SSL_LOGIN’, true);

Để bật SSL cho wp-admin ta thiết lập:

define(‘FORCE_SSL_ADMIN’, true);// Tìm hiểu thêm tại codex: http://codex.wordpress.org/Administration_Over_SSL

 

Thay thế các đoạn code PHP không cần thiết bằng HTML

Nếu bạn dùng theme WordPress mà không phải tự code thì sẽ rất hay gặp trường hợp này, mình xin lấy ví dụ như sau:

1

2

3

4

<!DOCTYPE html>;

<html <?php language_attributes(); ?>; prefix=”og: http://ogp.me/ns#”>;

<head>;

<meta charset=”<?php bloginfo( ‘charset’ ); ?>” />

Đoạn code bên trên là mình tìm thấy trong file header của WordPress theme, các bạn có thể thấy có 2 đoạn code php ở trong đó, mỗi khi người dùng truy cập server phải xử lí 2 đoạn php này để trả lại cho người dùng tốn thêm thời gian trong khi chúng ta hoàn toàn có thể thay thế nó bằng đoạn code HTML sau, vừa giảm tả server vừa tăng tốc độ WordPress:

1

2

3

4

<!DOCTYPE html>

<html lang=”vi” prefix=”og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#”>

<head>

<meta charset=”UTF-8″>

Hay tương tự đoạn code sau:

1 if (function_exists(‘favicon’)) { echo favicon(get_option(‘favicon’)); }

có thể thay thế bằng đoạn HTML sau:

<link rel=”icon” href=”https://tinka.vn/static/images/favicon.ico” type=”image/x-icon“>

Sử dụng Cache và CDN

W3 Total Cache là plugin cache yêu thích của mình, Plugin này có rất nhiều chức năng, hỗ trợ rất nhiều loại cache như Page Cache, Browser Cache, Object Cache, ngoài ra còn hỗ trợ cài đặt CDN cho website. Sau đây, mình sẽ hướng dẫn các bạn cấu hình W3 ToTal Cache để có tốc độ nhanh nhất. Bạn cài đặt plugin W3 Total Cache vào, phàn cài đặt thì mình không hướng dẫn nữa vì nó quá cơ bản rồi, sau khi cài đặt bạn vào phần General Settings: Tích chọn Enable ở các mục Page cache, Database Cache, Object Cache, Browser Cache. Vẫn trong phần General Settings tại các mục Page cache method, Database Cache Method, Object Cache Method bạn chọn là Memcached, để sử dụng được Memcached thì hosting/vps của bạn phải cài đặt Memcached, nếu trên VPS chưa cài memcache thì chạy lệnh sau( đối với Unbuntu/Debian) apt-get install php5-memcached còn nếu dùng hosting thì bạn có thể bật trong Cpanel nếu nhà cung cấp hỗ trợ còn không thì cứ chọn Opcode: Alternative PHP Cache (APC). Mình vẫn khuyến khích dùng MemCache nếu có thể.

Tiếp tục chúng ta thiết lập chi tiết cho từng loại Cache ở trên, tại Menu bên trái của W3 Total Cache bạn chọn Page Cache, trong Page Cache tích vào các mục

  • Cache posts page
  • Cache feeds: site, categories, tags, comments
  • CacheSSL (https) requests (nếu website bạn có SSL như Crazytut)
  • CacheURIs with query string variables
  • Cache 404 (not found) pages
  • Don’t cache pages for logged in users
  • Don’t cache pages for following user roles (chọn Administrator)

Kéo tiếp xuống dưới tại phần Cache Preload, để như sau:

  • Update interval: 900
  • Pages per interval: 10
  • SitemapURL: /sitemap.xml (Nếu dùng Yoast sitemap thì là /sitemap_index.xml)

Kéo tiếp xuống tại phần Purge Policy: Page Cache chọn:

  • Front page
  • Posts page
  • Post page
  • Blog feed
  • rss2 (default)
  • Purge Limit – 10

Nhấn Save all settings để lưu lại.

Giờ chuyển sang phần Database Cache, bạn thiết lập như sau:

  • Tích vào Don’t cache queries for logged in users
  • Maximum lifetime of cache objects: 86400
  • Garbage collection interval: 3600

Nhấn Save all settings để lưu lại.

Xong chuyển sang phần Objetc Cache:

  • Default lifetime of cache objects: 2629743
  • Garbage collection interval: 3600

Nhấn Save all settings để lưu lại.

Tiêp tục sang phần Browser Cache, bạn thiết lập như sau, phần này quan trọng nếu thiết lập sai website của bạn sẽ không thể cung cấp các nội dung mới cho người dùng:

Tích chọn các mục sau trong phần General:

  • Set expires header
  • Set cache control header
  • Set entity tag (eTag)
  • EnableHTTP (gzip) compression
  • Bỏ tích chọn  Prevent caching of objects after settings change

Kéo xuống phần CSS & JS, để như sau:

  • Set expires header
  • Expires header lifetime: 86400
  • Set cache control header
  • Cache Control policy: cache with max-age (“public, max-age-EXPIRES_SECONDS”)
  • Set entity tag (ETag)
  • EnableHTTP (gzip) compression
  • Bỏ tích chọn  Prevent caching of objects after settings change

Xuống tiếp phần HTML & XML:

  • Set expires header
  • Expires header lifetime: 3600
  • Set cache control header
  • Cache Control policy: cache with max-age (“public, max-age-EXPIRES_SECONDS”)
  • Set entity tag (ETag)
  • EnableHTTP (gzip) compression
  • Bỏ tích chọn  Prevent caching of objects after settings change

Media & Other files:

  • Set expires header
  • Expires header lifetime: 31536000
  • Set cache control header
  • Cache Control policy: cache with max-age (“public, max-age-EXPIRES_SECONDS”)
  • Set entity tag (ETag)
  • EnableHTTP (gzip) compression
  • Bỏ tích chọn  Prevent caching of objects after settings change

 

Hiện nay trên mạng có khá nhiều hướng dẫn di chuyển vị trí file wp-config.php cho wordpress. Tuy nhiên hôm nay mình sẽ hướng dẫn 1 cách khác triệt để hơn.
Trong tut này mình sẽ hướng dẫn các bạn di chuyển file wp-config.php ra ngoài public_html (Ngang hàng public_html) và đổi tên nó
Ok. Bắt đầu:
Mở file wp-load.php
1. Tìm:

Mã:

if ( file_exists( ABSPATH . ‘wp-config.php’) )

Sửa thành

Mã:

if ( file_exists( ABSPATH . ‘codientu.php’) )

  1. Tìm

Mã:

require_once( ABSPATH . ‘wp-config.php’ );

sửa thành

Mã:

require_once( ABSPATH . ‘codientu.php’ );

  1. Tìm

Mã:

elseif ( file_exists( dirname(ABSPATH) . ‘/wp-config.php’ )

sửa thành

elseif ( file_exists( dirname(ABSPATH) . ‘./codientu.php’ )

4. Tìm

Mã:

require_once( dirname(ABSPATH) . ‘/wp-config.php’ );

Sửa thành

require_once( dirname(ABSPATH) . ‘./codientu.php’ );

codientu.php: là file config mới các bạn đặt tên tùy ý.

– Chmod cho file config mới tạo thành 400
– Chmod file wp-load.php thành 400

5. Đánh lừa attacker

Sau khi đã đổi tên và di chuyển file config ra ngoài public_html thì ta vẫn tạo 1 file wp-config.php trong public_html (Ngang hàng index.php) với nội dung như sau:

Mã:

<?php include “codientu/abc.php” ?>

Chmod cho file wp-config.php này thành 400

Sau đó tạo 1 thư mục codientu và tạo file abc.php trong đó (Tên các bạn thay đổi tùy ý nhé)
Tiếp theo các bạn copy nội dung file config thật vào file abc.php và sửa

Mã:

/** The name of the database for WordPress */

define(‘DB_NAME’, ‘database_name_here’);

 

/** MySQL database username */

define(‘DB_USER’, ‘username_here’);

 

/** MySQL database password */

define(‘DB_PASSWORD’, ‘password_here’);

Điền các thông tin linh tinh vào đó để đánh lạc hướng attacker
Tiếp theo chmod file abc.php thành 400
Thư mục codientu thành 100

Với cách làm như trên có thể nói là attacker muốn mò ra được file config thật của bạn cũng khá là vất vả
Nếu có điều kiện thì các bạn mã hóa luôn các file đó (zend, ionecube….)

Hướng dẫn xóa Revision post trong WordPress

  1. Đăng nhập vàophpMyAmin bằng cPanel.
  2. ChọnDatabase mà bạn tạo cho WordPress.
  3. Chọn tabSQL và chèn đoạn code sau: DELETE FROM wp_posts WHERE post_type = “revision”;
  4. Click go để áp dụng lệnh.

Làm đẹp URL Search cho WordPress

Trong bài viết này tôi sẽ hướng dẫn các bạn thay đổi cấu trúc URL Search cho WordPress trông đẹp mắt hơn, thân thiện hơn mà không cần phải sử dụng đến Plugin.

Khi tìm kiếm bằng form tìm kiếm mặc định của WordPress thì URL có dạng như sau:

1 https://tinka.vn/?s=seo+là+gì

Và tôi muốn thay đổi URL này thành:

1 https://tinka.vn/search/seo+là+gì

Cách 1: Rất đơn giản, bạn mở file functions.php trong thư mục Theme bạn đang sử dụng ra và thêm vào đoạn code sau đây:

1

2

3

4

5

6

7

function search_url_rewrite_rule() {

if ( is_search() &amp;amp;&amp;amp; !empty($_GET[‘s’])) {

wp_redirect(home_url(“/search/”) . urlencode(get_query_var(‘s’)));

exit();

}

}

add_action(‘template_redirect’, ‘search_url_rewrite_rule’);

Cách 2: Sửa file .htaccess (nằm ngang hàng với thư mục wp-admin), thêm vào:

1

2

RewriteCond %{QUERY_STRING} \\?s=([^&amp;]+) [NC]

RewriteRule ^$ /search/%1/? [NC,R,L]

Cả hai cách trên đều có ưu và nhược điểm riêng. Nếu bạn sửa file functions.php trong theme thì sau khi bạn nâng cấp phiển bản theme hoặc sử dụng theme khác, việc thay đổi này coi như không có. Nhưng nếu dùng htaccess để rewrite thì lại chưa hỗ trợ tốt với các từ khóa tiếng Việt khi tìm kiếm nên tôi khuyên bạn sử dụng theo cách 1.

Post Comment